読者です 読者をやめる 読者になる 読者になる

Memento memo.

Today I Learned.

Effective Ruby 第一章まとめ

Ruby EffectiveRuby

最近仕事でJava、趣味でElixirを書いてるのですが、来週くらいから仕事でRuby書くっぽいのでRubyの復習を始めつつブログのネタにします。というわけでEffective Rubyを読み始めました。初見です。

Effective Ruby

Effective Ruby

備忘録がてら第一章で扱われている内容について簡単に。

Rubyの真偽値

  • false, nil以外の値は全て真(0も真)
  • falseを判定したい場合 false == 比較対象
  • nil判定は nil? メソッド

比較時にfalseを右辺に書くと左辺のObjectの挙動に引っ張られるので危険らしいです。

Rubynilの扱い

  • 基本的にnil チェック必要
  • nilはオブジェクト
  • nilは型変換すれば落ちない
nil.to_i * 2
#=> 0
nil.to_s.length
#=> 0
nil.length
#=> error!

ただ、nilとかemptyのチェックは実際Active Supportのメソッド使うことが多そうな印象です。

www.techscore.com

Perlっぽい機能を避ける

ruby-doc.org

"特殊なグローバル変数"、正しい日本語名が分からない。 ちょっと自信ないですが英語だとSpecial variablesでヒットします。

定数がImmutableでない

  • 普通に定数書き換え可能
  • Object#freezeしよう
  • コレクションのfreezeは要素までfreezeする
AAA = ["foo", "bar"].freeze # NG
BBB = ["foo", "bar"].map(&:freeze).freeze #OK
  • 定数はモジュールにまとめてfreezeする
module Hoge
  CCC = 1
end
Hoge.freeze

Objectの参照考えるのちょっとめんどくさいですよね。 ところでElixirのコレクションは完璧にImmutableなので分かりやすいですよ!

Warningを出す

RUBYOPT='-w'
export RUBYOPT
  • 実行時のWarningは$VERBOSE変数にtrue|false|nilのいずれかを指定する

基本Rubocop使いながら開発するはずなのでコンパイル時警告はあまり気にならないかも