アカウント名:
パスワード:
なんでこんな気持ち悪い事ができてしまうのよw
プログラム言語慣れしてるから気にならないけど、JavaScriptに限ったことじゃなく、短絡評価を採用しているプログラム言語の論理演算は気持ち悪い。とも言えると思う。
A and Bは、AとBを同時に評価して、両方がtrueならtrueである。みたいな意味のはずだけど、
プログラム言語では、Aを評価し終わってからBを評価するから、Aの評価中にBが変動しちゃう可能性もあるし、AがfalseならBを評価すらしない。
論理演算としてみると、これは気持ち悪いぞ。
短絡評価の無いプログラミング言語を使うと地獄だぜ。具体的にはプログラミング入門演習でやらされたPascal。
Pascalでの書き方はもう忘れたからCライクに書くけど、
if(a != null && a[0] == 1){ puts("a starts with 1");}
こういうので、aの値いかんに依らず、a[0] == 1が評価されて死ぬからな。
それまでちゃんと考えたことがなくて「短絡評価って高速化のためのおまけだよね」と漠然と思ってたからえらい目に会った。恐ろしさを認識できて、問題ないように書くよう意識してからも、エラーが出るわ出るわ、どんだけ短絡評価前提で書いてたんだと、びっくりした。
&&とかandって表現に違和感が、というのは分かるけど、=で代入を表現する気味悪さと同じく、そこは諦めた方が良い。
普通にこう書けばいいだけでは?
if(a != null){ if (a[0] == 1){ puts("a starts with 1"); }}
だって、こういうロジックを期待して書いてたんでしょ?
> =で代入を表現する気味悪さと同じく、
そこはPascalでは:=を使ってるところじゃん。
ていうかチラっとググったらPascalでは短絡評価を行うかどうかは処理系依存とかサラッと恐ろしいことが書かれてるんだけど。if文の条件式の中に副作用のあるものを詰め込むなという教育的指導のためにあえてそうしてるっ…てことはさすがにないよな。
VBはショートサーキットをしなかった不満が出たのかVB.NETではAndAlso/OrElseと言うショートサーキット演算子が導入されましたね、
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
クラックを法規制強化で止められると思ってる奴は頭がおかしい -- あるアレゲ人
この辺がJavaScriptの嫌いなところ (スコア:0, すばらしい洞察)
なんでこんな気持ち悪い事ができてしまうのよw
Re: (スコア:1)
プログラム言語慣れしてるから気にならないけど、
JavaScriptに限ったことじゃなく、
短絡評価を採用しているプログラム言語の論理演算は気持ち悪い。
とも言えると思う。
A and B
は、AとBを同時に評価して、両方がtrueならtrueである。
みたいな意味のはずだけど、
プログラム言語では、
Aを評価し終わってからBを評価するから、Aの評価中にBが変動しちゃう可能性もあるし、
AがfalseならBを評価すらしない。
論理演算としてみると、これは気持ち悪いぞ。
Re:この辺がJavaScriptの嫌いなところ (スコア:1)
短絡評価の無いプログラミング言語を使うと地獄だぜ。
具体的にはプログラミング入門演習でやらされたPascal。
Pascalでの書き方はもう忘れたからCライクに書くけど、
if(a != null && a[0] == 1){
puts("a starts with 1");
}
こういうので、aの値いかんに依らず、a[0] == 1が評価されて死ぬからな。
それまでちゃんと考えたことがなくて「短絡評価って高速化のためのおまけだよね」と漠然と思ってたからえらい目に会った。
恐ろしさを認識できて、問題ないように書くよう意識してからも、エラーが出るわ出るわ、どんだけ短絡評価前提で書いてたんだと、びっくりした。
&&とかandって表現に違和感が、というのは分かるけど、=で代入を表現する気味悪さと同じく、そこは諦めた方が良い。
Re: (スコア:0)
普通にこう書けばいいだけでは?
if(a != null){
if (a[0] == 1){
puts("a starts with 1");
}
}
だって、こういうロジックを期待して書いてたんでしょ?
Re: (スコア:0)
> =で代入を表現する気味悪さと同じく、
そこはPascalでは:=を使ってるところじゃん。
ていうかチラっとググったらPascalでは短絡評価を行うかどうかは処理系依存とかサラッと恐ろしいことが書かれてるんだけど。if文の条件式の中に副作用のあるものを詰め込むなという教育的指導のためにあえてそうしてるっ…てことはさすがにないよな。
Re:この辺がJavaScriptの嫌いなところ (スコア:2)
VBはショートサーキットをしなかった
不満が出たのかVB.NETではAndAlso/OrElseと言うショートサーキット演算子が導入されましたね、