がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

「コードの書き方」の一例

元ネタ。
https://twitter.com/komi_edtr_1230/status/1562230567101693953

自称シニアのフリーランスさん(笑)からのPRで

if (foo == “bar”) {
  return true
} else {
  return false
}

というひどいコードがあって朝からゲンナリしてる....
駆け出しエンジニアじゃないんだからこんな指摘させないで欲しい.....

「変数hogeの値が 'foo' かどうか?*1」のコード、多分これくらいのバリエーションがあるんだと思うんですねぇ by PHP
あと、比較演算子が == と === とあるよねぇ、というのは、面倒なんでオミットします。
(ひねたパターンも削除してます……多分)。

if ($hoge === "foo") {
  return true
} else {
  return false
}
if ($hoge === "foo") {
  return true
}
return false
if ($hoge === "foo") {
  $r = true
} else {
  $r = false
}
return $r;
return ($hoge === "foo") ? true : false;
$r = ($hoge === "foo") ? true : false;
return $r;
return $hoge === "foo";
$r = ($hoge === "foo");
return $r;
return isHoge($hoge);
$r = isHoge($hoge);
return $r;

先に書いておくと、「特になんの制約もない」状態でおいちゃんが書くんなら「return $hoge === "foo";」。
いやだって一番シンプルやん。「比較演算子の戻り値はbool」だし。

分析軸は……この辺かなぁ。
・"if" か "三項演算子" か "比較演算子戻り値直" か "関数に切り出す" か
 → ifの時、elseを書くか書かないか
・"値を直return" か "一度変数で受ける" か

先に後者から話をすると。
個人的には「わざわざreturnする値を変数に入れるのは面倒だしメモリ勿体ないし*2」とは思うんだけど「デバッガとかブレークポイントとか考えると変数で受け止めるのはデバッグしやすい」とも思うので、まぁお好みかなぁ、と。
PHPになってから「どちらかというと変数で受けておく(あとでデバッグしやすい)」に寄せてはいるかもしれない……とはいえ染みついた手癖はなかなか直らないんだけど(笑

前者のほうはより一層色々あって。
個人的には
・"比較演算子戻り値直"は、まぁ普通に理解できると信じているし楽だから、基本はこれ
・if文は、色々と「まぁわからんでもない」。初心者向きだしね*3
三項演算子が一番「中途半端」なので、ここを最大肯定する理由があんまり見つからない
・関数に切り出す、は、この比較だと「無い」かなぁ(もっと複雑ならやる)
って感じかなぁ。

この辺は、多分「どれで書いても、そこまでクリティカルに問題が起きる可能性は低い」ので、ただまぁだからこそ「致命的なレベルで"自分の感覚と違う"のが受け入れにくい」のかなぁ、とも思ったりはする。
制限としてあり得るのはどちらかというと「直returnすんなデバッグしにくいだろ」で、これは現場によってはルール化されうるんだろうなぁ、とは思う。

で、多分議論の本質であろう「ifか三項演算子か比較演算子か関数切り出しか」については……まぁ本当に「好きにすりゃええがね」としか思わないかなぁ、個人的には。
おいちゃんの好みとしては、前述した通りではあるんだけど
・この程度なら、比較演算子
・もっとややこい条件なら、関数切り出し
って感じかなぁ。

まぁ、こーゆーの、限界事例とかまで考え出すと色々と「今まで関わってきた天国とか恩恵とか地雷とか地獄とか煉獄とか殺意とか」がうかがい知れるので。
「相手の背景と意見を尊重しつつ」、「自分は、こ~ゆ~経験があったから、こっちが好みなんだよねぇ」程度に会話をすると、得るものも多いのではないかなぁ、と思うのですがいかがでしょうか*4

*1:微妙に元ネタと名前が違うのは気にすんな

*2:C言語の頃の感覚の名残

*3:でなきゃ、コンパイラの最適化まで見越した超上級者向き

*4:いきなり日和ってみるw