パスワードを忘れた? アカウント作成

Twitterで「三項演算子」がトレンド入り」記事へのコメント

  • 発端? (スコア:3, 参考になる)

    by Anonymous Coward

    きっかけはこのおもしろい(オブラートに包んだ表現)ツイートではないかな

    https://twitter.com/fnya/status/1192036095820615680 [twitter.com]

    • by Anonymous Coward

      return (条件)? true : false; なんて書くくらいなら return 条件; だよなあ
      そりゃレビューで落とすでしょ感

      • by Anonymous Coward

        それを可読性が落ちると言ってつっぱねたというのがすごい。
        ? true : false
        がついている方が読みにくいと超個人的には思うけどね。

        • by Anonymous Coward

          俺も、ゴミつけたら読み難いとしか思えないが、読み易い読み難いってのは個人の感性というか感想だから仕方ないのだろう。
          とはいえ自分に都合がよいからといって、一般的でないことやって読み難いから止めろと言われても、つっぱねるってのは、エンジニアを仕事にするの向いてないというか、チームに存在するだけで迷惑な奴ってことだから仕事変えて趣味だけに留めるべきだろうな。

          https://twitter.com/fnya/status/1192039284821250048 [twitter.com]
          別ツイートで、こんなことも言ってるから、つまみぐい的にプログラム書いてきて、そもそものプログラムへの理解が乏しいようだから、自分の能力不足を改善せずに目先の問題回避してきた結果、そうしないと困ってるのかもね。
          そのあたりも思考方向がエンジニア向きじゃなさそう。

          • Re:発端? (スコア:2, 参考になる)

            by Anonymous Coward on 2019年11月08日 19時28分 (#3713087)

            TokusiN @toku51n 11月6日
            返信先: @fnyaさん

            trueとの比較は危険なのでやってはいけない。もしどうしてもbool型との比較が必要なのであれば!=falseにしなければいけない。
            1件の返信 2件のリツイート 10 いいね

            fnya@Web/Mobileアプリ構築中 @fnya 11月6日

            危険というのは、PHPやJavaScriptでオブジェクトがtrue判定されることですか?
            1件の返信 0件のリツイート 0 いいね

            TokusiN @toku51n 11月6日

            いえ、trueと評価されるべきものがfalse判定されることがあります。
            1件の返信 0件のリツイート 3 いいね

            fnya@Web/Mobileアプリ構築中 @fnya11月6日

            ?!
            1件の返信 0件のリツイート 0 いいね

            ?!じゃねえよ。頭が正常系でできてんのか?

            • by Anonymous Coward

              TokusiN @toku51n 11月6日
              返信先: @fnyaさん

              trueとの比較は危険なのでやってはいけない。もしどうしてもbool型との比較が必要なのであれば!=falseにしなければいけない。
              1件の返信 2件のリツイート 10 いいね

              昔の C で bool 型を整数型の typedef とかでやってた頃の話じゃね?
              C99 以降の stdbool.h 使ってる分には true との比較になんか問題あるかなあ??

              • by Anonymous Coward

                ダメ
                _Bool は暗黙のキャストにおいて優先度が一番低いから、その手の比較に関しての問題は_Boolが無かった時代とまったく同じ。

              • by Anonymous Coward

                https://twitter.com/toku51n/status/1192100468144521216 [twitter.com] の流れの話だと思うけども、
                _Boolの変数に対して

                if (変数 == true) {}

                したとして、「_Bool は暗黙のキャストにおいて優先度が一番低い」という話がなんで出てくるのかがまずわからん

              • by Anonymous Coward

                わからんってことは、その流れが微塵も理解できてないってことだよ。

                a が 1でないなら

                if (a) -> true
                if (a==true) -> false

                になるってこと。
                キャストの優先順位が低いということは、trueって書いても、それは数字の 1 と比較してることににしかならん。
                (そもそもの話として stdbool の true は _Bool型じゃなくて、int 型の 1なんだけどな)

            • by Anonymous Coward

              みんな分かってると思うけど補足。

              != false と書くべきって理由は、false 、true は値としては 0 、1 になるってところ。
              そこに 2 とか 3 とかの値が来たときにどう動くのか、それを考えろってこと。

              0 、1 以外は想定外? それならそれを保証しろ、と。ドキュメントとか assert() とかでも良いけど、実環境の実行時には無力。

              あと、ツイートの「条件式だけで動作する」ってやつは「式の値」だと思うけど、C 特有で分かりにくいとは思う。「副作用」もあるだろうし。

              • by Anonymous Coward

                != false と書くべきって理由は、false 、true は値としては 0 、1 になるってところ。
                そこに 2 とか 3 とかの値が来たときにどう動くのか、それを考えろってこと。

                0 、1 以外は想定外? それならそれを保証しろ、と。ドキュメントとか assert() とかでも良いけど、実環境の実行時には無力。

                _Bool は 0 か 1 以外の値取り様ないだろアホか

              • by Anonymous Coward

                少なくとも C の仕様だと _Bool が 0と1が保持できることは保証してるけど、 0 と 1しか値ととらないことは保証してないよ。

              • by Anonymous Coward

                https://kikakurui.com/x3/X3010-2003-01.html [kikakurui.com]
                > 6.3.1.2論理型 任意のスカラ値を_Bool 型に変換する場合,その値が 0 に等しい場合は結果は 0 とし,それ以外の場合は 1 とする。

                とあるけども、0 と 1 以外の値を取らせる方法教えてPLZ

              • by Anonymous Coward
                未初期化の_Boolは0でも1でもない値(例えば鼻から出る悪魔とか)を取ることがある
              • by Anonymous Coward

                未定義動作を挙げる意図がわからん

              • by Anonymous Coward

                未定義動作だから、何が入ってるかわからないんだろ。
                _Bool型だから0/1しかありえないって前提は成立しない。

              • by Anonymous Coward

                「0 と 1 以外の値を取らせる方法」の意味が理解できない池沼は無理しなくて良いよw

              • by Anonymous Coward

                未定義動作挙げてる時点で「正しく書かれたプログラムではそうする方法はない」と言ってるのと同じなんだよなあ

              • by Anonymous Coward

                Cなんだから、アドレスとってメモリ書き換えればいくらでも書き換えられるよ?

              • by Anonymous Coward

                未定義動作挙げる意図が分からん

              • by nekopon (1483) on 2019年11月11日 10時33分 (#3714152) 日記
                #3713087

                頭が正常系でできてんのか?

                これ重要な指摘かと。
                プログラマたるもの鼻から悪魔を出させるようなことはしたくないにちがいないのですが、だいたいの処理系の鼻には悪魔がたくさん住み着いているので。

              • by Anonymous Coward
                未定義つうても未定義なんだから本当に何でもアリなわけで期待したように動いたとしても仕様の範囲内なわけ
                で、未初期化のintがintの範囲内になることが期待できる処理系であっても
                未初期化の_Boolは大抵の場合0でも1でもない値になるって話
              • by Anonymous Coward

                未定義処理の内容は規格外だよバカなの?

              • by Anonymous Coward

                どこに未定義動作が?
                bool型変数のアドレスを取ること?
                アドレスをchar*型にキャストすること?
                char*型変数で受けること?
                アドレスのメモリに任意の値を放り込むこと?

              • by Anonymous Coward
                未定義に何らかの動作を定義して実装することは処理系実装者の自由だし規格内だよバカなの?
              • by Anonymous Coward
                gccがおかしいだけなような気がする https://godbolt.org/z/ZyKjvX [godbolt.org]
              • by Anonymous Coward

                どんなバイナリ吐いてるんだろう...

未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー

処理中...