冗長なif文が作られる理由諸説

booleanを返すケースで冗長なif文が作られるのは何故かというのをツイートしてみたら、多くの反響があったのでまとめてみました。
43
前へ 1 2 ・・ 6 次へ
oxyの蕎麦 @oxycaster

確かにIDEAさん使い始めてから、うっかりボケっとしてて例のようなコード書いて残してしまっても、黄色になってシンプリファイ提案されてると思うので、それ実行したら勝手にreturn isEnabledになおしてくれるから、放ったらかさなくなっただけかもしれない

2021-06-17 00:40:32
kmizu @kmizu

@koizuka @dif_engine あー、なるほど。そういうケースもあると。 (さすがに遭遇したのは、そういうケースじゃなさげですが)

2021-06-17 00:41:03
kmizu @kmizu

@gakuzzzz さすがに、結城先生の場合だから、等価なことは理解した上でのことだと思いますけど、理由聞いてみたいですね。

2021-06-17 00:44:12
クロパンダ @le_panda_noir

最終この形に落ち着いたけど、試行錯誤してるときはそれぞれの分岐で別の処理してて、気づかずPR投げたりはよくする twitter.com/kmizu/status/1…

2021-06-17 00:45:33
kmizu @kmizu

関係ない話題。初学者のみならず、仕事でコード書いてる人でも、 if(isEnabled) { return true; } else { return else; } と書いちゃう人と時々遭遇するのだけど、これはなんでなんだろう。 ↓

2021-06-17 00:13:47
らき @raki

言語にもよるけど、この戻り値を受け取る側が bool を期待していて、例えば json や yaml などへの出力を担う場合などにこう書かれていると親切ではあると思う。。。読み間違いと戻りの型が決めやすいし。 twitter.com/kmizu/status/1…

2021-06-17 00:45:33
kmizu @kmizu

@reasonset あ、言語依存の部分がありますね。想定していたのは、特に、型がある言語で、true/falseの2値しかない言語ですね(JSの場合でも、基本、return isEnabledでいいと思うんですが、true/falseの2値に変換したい事って多いでしょうか?)。

2021-06-17 00:46:35
r.ishibashi @cactaceae

@hyuki 先生!どうなんですか? twitter.com/gakuzzzz/statu…

2021-06-17 00:50:38
がくぞ @gakuzzzz

これ数学ガールの最近の連載でもこう書かれてるんですよね。結城先生の事だから意図的にそちらの方がわかりやすいという判断をされたんだろうなーと思いつつ、なぜその方がわかりやすいと判断されたのかはまだ自分の中で解を見出だせてない twitter.com/kmizu/status/1…

2021-06-17 00:24:44
kmizu @kmizu

@y2_naranja あ、すいません。typoです……return false;です。

2021-06-17 00:51:08
運輸 @kawaiiseeker

@kmizu 単純に自然言語に近いからだと思います if isEnabled return true ←英語 return isEnabled ←英語っぽくない

2021-06-17 00:51:36
kmizu @kmizu

指摘を受けて、return else;ってなんじゃらほいと気づいたので、return false;のミスだということを追記しておきます。

2021-06-17 00:51:39
KOIZUKA Akihiko @koizuka

@kmizu trueに対するelseだからfalseだろうなとは思ったw elseと描くと残りの値が出る言語処理系、便利そうw

2021-06-17 00:52:42
kmizu @kmizu

@tanakaXnobuaki あ、return false; のtypoです。

2021-06-17 00:53:11
kmizu @kmizu

@koizuka おお。実際に、そういう言語作ってみるのありかも、と言われて気づきましたw

2021-06-17 00:53:46
ふぉっくす(0x1E)@Δチカト @fate_fox

@kmizu なにを返したいかによりますよね... (elseという変数を返すのかとw

2021-06-17 00:54:22
ジョージ・モひ @george_mohi

falseのことelseって指が滑っちゃうことあるよね、return elseあるある、と言いたいのか。 isEnabledをreturnすればメソッドの値が返るから不要な分岐だと言いたいのか。 それとも、別の大事な論点に気づかないにわかプログラマーホイホイなのか。。 twitter.com/kmizu/status/1…

2021-06-17 00:54:59
Yusuke Izumi @yuizumi_y5i

@kmizu ほかの方々がおっしゃるとおり日本語の影響を受けているというのが一番もっともらしいと思いますが、条件節に書ける式の集合とbool(ean)型に評価される式の集合が一致しない言語があるということを一応指摘しておきます。 gist.github.com/yuizumi/264703…

2021-06-17 00:55:23
kmizu @kmizu

@george_mohi いや、単なるtypoです……m(_ _)m return false;の。

2021-06-17 00:55:58
はるかみ☆ (まさきはるか) @reasonset

@kmizu 稀に条件式にbooleanしか書けない言語がありますが(Nimとか)、 if (isEnabled) が書けるならそれは関係ないですね。 関係するとしたら関数は常に高階関数で、かつ条件式内では常に展開され、かつ関数はクロージャではない場合ですが、そういう言語は存じません

2021-06-17 00:56:20
kmizu @kmizu

@george_mohi で、主張としては、"isEnabledをreturnすればメソッドの値が返るから不要な分岐だと言いたいのか。" ですね。

2021-06-17 00:56:25
Yusuke Izumi @yuizumi_y5i

@kmizu ちなみに、無駄なif文を書いてしまうのは日本語話者に限らないようで、社内のコードレビューで時々見かけては「このifはいらん、単にreturnしろ。」といつも指摘しています。

2021-06-17 00:56:59
真紅鮭 @crimson_salmon

関数が何なのかにもよるかも? bool IsPlayable() {  return isEnabled; } みたいなときは、変数そのまま返すとちょっと変だから、あえてtrueやfalseに直そうかな?と思うときあるかも

2021-06-17 00:57:23
ジョージ・モひ @george_mohi

@kmizu あ、素直にそういうことでしたか。 バカ発見器に引っかかってる気になって、何が隠れてるのか考えてましたww

2021-06-17 00:58:53
もう仕事が多くってェ 残業が100時間超えそうでェ…んじに🐈にゃーん🍓🫐🍅🌽🍈🍇🦝 @uupaa

ネストが深くて頻繁に呼ばれる場所のデバッグ目的でbreakpoint設定用に(いちいち停止しないように)あえてこうしておいて、デバッグが終わったあとに『まあ、動いてるからstayで』か、そのまま忘れられちゃった奴かなと。デコーダとか書くときはこういうスタイルで初期コードを書いてることが多い twitter.com/kmizu/status/1…

2021-06-17 00:59:21
kmizu @kmizu

ところで、余計な補足ですが(し、今までのところ、誤解はされてないと思いますが)、別に馬鹿にするとかそういう意図ではなく、直感的にはreturn isEnabled;が良かろうと思えるけど、冗長なifを付け加える理由は何故、という純粋な疑問です。

2021-06-17 01:00:07
前へ 1 2 ・・ 6 次へ