/ 最近 .rdf 追記 編集 設定 本棚

脳log[20181029]



2018年10月29日 (月) [C++] if 文が嫌いである。その感覚の出所(でどころ)を考えてみた。■if 文というのは低いコードカバレッジへとつながる、実行コードの分裂である。if 節と else 節には無制限に無関係なコードを書くことができる。その無秩序さが許容できない。■if 文やループといった制御構造自体が無秩序なジャンプを飼い慣らしてプログラムを構造化する過程で生まれてきたと思うが、今はもう if を飼い慣らす段階なのだということ。■if が嫌いということは分岐が嫌いということと同じではない。CPU の分岐予測を無用のものにする実用コードが書けるわけではないし、パターンマッチングは有用だし、再帰関数の終了条件だって書かなければいけない。if 文に代えて条件演算子を使用することを擁護する根拠がここにあると思う。条件演算子では型を逸脱した無秩序なコードを分岐のそれぞれに書くことができない点で、飼い慣らされた if の側面があるからだ。■考えたきっかけはこれ>「pull/553#pullrequestreview-165680225」 実行効率を犠牲にしてまでそう書く理由。wmemchr の戻り値の仕様を矯正してまで最初からそういう風に書くつもりがなかった>「pull/553#pullrequestreview-165133091」 その理由。■コードの分裂を避ける。変数の定義を変えない。変化するのは変数の値だけそれも変数の定義時に一意に定まる、というようなコードを書きたいということ。状態の管理をしたくないから、クラスとアクセス制御で管理をオブジェクトに任せる。関数の内部でも、条件に応じて組み代わる関数の内部構造の変化に注意を払いたくない。変化するのは変数の値だけで手一杯。■値としての関数? 値が変化する=関数が変化する? 型が保たれているからいいんじゃないでしょうか。よう知らんけど。■さっきの PR に含まれていたコードのこの部分に心残りがある>「sakura_core/types/CType_Tex.cpp#L258-L266」 当然のように条件演算子で書こうとしたのだけど、条件演算子が嫌われやすいということがあり、他の場所でヨーダ記法が嫌われていたということもあり、控えてしまった。