パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

JavaScriptで「(a ==1 && a== 2 && a==3)」の結果を真にする手法が議論される」記事へのコメント

  • by Anonymous Coward

    なんでこんな気持ち悪い事ができてしまうのよw

    • プログラム言語慣れしてるから気にならないけど、
      JavaScriptに限ったことじゃなく、
      短絡評価を採用しているプログラム言語の論理演算は気持ち悪い。
      とも言えると思う。

      A and B
      は、AとBを同時に評価して、両方がtrueならtrueである。
      みたいな意味のはずだけど、

      プログラム言語では、
      Aを評価し終わってからBを評価するから、Aの評価中にBが変動しちゃう可能性もあるし、
      AがfalseならBを評価すらしない。

      論理演算としてみると、これは気持ち悪いぞ。

      • by Anonymous Coward on 2018年01月19日 11時56分 (#3347458)

        短絡評価の無いプログラミング言語を使うと地獄だぜ。
        具体的にはプログラミング入門演習でやらされたPascal。

        Pascalでの書き方はもう忘れたからCライクに書くけど、

        if(a != null && a[0] == 1){
                puts("a starts with 1");
        }

        こういうので、aの値いかんに依らず、a[0] == 1が評価されて死ぬからな。

        それまでちゃんと考えたことがなくて「短絡評価って高速化のためのおまけだよね」と漠然と思ってたからえらい目に会った。
        恐ろしさを認識できて、問題ないように書くよう意識してからも、エラーが出るわ出るわ、どんだけ短絡評価前提で書いてたんだと、びっくりした。

        &&とかandって表現に違和感が、というのは分かるけど、=で代入を表現する気味悪さと同じく、そこは諦めた方が良い。

        親コメント
        • by Anonymous Coward

          普通にこう書けばいいだけでは?

          if(a != null){
                  if (a[0] == 1){
                          puts("a starts with 1");
                  }
          }

          だって、こういうロジックを期待して書いてたんでしょ?

        • by Anonymous Coward

          > =で代入を表現する気味悪さと同じく、

          そこはPascalでは:=を使ってるところじゃん。

          ていうかチラっとググったらPascalでは短絡評価を行うかどうかは処理系依存とかサラッと恐ろしいことが書かれてるんだけど。if文の条件式の中に副作用のあるものを詰め込むなという教育的指導のためにあえてそうしてるっ…てことはさすがにないよな。

クラックを法規制強化で止められると思ってる奴は頭がおかしい -- あるアレゲ人

処理中...