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

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

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

    by Anonymous Coward

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

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

    • by 7743 (11762) on 2019年11月08日 19時09分 (#3713069)

      C言語で条件の部分が数値にしか見えない場合は可読性が多少上がるかもしれない。
      ブール型の扱いが厳密な言語なら可読性があるように書かないとコンパイルエラーになるから、そういう言語しか使ってなければおかしく見えるかもね。

      • by Super KUMASAN (34209) on 2019年11月09日 7時02分 (#3713320)

        C99を知らない人にはピンと来ないかもしれませんね

      • by Anonymous Coward

        ブール型の扱いが厳密な言語なら可読性があるように書かないとコンパイルエラーになるから、そういう言語しか使ってなければおかしく見えるかもね。

        具体的に
        return (条件);
        がコンパイルエラーになって
        return (条件) ? true : false;
        がコンパイルエラーにならない言語って何があるの?

        • by 7743 (11762) on 2019年11月08日 19時38分 (#3713093)

          そういうことではなくて、ブール型を厳密に扱う言語のブール型を返す関数で「return 1+2*3/4」は真を返すことにならず、コンパイルエラーになるってこと。

          • by Anonymous Coward

            そういう言語では
            return (1+2*3/4) ? true : false;
            もコンパイルエラーになるのでは?

            • by 7743 (11762) on 2019年11月08日 19時52分 (#3713107)

              そういう言語ではreturn (1+2*3/4) != 0というような真偽値を表す式であることが一目でわかる(==可読性が高い)ように書かないとコンパイルエラーになるということです。

              • by Anonymous Coward

                なんだ、三項演算子は関係ないのかよw

              • by Anonymous Coward

                だとしても その上で、? true : false とわざわざ参考演算子で処理増やしてるほうが同じことを二重に書いていて可読性悪いだろう。

                return ((1+2*3/4) != 0);

                return ((1+2*3/4) != 0) ? true : false;

                だぜ。発端は後者がいいっていってるようだが、前者のほうが簡潔で読み易いし、したいことも明確。
                後者だとわざわざ処理足したうえで結果が同じって、まさか入れ替えを間違えてるのか?とも思えてくる。

                今時のコンパイラは~って奴がいて確かにインタプリタじゃないんだし俺もそうだとは思う。
                でも、そういうのと別次元の話だろ、これ。

              • by 7743 (11762) on 2019年11月08日 20時14分 (#3713123)

                三項演算子をわざわざ使えばおかしく感じられる言語の方に突っ込みを入れていれば、三項演算子に関係ない回答になるのはしようがないです。

              • by Anonymous Coward on 2019年11月08日 20時21分 (#3713131)

                三項演算子の可読性や是非以前に、可読性の低い日本語しか書けないようなエンジニアが駄目な実例ですな。
                かわりに英語が堪能ならいいけど、だったら英語の/.いけと。

              • by Anonymous Coward

                むしろ冗長に書いた方が可読性上がることの証明だな。

              • by Anonymous Coward

                三項演算子をわざわざ使えばおかしく感じられる言語なら、三項演算子をわざわざ使えばおかしいので、
                そうでない場合に、三項演算子をわざわざ使うのはどうなのか?という話題だと思うのですが。

              • by 7743 (11762) on 2019年11月08日 23時28分 (#3713233)

                それについては元コメに対して直接コメントしたらよいのではないでしょうか。
                わざわざ私のコメントにつけたら私のコメントに対する話だと考えてしまうので。

              • by 7743 (11762) on 2019年11月09日 0時16分 (#3713256)

                私のコメントはC言語で条件式が数値の場合ならまだありかもね。という話なので、
                1. return 1+2*3/4
                or
                2. return (1+2*3/4) != 0
                or
                3. return (1+2*3/4) ? true : false
                ということになります。これなら趣味の問題かなと。

              • by Anonymous Coward

                > 3. return (1+2*3/4) ? true : false
                > ということになります。これなら趣味の問題かなと。

                散々コメント書いて結局それが結論なんですか?

                そもそも3のコードがダサい、3のコードを書くような奴はプログラムが全然解ってない、
                3のコードを書くようなやつはアホだ、って話題なのは解ってますか?

              • by 7743 (11762) on 2019年11月09日 3時05分 (#3713294)

                いや解ってないですが。
                というか、そのコメント自体何の根拠もないわけで。もしかして、Anonymous Cowardは意識の集合体なので、誰が書いてようが考えていることは同じとかいうネタですかね。

              • by Anonymous Coward

                自分だったら、
                4. return ((1+2*3/4)!=0)? true : false;
                と書きます。
                これなら、int => boolの評価を言語仕様知らなくても読めますから。

              • by Anonymous Coward

                ブール型を厳密に扱う言語を持ち出してきておいて、3は無いんじゃないの?

          • by Anonymous Coward

            今日日、そんな型に厳格な言語をIDEも使わずに書くか?
            ましてや動作バグとかならともかく、コンパイルが通らない状態で放置?
            どんな腐った環境の話をしてるのか知らんが、そこまでピーキーな状況を一般論みたいに語られても、知らんがなとしか言いようがない。

        • by Anonymous Coward

          具体的に
          return (条件);
          がコンパイルエラーになって
          return (条件) ? true : false;
          がコンパイルエラーにならない言語って何があるの?

          えっと、

          bool hoge(a, b)
          {
                  return (a == b);
          }

          bool piyo(a, b)
          {
                  return (a == b) ? true : false;
          }

          piyo() はコンパイル通して hoge() はエラーにする大喜利ってことでいいかな? なんだ楽勝じゃんね [wandbox.org]

      • by Anonymous Coward

        最近、

        (cond) ? (a = 1) : (a = 2);

        ってコードを見かけてちょっと頭を抱えた。

        if (cond) { a = 1; } else { a = 2; }

        a = (cond) ? 1 : 2;

        か、どっちかにしろ、と。

        三項演算子は「代入処理は一つ(代入先は同じ)」であることを明確にできるのが、ifに対するメリットだと思うが、この例だと台無しというか両方の悪いところ取りでもう。
        一番可読性いいのは、

        a

        • by Anonymous Coward
          最近の言語とかswitchを式にする機能強化が流行りだけど(C#とか)
          確かにif式って昔っからあるの以外は最近追加しましたみたいのは聞かないような
        • by Anonymous Coward

          Kotlinがそうですね。でも、3項演算子もやっぱりありますが。

        • by Anonymous Coward

          rubyか何かでも使えなかったっけ?
          気持ち悪いから使わないけど。

          式の中に制御構文ぶちこんでる時点でどれも同じ。

        • by Anonymous Coward

          a = 1 if cond else 2
          と書かせる、オランダ人にしかわからない言語を思い出した。

          • by Anonymous Coward
            たぶん多数のスラド住民が、
            「自分はオランダ人だったのか!」
            と思ってる。
          • by Anonymous Coward

            オランダとか関係なく、英語でも普通に使うだろう。ラテン語系だと、100%日常的に使う構文じゃない?

        • by Anonymous Coward

          | a = (cond) ? 1 : 2;
          のほうがみやすいだろ。

          C#には?だけでなく??ってのもあってな。
          https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/oper... [microsoft.com]

          null値か否かの分岐なんだが、代入させたいけど極々単純な分岐の場合には1行になったほうが見やすいからいろんな言語で三項目演算子やその類が対応されているのだと思うぞ。

        • by Anonymous Coward

          ALGOLからLisp、ML、Haskellあたりの関数型言語は大抵if式ですね。
          Smalltalkのやつも式と言うのかな

          • by ukenerai (36532) on 2019年11月09日 19時34分 (#3713645) 日記

            Excelの=if()が恥ずかしげに顔を出します

            # もうすぐ冬ですね

          • by Anonymous Coward

            SNOBOLは構造化プログラミングが提唱される以前の言語であるため、ループは基本的に無条件分岐(goto文)で行われる。全ての式は実行後、次に処理する行のラベルを選択でき、省略時は次の行が実行される。標準入出力はINPUT/OUTPUTという変数に代入処理を行うことで実行される。if文に相当する物は無く、代わりに式を実行後、成功か失敗かで次に処理する行を変更することができる。これは具体的には

                    LINE = INPUT :S(LABEL1) F(LABEL2)
            のような場合(これは標準入力から1行読み込み変数 LINEに代入している)、その処理が成

            • by Anonymous Coward

              SNOBOLは学生の頃に授業で使わされたことがあります。
              数年前(数年先輩)の学生が、学科のコンピュータ用に処理系を作ったと聞きました。
              可変長の文字列処理に長けた言語という印象だけ残っていますが、ほとんど覚えていません。

              内容のないコメントですが、懐かしかったので。

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

処理中...