Polished Ruby Programming を読んでいる(2)

前回から継続してコツコツ読んでいる。 Chapter4 から先に読んだので、そこから逆戻りして Chapter 1, 2, 3, 5 ... の順に進めている。アラカルトに気になったところをメモ。

Chapter3: 変数

  • 変数名の長さはスコープの広さと反比例させる
    • メソッドの場合は呼び出し回数と反比例させる
    • Ruby に限らずどの言語でも有用な法則
  • 定数の内部実装は変数
    • 値の変更も禁止されていない
    • 警告が出るだけ
  • クラス変数は使ってはいけない。
    • 親子関係のあるクラスやモジュール間で簡単に上書きできてしまうため
    • 代用方法1: 定数を使う(値を変更したときに警告が出るのには目をつぶる)
    • 代用方法2: クラスインスタンス変数を defined?再帰的にルックアップする方法
    • 代用方法3: クラスインスタンス変数を inherited で生成時にサブクラスにコピーする方法
    • クラス変数微妙に使いにくくていつ使うんだろう?と思っていたので「使わないほうがよい」と書いてあってすっきりした
    • 代用方法がたくさんあるのが Ruby のメタ的な柔軟性の勉強になって面白い
  • グローバル変数も使わない方がよい
    • 代用方法1: 定数+instance_eval
    • 代用方法2: シングルトンクラスで置き換えられる
    • メソッドコールのコストをどうしても払いたくない限は代用方法で書くのがよさそう
    • シングルトンクラスの方法しか知らなかったけど、instance_eval はなんか恰好よいのでどこかで使ってみたい

Chapter5: 例外

※ まだ途中

  • hash#[] のキーが見つからないとき Ruby だと nil を返して Python は例外を返す
  • それぞれ逆をするために fetch(Rubyで例外出す) と get(Pythonでデフォルト値返す) が用意されている
  • この辺り言語の特徴を表していて大変面白い

おわり

第1部までは頑張って原著で読んで、その後は研鑽Rubyプログラミングの pdf で読む予定。