[過去ログ] JavaScript の質問用スレッド vol.125 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
648: デフォルトの名無しさん (ワッチョイ 9ebd-kyjD [119.240.41.213]) [sage] 2023/02/24(金) 02:46:21.28 ID:thXJapXb0(1/2) AAS
>>647647(2): デフォルトの名無しさん (ワッチョイ fa3d-FCAK [133.32.132.49 [上級国民]]) [sage] 2023/02/24(金) 01:21:32.26 ID:jGK2BMhd0(1) AAS
//【環境】Win11,JScript
//【何をしたのか】case文のところに条件式を書き、breakせずにすべての条件式で評価したい
//【サンプルコード】現象を再現可能な最小限のコードを書いてください。
a=1
switch (true) {
case (a==1):
a=a+16
WScript.echo("aの値を変更a=",a)
case (a>10):
WScript.echo("a>10","a=",a)
a=a-10
WScript.echo("aの値を変更a=",a)
case (a>30):
WScript.echo("a>30です","a=",a)
a=0
WScript.echo("aの値を変更a=",a)
}
WScript.echo("最終的な結果a=",a)
//【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
aの値を変更a= 17
a>10 a= 17
aの値を変更a= 7
a>30です a= 7
aの値を変更a= 0
最終的な結果a= 0
//【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
2番目のcaseでa=7だから3番目のcaseにはいかず、最終的にはa=7になるのでは?
上から順に case が評価され、どこかで真になればそれ以降の case は評価されない。
break してないからそれ以降の処理がフォールスルーで実行されてるだけ。
全部の条件を評価したいなら普通に if で書けばいいと思うよ。
650(1): デフォルトの名無しさん (ワッチョイ 9ebd-kyjD [119.240.41.213]) [sage] 2023/02/24(金) 08:59:59.37 ID:thXJapXb0(2/2) AAS
>>649case に式を書けるようにしたことによって使えるようになった副作用みたいなものだよね。
switch の式と一致する case を探すのが switch文の動作だとするなら、switch の式 true と一致する値となる、すなわち true になる式を持つ case が選択される。
個人的には if で書けばいいものをわざわざ分かりづらい書き方にしてるバッドプラクティスだと思ってるが、フォールスルーと組み合わせると if よりもスマートに書ける可能性はあるかもね。
特に >>647 のように全部の case を評価してほしいなら、switch で書く利点が何一つ無い。
if より利点がある場合は、フォールスルーする場合に最初に true になる case までしか式が評価されないことくらいなのに。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.041s