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

booleanを返すケースで冗長なif文が作られるのは何故かというのをツイートしてみたら、多くの反響があったのでまとめてみました。
43
前へ 1 ・・ 4 5 次へ
結城浩 / Hiroshi Yuki @hyuki

@gakuzzzz @kmizu 補足ですが、どちらかというと、MATCHEDの戻り値をtrue/falseにした方がよくなかったのだと思います。この言語の場合には<マッチした>/<マッチしなかった>を戻り値にした方が読みやすかったと思います。>自分

2021-06-17 07:02:25
結城浩 / Hiroshi Yuki @hyuki

@gakuzzzz @kmizu 関連するパターンが同じWeb連載の第327回(最新回)にありました。SEARCH-SUBTREEの中で再帰的にSEARCH-SUBTREEを呼び出しています。これは戻り値が何になるか明解なので、if文を間にかませていない例ですね。 第327回 二分探索木(前編) link.hyuki.net/girlnote327 pic.twitter.com/j7QpkoQyqw

2021-06-17 07:14:03
拡大
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

isEnabledがtrueまたはfalseのどちらかであるなら同じですが、そうではない場合には同じ意味にならないですね。 twitter.com/kmizu/status/1…

2021-06-17 07:51:41
kmizu @kmizu

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

2021-06-17 00:13:47
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

@kawaiiseeker @kmizu なるほど、boolean->booleanな前置演算子 whether を導入したら、return whether isEnabled と書けて自然言語的にハッピーかもしれません。

2021-06-17 07:57:03
あんどうあんど🔞自称転生貧乏人 公式␍␊␀ @undo6502

perlみたいに return true if isEnabled. twitter.com/kawaiiseeker/s…

2021-06-17 08:04:12
運輸犬 @kawaiiseeker

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

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

@kmizu 変数名をisXXXとした時点で動詞っぽくなるので、名詞的に使う(ような書き方になる)のが何か気持ち悪いという話なのかもしれませんね。他の方書いてるように英語っぽくないと。逆に、変数名がflagとかなら、 if (flag == true) xxxx とか return flag; とか書く人が多そう。

2021-06-17 08:15:18
buko106 @buko106

JavaScriptユーザーの場合、isEnabledが期待としてはBooleanなのだが、実際はundefinedだったりしてそれが伝播するのを嫌ってこう書くことはあり得る。 実際は return !!isEnabled や return Boolean(isEnabled) のほうがよいのだけど twitter.com/kmizu/status/1…

2021-06-17 08:53:34
𝚃𝚘𝚜𝚑𝚒𝚔𝚒 @toshiki670

この冗長なコードと同じコードは return !!isEnabled; 二つの感嘆符がない場合、isEnabled が Boolean 以外の値だと、その値が返り値となる為、Boolean に変換する必要がある twitter.com/kmizu/status/1…

2021-06-17 08:55:07
おさるのげんちゃん🙈 @gen_osaru

@kmizu 先月くらいに業務でそのまま返せばいーやんという会話をした記憶

2021-06-17 09:09:25
kmizu @kmizu

isEnabledの話について度々考えることがあったのは、もちろん、何がしかのポリシーに基づいてそうしているのなら、必ずしも否定出来ないけど、言語のセマンティクスを理解してない疑いがある人が割かし見られて、その点で問題視している、というのはあります。 ↓

2021-06-17 09:10:14
kmizu @kmizu

言語のセマンティクスを理解してないというのは、たとえば、Javaであれば、boolean isEnabled = ...; に対して、 if(isEnabled) return true; else false; と return isEnabled; は等価になるという事を「理解していない」ケースですね。これは、経験の浅いプログラマーだとそこそこ見ます。

2021-06-17 09:10:14
. @mar_cont_hu

条件分とreturnで1つのブロックなら後で拡張するから、じゃダメなのかな。個人的にはisEnableとreturnのtrueが別の状態を参照してるのかなって疑うけど、その方が後々拡張するのかなーって。個人的にはこれで浅い深いで物差し測ると恥かきそう。 twitter.com/kmizu/status/1…

2021-06-17 09:12:37
phenan @phenan

条件節が多いときは || や && で繋げるよりも if と early return で書いたほうが分かりやすかったりするので、あえてこうすることはあるな。 ログも差し込めるし。 twitter.com/kmizu/status/1…

2021-06-17 09:17:01
kmizu @kmizu

そういえば、昨夜のあれは、言語は明記しなかったのが悪かったですが、Javaのつもりでしたね。その点、JSだとtrue/falseの二値に正規化するという主張は確かにありえる(リテラルでtrue/falseを持っているという点と、キャメルケースである点から)

2021-06-17 09:17:31
kmizu @kmizu

で、そういうコードを見たときに、「このひとは理解した上でそうしている」のか、「言語のセマンティクスを理解していない」のか、判断にこまるケースがあるので、ややこしい問題だなあと思うのです。

2021-06-17 09:18:45
チェシャ猫 @y_taka_23

JS であっても変数名 isEnabled に true/false 以外の値が入ってるのはコードとして割とアレでは…。

2021-06-17 09:23:01
buko106 @buko106

!!isEnabledはタイプ数少ないけど遠くから見たとき(?)に判別しづらいので個人的にはBoolean推し

2021-06-17 09:24:16
kmizu @kmizu

これと同型の意見を複数拝見したので、素朴な疑問なのですが、結局、どっちで書こうが「内部実装の問題に過ぎない」ので、別の書き方をする意味がわかってないです。boolean get*isPossiblle()だとしても、私ならreturn isEnabled; をそのまま返します。 自然言語に一対一対応させると妙に見える❓ twitter.com/kurema_makoto/…

2021-06-17 09:24:28
kurema @kurema_makoto

@kmizu 本来isEnabledと関数が返す型は別、という意識があるのではないかと。 例えば関数名がget*IsPossible()だとして、返してるのはPossibleかどうかであってEnabledかどうかではない。 機能がEnabledな場合にPossibleなだけ。 両者がbooleanであるのは利便性が目的で、表現する内容が同一だからではない。

2021-06-17 01:25:49
kmizu @kmizu

@stb_nissie 実際に遭遇したケースだと、そもそも return isEnabled; が「可能であることが理解出来ていない」(return true/ return falseの形しか書けないと思い込んでいる)、といった事ですね。

2021-06-17 09:25:25
kmizu @kmizu

@y_taka_23 実は私もそう思っていたり(ボソ)。

2021-06-17 09:30:44
砂磁石 @suna_jisyaku

@kmizu booleanを返す前に処理を追加する可能性があるときは、後で意図がわかるようにそんなふうに書いて止めてるんじゃないですか?🙄 本来ならコメントで対処しろよって話でしょうけどね。😝

2021-06-17 09:32:40
テツノマズル@拘り鉢巻@美少女巨乳ペチャパイ鼻ペチャ美パグ😋🐶@デキるパグのようだ😎@魚😋 @iron_muzzle

私ならこうやって書く。 boolean getHogeIsPossible() { final boolean isPossible = isEnabled; return isPossible; }

2021-06-17 09:33:36
前へ 1 ・・ 4 5 次へ