科学と家事とプログラミング (python を中心に)

python 温度計測 湿度計測 DS18B20 USB9097

超構造化(05) 条件分岐 vs 場合分け(まとめ)

場合分けとしての if/else

同型を保った if/else がコードにもたらす(かもしれない)特徴をあらためて整理する。

  • if/else を通過すると必ず x が更新される(if/else 内で書き換えられる) [完全性]。
  • 値が確定したら変化しない [直交性/無時間]
    • 直行性は、ある変数が更新されるのは一か所だけということ
    • 無時間とは、実行の順序(あるいはコードの出現順序)に制約が無いといった程度の意味
  • 結果が if/else より手前のコードに依らない [独立性]。
  • if / else の中身の形が同じとみなせる [同型性/対称性/抽象階層]
    • if 節も else 節も、 x の値を確定する。
    • その結果として、if/else 全体として x の値を確定する。
  • 何より図表とのとの対応が良い[ 形式化/仕様との対応]
  • コードの形だけからプログラムの正しさを(ある程度)類推できる [予測/可読]。
    • x= が y = となっていたら、それはおそらく BUG.
  • コードの正しさを(部分的にせよ)、コードの形式に負わせる事ができる [制約/検証]。

短文で表現しなおせば、

上手な if/else の使い方は、コードに直交性/完全性/独立性/対称性をもたらす(可能 性がある)。それはおそらく、設計者の頭の中にあるモデルや仕様とよく対応するもの であり、コード断片に続いて現れるコードの予測可能性を向上させる。結果として、可 読性や BUG 検出率の向上が期待できる。

コードを書く時の心構えは、

if 節とelse 節の同形性を保って、むやみに変数を書き換えない。

これにつきる。

f:id:sken20k:20180210153217j:plain