赤き血のイレブン

自分の復習ネタを書いてます。

Effective Ruby①

雑談

今日から、東アジアカップですね。 思い起こせば前回大会、柿谷・山口・青山などのメンバーが結果を残し ブラジルワールドカップに出たので、今回もしっかり活躍して頑張って欲しい。

個人的にはやはり浦和の柏木が頑張って欲しかったけど、怪我で離脱と無念。。 レッズ・武藤にも頑張ってもらいたいです! あとは五輪世代の遠藤・浅野に頑張ってもらいましょう。

※今日はなでしこの方ですね。。。

本題

Effective Ruby

中級者〜向けでしょうか。。 ひと通り勉強した人がみたほうがいいですね。 ※でも自分はひと通り勉強しましたが、まだまだ初級ですけどね。。。

200ページ弱なのでそんなに分厚くないですし、 48の項目に分かれているので読みやすいですね。

定数って(第1章 項目4より)

先頭が大文字の変数らしいですよ。 (普通は全部大文字で書きますよね。。)

[1] pry(main)> Hoge = "a".freeze
=> "a"
[2] pry(main)> Hoge.capitalize!
RuntimeError: can't modify frozen String
from (pry):2:in `capitalize!'

定数の破壊的な変更はできないみたいですが

[1] pry(main)> Hoge = "a"
=> "a"
[2] pry(main)> Hoge = "b"
(pry):2: warning: already initialized constant Hoge
(pry):1: warning: previous definition of Hoge was here
=> "b"

値の再代入はできるみたいで 警告が出ますね。。

あとコレクションはフリーズしても、

[1] pry(main)> HOGE = ["a","b"].freeze
=> ["a", "b"]
[2] pry(main)> HOGE.map{|hoge| hoge << "eee"}
=> ["aeee", "beee"]
[3] pry(main)> HOGE
=> ["aeee", "beee"]

中身が変更されちゃうので、中身もフリーズしましょうということで

[1] pry(main)> HOGE = ["a","b"].map!(&:freeze).freeze
=> ["a", "b"]
[2] pry(main)> HOGE.map{|hoge| hoge << "eee"}
RuntimeError: can't modify frozen String
from (pry):2:in `block in <main>'
[3] pry(main)> HOGE
=> ["a", "b"]

コレクションと要素をフリーズする必要があるらしい・・・ マップ、フリーズ、フリーズ・・・ 一回で出来たらいいのになぁ〜