アカウント名:
パスワード:
きっかけはこのおもしろい(オブラートに包んだ表現)ツイートではないかな
https://twitter.com/fnya/status/1192036095820615680 [twitter.com]
C言語で条件の部分が数値にしか見えない場合は可読性が多少上がるかもしれない。ブール型の扱いが厳密な言語なら可読性があるように書かないとコンパイルエラーになるから、そういう言語しか使ってなければおかしく見えるかもね。
C99を知らない人にはピンと来ないかもしれませんね
ブール型の扱いが厳密な言語なら可読性があるように書かないとコンパイルエラーになるから、そういう言語しか使ってなければおかしく見えるかもね。
具体的にreturn (条件);がコンパイルエラーになってreturn (条件) ? true : false;がコンパイルエラーにならない言語って何があるの?
そういうことではなくて、ブール型を厳密に扱う言語のブール型を返す関数で「return 1+2*3/4」は真を返すことにならず、コンパイルエラーになるってこと。
そういう言語ではreturn (1+2*3/4) ? true : false;もコンパイルエラーになるのでは?
そういう言語ではreturn (1+2*3/4) != 0というような真偽値を表す式であることが一目でわかる(==可読性が高い)ように書かないとコンパイルエラーになるということです。
なんだ、三項演算子は関係ないのかよw
だとしても その上で、? true : false とわざわざ参考演算子で処理増やしてるほうが同じことを二重に書いていて可読性悪いだろう。
return ((1+2*3/4) != 0);トreturn ((1+2*3/4) != 0) ? true : false;
だぜ。発端は後者がいいっていってるようだが、前者のほうが簡潔で読み易いし、したいことも明確。後者だとわざわざ処理足したうえで結果が同じって、まさか入れ替えを間違えてるのか?とも思えてくる。
今時のコンパイラは~って奴がいて確かにインタプリタじゃないんだし俺もそうだとは思う。でも、そういうのと別次元の話だろ、これ。
三項演算子をわざわざ使えばおかしく感じられる言語の方に突っ込みを入れていれば、三項演算子に関係ない回答になるのはしようがないです。
三項演算子の可読性や是非以前に、可読性の低い日本語しか書けないようなエンジニアが駄目な実例ですな。かわりに英語が堪能ならいいけど、だったら英語の/.いけと。
むしろ冗長に書いた方が可読性上がることの証明だな。
三項演算子をわざわざ使えばおかしく感じられる言語なら、三項演算子をわざわざ使えばおかしいので、そうでない場合に、三項演算子をわざわざ使うのはどうなのか?という話題だと思うのですが。
それについては元コメに対して直接コメントしたらよいのではないでしょうか。わざわざ私のコメントにつけたら私のコメントに対する話だと考えてしまうので。
私のコメントはC言語で条件式が数値の場合ならまだありかもね。という話なので、1. return 1+2*3/4or2. return (1+2*3/4) != 0or3. return (1+2*3/4) ? true : falseということになります。これなら趣味の問題かなと。
> 3. return (1+2*3/4) ? true : false> ということになります。これなら趣味の問題かなと。
散々コメント書いて結局それが結論なんですか?
そもそも3のコードがダサい、3のコードを書くような奴はプログラムが全然解ってない、3のコードを書くようなやつはアホだ、って話題なのは解ってますか?
いや解ってないですが。というか、そのコメント自体何の根拠もないわけで。もしかして、Anonymous Cowardは意識の集合体なので、誰が書いてようが考えていることは同じとかいうネタですかね。
自分だったら、4. return ((1+2*3/4)!=0)? true : false;と書きます。これなら、int => boolの評価を言語仕様知らなくても読めますから。
ブール型を厳密に扱う言語を持ち出してきておいて、3は無いんじゃないの?
今日日、そんな型に厳格な言語をIDEも使わずに書くか?ましてや動作バグとかならともかく、コンパイルが通らない状態で放置?どんな腐った環境の話をしてるのか知らんが、そこまでピーキーな状況を一般論みたいに語られても、知らんがなとしか言いようがない。
IDEを使うかどうかが何か関係するのか、誰がコンパイルが通らない状態で放置したのか、どんな腐った環境の話をしてるのか等は私も分かりかねます。
つまり現実的にあり得ないことを言って話を引っ掻き回しただけだと。ただの荒らしじゃねーか。
何の話をしているのかがよくわかりません。コメントの付け先をお間違えではないでしょうか。
えっと、bool hoge(a, b){ return (a == b);}
bool piyo(a, b){ return (a == b) ? true : false;}piyo() はコンパイル通して hoge() はエラーにする大喜利ってことでいいかな? なんだ楽勝じゃんね [wandbox.org]
最近、
(cond) ? (a = 1) : (a = 2);
ってコードを見かけてちょっと頭を抱えた。
if (cond) { a = 1; } else { a = 2; }
か
a = (cond) ? 1 : 2;
か、どっちかにしろ、と。
三項演算子は「代入処理は一つ(代入先は同じ)」であることを明確にできるのが、ifに対するメリットだと思うが、この例だと台無しというか両方の悪いところ取りでもう。一番可読性いいのは、
a
Kotlinがそうですね。でも、3項演算子もやっぱりありますが。
rubyか何かでも使えなかったっけ?気持ち悪いから使わないけど。
式の中に制御構文ぶちこんでる時点でどれも同じ。
a = 1 if cond else 2と書かせる、オランダ人にしかわからない言語を思い出した。
電気ウナギの夢は見ませんよ
元コメは既婚の女性かも
オランダとか関係なく、英語でも普通に使うだろう。ラテン語系だと、100%日常的に使う構文じゃない?
| a = (cond) ? 1 : 2;のほうがみやすいだろ。
C#には?だけでなく??ってのもあってな。https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/oper... [microsoft.com]
null値か否かの分岐なんだが、代入させたいけど極々単純な分岐の場合には1行になったほうが見やすいからいろんな言語で三項目演算子やその類が対応されているのだと思うぞ。
ALGOLからLisp、ML、Haskellあたりの関数型言語は大抵if式ですね。Smalltalkのやつも式と言うのかな
Excelの=if()が恥ずかしげに顔を出します
# もうすぐ冬ですね
SNOBOLは構造化プログラミングが提唱される以前の言語であるため、ループは基本的に無条件分岐(goto文)で行われる。全ての式は実行後、次に処理する行のラベルを選択でき、省略時は次の行が実行される。標準入出力はINPUT/OUTPUTという変数に代入処理を行うことで実行される。if文に相当する物は無く、代わりに式を実行後、成功か失敗かで次に処理する行を変更することができる。これは具体的には
LINE = INPUT :S(LABEL1) F(LABEL2)のような場合(これは標準入力から1行読み込み変数 LINEに代入している)、その処理が成
SNOBOLは学生の頃に授業で使わされたことがあります。数年前(数年先輩)の学生が、学科のコンピュータ用に処理系を作ったと聞きました。可変長の文字列処理に長けた言語という印象だけ残っていますが、ほとんど覚えていません。
内容のないコメントですが、懐かしかったので。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
発端? (スコア:3, 参考になる)
きっかけはこのおもしろい(オブラートに包んだ表現)ツイートではないかな
https://twitter.com/fnya/status/1192036095820615680 [twitter.com]
Re:発端? (スコア:1)
C言語で条件の部分が数値にしか見えない場合は可読性が多少上がるかもしれない。
ブール型の扱いが厳密な言語なら可読性があるように書かないとコンパイルエラーになるから、そういう言語しか使ってなければおかしく見えるかもね。
Re:発端? (スコア:1)
C99を知らない人にはピンと来ないかもしれませんね
Re: (スコア:0)
具体的に
return (条件);
がコンパイルエラーになって
return (条件) ? true : false;
がコンパイルエラーにならない言語って何があるの?
Re:発端? (スコア:1)
そういうことではなくて、ブール型を厳密に扱う言語のブール型を返す関数で「return 1+2*3/4」は真を返すことにならず、コンパイルエラーになるってこと。
Re: (スコア:0)
そういう言語では
return (1+2*3/4) ? true : false;
もコンパイルエラーになるのでは?
Re:発端? (スコア:1)
そういう言語ではreturn (1+2*3/4) != 0というような真偽値を表す式であることが一目でわかる(==可読性が高い)ように書かないとコンパイルエラーになるということです。
Re: (スコア:0)
なんだ、三項演算子は関係ないのかよw
Re: (スコア:0)
だとしても その上で、? true : false とわざわざ参考演算子で処理増やしてるほうが同じことを二重に書いていて可読性悪いだろう。
return ((1+2*3/4) != 0);
ト
return ((1+2*3/4) != 0) ? true : false;
だぜ。発端は後者がいいっていってるようだが、前者のほうが簡潔で読み易いし、したいことも明確。
後者だとわざわざ処理足したうえで結果が同じって、まさか入れ替えを間違えてるのか?とも思えてくる。
今時のコンパイラは~って奴がいて確かにインタプリタじゃないんだし俺もそうだとは思う。
でも、そういうのと別次元の話だろ、これ。
Re:発端? (スコア:1)
三項演算子をわざわざ使えばおかしく感じられる言語の方に突っ込みを入れていれば、三項演算子に関係ない回答になるのはしようがないです。
Re:発端? (スコア:1)
三項演算子の可読性や是非以前に、可読性の低い日本語しか書けないようなエンジニアが駄目な実例ですな。
かわりに英語が堪能ならいいけど、だったら英語の/.いけと。
Re: (スコア:0)
むしろ冗長に書いた方が可読性上がることの証明だな。
Re: (スコア:0)
三項演算子をわざわざ使えばおかしく感じられる言語なら、三項演算子をわざわざ使えばおかしいので、
そうでない場合に、三項演算子をわざわざ使うのはどうなのか?という話題だと思うのですが。
Re:発端? (スコア:1)
それについては元コメに対して直接コメントしたらよいのではないでしょうか。
わざわざ私のコメントにつけたら私のコメントに対する話だと考えてしまうので。
Re:発端? (スコア:1)
私のコメントはC言語で条件式が数値の場合ならまだありかもね。という話なので、
1. return 1+2*3/4
or
2. return (1+2*3/4) != 0
or
3. return (1+2*3/4) ? true : false
ということになります。これなら趣味の問題かなと。
Re: (スコア:0)
> 3. return (1+2*3/4) ? true : false
> ということになります。これなら趣味の問題かなと。
散々コメント書いて結局それが結論なんですか?
そもそも3のコードがダサい、3のコードを書くような奴はプログラムが全然解ってない、
3のコードを書くようなやつはアホだ、って話題なのは解ってますか?
Re:発端? (スコア:1)
いや解ってないですが。
というか、そのコメント自体何の根拠もないわけで。もしかして、Anonymous Cowardは意識の集合体なので、誰が書いてようが考えていることは同じとかいうネタですかね。
Re: (スコア:0)
自分だったら、
4. return ((1+2*3/4)!=0)? true : false;
と書きます。
これなら、int => boolの評価を言語仕様知らなくても読めますから。
Re: (スコア:0)
ブール型を厳密に扱う言語を持ち出してきておいて、3は無いんじゃないの?
Re: (スコア:0)
今日日、そんな型に厳格な言語をIDEも使わずに書くか?
ましてや動作バグとかならともかく、コンパイルが通らない状態で放置?
どんな腐った環境の話をしてるのか知らんが、そこまでピーキーな状況を一般論みたいに語られても、知らんがなとしか言いようがない。
Re:発端? (スコア:1)
IDEを使うかどうかが何か関係するのか、誰がコンパイルが通らない状態で放置したのか、どんな腐った環境の話をしてるのか等は私も分かりかねます。
Re: (スコア:0)
つまり現実的にあり得ないことを言って話を引っ掻き回しただけだと。ただの荒らしじゃねーか。
Re:発端? (スコア:1)
何の話をしているのかがよくわかりません。コメントの付け先をお間違えではないでしょうか。
Re: (スコア:0)
具体的に
return (条件);
がコンパイルエラーになって
return (条件) ? true : false;
がコンパイルエラーにならない言語って何があるの?
えっと、
bool hoge(a, b)
{
return (a == b);
}
bool piyo(a, b)
{
return (a == b) ? true : false;
}
piyo() はコンパイル通して hoge() はエラーにする大喜利ってことでいいかな? なんだ楽勝じゃんね [wandbox.org]
Re: (スコア:0)
最近、
ってコードを見かけてちょっと頭を抱えた。
か
か、どっちかにしろ、と。
三項演算子は「代入処理は一つ(代入先は同じ)」であることを明確にできるのが、ifに対するメリットだと思うが、この例だと台無しというか両方の悪いところ取りでもう。
一番可読性いいのは、
Re: (スコア:0)
確かにif式って昔っからあるの以外は最近追加しましたみたいのは聞かないような
Re: (スコア:0)
Kotlinがそうですね。でも、3項演算子もやっぱりありますが。
Re: (スコア:0)
rubyか何かでも使えなかったっけ?
気持ち悪いから使わないけど。
式の中に制御構文ぶちこんでる時点でどれも同じ。
Re: (スコア:0)
a = 1 if cond else 2
と書かせる、オランダ人にしかわからない言語を思い出した。
Re: (スコア:0)
「自分はオランダ人だったのか!」
と思ってる。
Re: (スコア:0)
電気ウナギの夢は見ませんよ
Re:発端? (スコア:1)
// オランダ人というと飛んだりさまよったりするほう
Re: (スコア:0)
元コメは既婚の女性かも
Re: (スコア:0)
オランダとか関係なく、英語でも普通に使うだろう。ラテン語系だと、100%日常的に使う構文じゃない?
Re: (スコア:0)
| a = (cond) ? 1 : 2;
のほうがみやすいだろ。
C#には?だけでなく??ってのもあってな。
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/oper... [microsoft.com]
null値か否かの分岐なんだが、代入させたいけど極々単純な分岐の場合には1行になったほうが見やすいからいろんな言語で三項目演算子やその類が対応されているのだと思うぞ。
Re: (スコア:0)
ALGOLからLisp、ML、Haskellあたりの関数型言語は大抵if式ですね。
Smalltalkのやつも式と言うのかな
Re:発端? (スコア:1)
Excelの=if()が恥ずかしげに顔を出します
# もうすぐ冬ですね
-- う~ん、バッドノウハウ?
Re: (スコア:0)
SNOBOLは構造化プログラミングが提唱される以前の言語であるため、ループは基本的に無条件分岐(goto文)で行われる。全ての式は実行後、次に処理する行のラベルを選択でき、省略時は次の行が実行される。標準入出力はINPUT/OUTPUTという変数に代入処理を行うことで実行される。if文に相当する物は無く、代わりに式を実行後、成功か失敗かで次に処理する行を変更することができる。これは具体的には
LINE = INPUT :S(LABEL1) F(LABEL2)
のような場合(これは標準入力から1行読み込み変数 LINEに代入している)、その処理が成
Re: (スコア:0)
SNOBOLは学生の頃に授業で使わされたことがあります。
数年前(数年先輩)の学生が、学科のコンピュータ用に処理系を作ったと聞きました。
可変長の文字列処理に長けた言語という印象だけ残っていますが、ほとんど覚えていません。
内容のないコメントですが、懐かしかったので。