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

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

可読性の議論も含めて、真偽値という概念とコードの表現している意味論的な命題を対応させるにはひと訓練いるということなんですよね… twitter.com/kmizu/status/1…

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

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

2021-06-17 00:13:47
谷口一平 A.k.a.hani-an @Taroupho

if 文は大袈裟といえ、三項演算子の使える言語なら、return isEnabled? true : false; ぐらいは、私も書いてしまうかも。そのときの文脈で、その方が読みやすいと感じたなら。 twitter.com/kmizu/status/1…

2021-06-17 01:04:37
かざいむ@日本帰国 @kazaimu_

@kmizu これしばらく前に経験年数が浅い人のコードで遭遇しました。 おそらく、処理を1つずつコードに置き換えているんじゃないかと。なので、 if (isEnabled == true) return true; という感じになるんじゃないかと。

2021-06-17 01:09:36
Masami HIRATA @msmhrt

@kmizu boolean型が存在せずに数値型で代用しているような言語なのでしたら、自前で値を正規化しないと気持ち悪いという理由でそういうコードを書いてしまうのかもしれませんけど、そういう人は isEnabled == true みたいなコードもどこかで書いてるかもしれませんね。

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

jsで、mp4ファイルのpaserやH.264のdecoderやmaxer書いたときは、ブラウザ上でデバッグできるようにする目的で return isEnabled; や return !!isEnabled; とせず、わざと冗長に書いてた気がする。 ifの分岐内で雑にブレイクポイント張って引っ掛けられると、デバッグ作業の効率が向上するので

2021-06-17 01:11:05
kmizu @kmizu

この話題、大変盛り上がって楽しいのですが、ところで、boolean型については、return true/false;という形しかゆるさない言語設計も一応考えられて、そうすれば、よきにつけあしにつけ、 if(...) return true; else return false; 型のコードが強制出来そうだなーと。 ↓ twitter.com/kmizu/status/1…

2021-06-17 01:11:50
kmizu @kmizu

任意の型について、return 即値;しか許さない言語設計は理不尽過ぎてありえないけど、boolean限定なら、一応、「コードの形を統一するため」とか言って、正当化出来る……かもしれない。 ↓

2021-06-17 01:11:51
kmizu @kmizu

てなことを考えるのは、必ずしもネタってわけじゃなくて、「一つのことをやるには、一つのやり方しかない」っていう良く聞く話をマジで実現するなら、言語設計で強制することも可能かなと(多くの言語では、その謳い文句と反対に強制は出来てないですが)。

2021-06-17 01:11:51
Kaname Funakoshi @kaname

関数の意味とisEnabled変数の意味が同じであれば return isEnabled; にするけど、意味が違ってたまたま同じ型になってるのなら if (isEnabled){ return true; } return false; にするかなあ twitter.com/kmizu/status/1…

2021-06-17 01:12:50
Tellur @Tellur128

ほんと不思議によく遭遇する冗長なif文。この謎は、仕事でコードを書かされる初学者が湧いて、変なコードを潰せるレビューアーが少ないIT業界の闇が、ゲフンゲフン。 twitter.com/kmizu/status/1…

2021-06-17 01:14:22
重巡洋艦 キノガッサ @TKinugasa

@kmizu ほぼ同じだけど if(isEnabled) { return true; } return false; という流儀もよく見ますね。

2021-06-17 01:15:31
Gada / ymtszw @gada_twt

主題デカtweetをすると、これを return isEnabled; と書くのが自然だという感覚って、まさに「プログラミングとは入力と処理と出力である」という感覚の現れだと思っていて、純粋性、データ指向、関数指向と不可分だと思うのよな。 twitter.com/kmizu/status/1…

2021-06-17 01:17:22
市川 真一 @tenpoku1000

@kmizu 分岐することで、log を挿入するとかの付加的な仕事を書きやすくする効果はあると思います。付加的な仕事がないのに予防的に書いておくのは、やりすぎな気がしますが

2021-06-17 01:20:20
しおん😶‍🌫️ @shion_neko

組み込みCとかだとif分は何もしなくてもelse必須ってルールがあったりするので、 もしかしたら規約であったりしそう なぜだMISRA-Cェ twitter.com/kmizu/status/1…

2021-06-17 01:20:28
Gada / ymtszw @gada_twt

あとはまあ、isEnabledが必ずしもtrue|falseだけを返すとは「限らない」という状況は往々にしてあるので、booleanに正規化したいとかね…

2021-06-17 01:21:22
Deven Mive @DevenMive

@kmizu if文を見ると三項演算子で1行で書きたくなる(´ω`) 今回の場合は、return isEnabled;でも良いけど、 isEnabled = xxxx の xxxxを直接returnしたくなる。

2021-06-17 01:21:39
Ryusei @mandel59

return isEnabled は自然言語に素朴に翻訳できない表現であるという点ではプロブレマティックであり、そこでプログラミング言語ネイティブレベル理解者とそうでない人との差が出る表現なんだろう

2021-06-17 01:22:01
kntmr @knt_mr

「…の条件が true の場合は true を返す、それ以外の場合は false を返す」みたいなドキュメントを1つずつコードに書き起こすとこういうのになりそう twitter.com/kmizu/status/1…

2021-06-17 01:22:50
めるぽん.c @melponn

つまり isEnabled だった時に true が返されるのは結果的にそうなっているだけで、本来返す値とは意味が違う場合にこう書いちゃうと思う。で、その後に面倒くさい人に指摘されそうだなって気がついて return isEnabled; に直す。

2021-06-17 01:23:14
fkm @fkm

返すものを定数にするとアリになる。 const SUCCESS = true const FAILUR = false ... if (isEnabled) { return SUCCESS } else { return FAILURE } が、型をいちいち作ったりはしないよなぁ twitter.com/kmizu/status/1…

2021-06-17 01:23:27
zehnpaard @zehnpaard

大抵は return isEnabledって書くと思うけど、絶対にうっかりif isEnabled ... と書かない自信があるかと言われたらないかな。 特にガード的なreturnがもっと前にもあって、関数全体の真偽がisEnabledだけに集約されていない場合は、うっかりするかも twitter.com/kmizu/status/1…

2021-06-17 01:24:27
kurema @kurema_makoto

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

2021-06-17 01:25:49
jay-es | shindy @shindy_JP

これに似た話で return isEnabled ? true : false; みたいなコード書く人もいるよな(もちろん isEnabled は boolean) twitter.com/kmizu/status/1…

2021-06-17 01:28:24
とりてん @NoOne_1024

これはエラー出ずにelseのポインタ返すのか? goto で飛べる? twitter.com/kmizu/status/1…

2021-06-17 01:29:40
社畜戦士⭐︎パツラ @feroce1022

@kaname エラー処理の観点から行くと、isEnabledの初期値をtrueあるいはfalseにセットしておき、変化があった場合のみ戻り値のisEnabledを適切にセットするってのが思いつきました💡 前提として、isEnabledを返す関数自体でExceptionが出ることを想定してtry/catheも入ってるんだろうなといらん想像してましてw

2021-06-17 01:29:51
前へ 1 2 3 ・・ 6 次へ