Skip to content

Instantly share code, notes, and snippets.

@ommadawn46
Last active June 26, 2018 12:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ommadawn46/690490f4b3351951562a7d2c14788685 to your computer and use it in GitHub Desktop.
Save ommadawn46/690490f4b3351951562a7d2c14788685 to your computer and use it in GitHub Desktop.

リーダブルコード 9章 - 変数と読みやすさ

コードを読みづらくする3つの変数の使い方

  • 無駄な変数が多い

    • 説明にならない邪魔な変数は削除する
  • 変数のスコープが大きい

    • 変数を数行のコードからのみ見える位置に移動する
  • 変数の値が頻繁に変更される

    • 「永久に変更されない」変数を使う

変数を削除する

  • 役に立たない説明変数・一時変数

    • now = datetime.now(); created_at = now
    • 変数nowがなくても十分理解できるので、複数の場所で使わないのなら不要
      • 逆に、残しておくと読み手は「この変数またどこかで使うかも?」と勘ぐってしまう
    • 不要な一時変数はコードを変更しているうちに発生してしまうことが多い
  • 制御フロー変数

    done = False
    while not done:
      ...
      if ...:
        done = True
        continue
    • 変数doneを使わなくても、終了条件を満たした時点でbreakすれば変数を削除できる
    • ネストしている場合は関数として切り出す
    def func(...):
      while True:
        ...
        while True:
          ...
          if ...:
            return result

変数のスコープを狭める

変数のことが見えるコード行数をできるだけ減らす。

  • 関数・メソッドを細かく分割する

  • C, C++など

    • 条件式の中で宣言してスコープを狭める
    • if (PaymentInfo* info = database.ReadPaymentInfo()){..}
  • Javascript, Pythonなど

    • クロージャを使ってスコープを狭める

変数は一度だけ書き込む

変数を操作する場所が増えると、現在値の判断が難しくなる。

  • const, finalなどの定数リテラルがあれば使う
  • 定数は全部大文字で書くといった命名規約を採用する(pep8等)

まとめ

考えなければならないことを減らせる様に書く

「生きている」変数の数が多ければ、読む人はその全てを頭の片隅に置いておく必要がある。その時々に意識する必要のある変数の数をなるべく減らすことが読みやすさにつながる。

感想

  • 反省が多い章だった
    • 取り敢えず説明変数作っておけば良いと思っている節がある
  • この章を読んで関数型言語の副作用の無さという良さを再認識した
    • また、モジュール結合度の強いOOPで発生した「理解不能なバグ」の数々を思い出した
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment