【21日目】【1日20分のRailsチュートリアル】Rubyでのオブジェクトとメッセージ受け渡し
今日は「4.2.3 オブジェクトとメッセージ受け渡し」から。
4.2.3 オブジェクトとメッセージ受け渡し
Rubyでは、あらゆるものがオブジェクトです。
ふむ。
$ rails console
>> "foobar".length => 6
length
で文字列の長さを取得できる。
empty?メソッドの末尾にある疑問符にご注目ください。Rubyでは、メソッドがtrueまたはfalseという論理値(boolean)を返すことを末尾の疑問符で示す慣習があります。
ほぅ。
?
外したらどうなるん、って思ったらめっちゃエラー出た。駄目らしい。
>> "foobar".empty? => false >> "foobar".empty NoMethodError: undefined method `empty' for "foobar":String Did you mean? empty? : >> "".empty? => true
elsif
文だったり、&&
、||
、!
演算子について説明あり。
このあたりはJavaとかと一緒なので省略。(elsif
は違うけど)
nilもオブジェクトであり、これも多くのメソッドに応答できます。
へー。
nil
を文字列変換って不思議…。
>> nil.to_s => ""
今度はnilに対してメッセージを連鎖 (chain) して渡せることを確認します。
nil
のままだと怒られるけど文字列に変換すればいけるそう。
>> nil.empty? NoMethodError: undefined method `empty?' for nil:NilClass >> nil.to_s.empty? => true
皆さんのご推察どおり、実はnilかどうかを調べるメソッドもあります。
全然推察してなかったけど役立つかも?
>> "foo".nil? => false >> "".nil? => false >> nil.nil? => true
puts "x is not empty" if !x.empty?
この形式全然見慣れない。
Rubyではこのように、後続するifでの条件式が真のときにだけ実行される式 (後続if) を書くことができ、コードが非常に簡潔になります。
うーん、2行が1行にできるってこと…??
今のところ利点がよく分からないけど色々ソースコード読めば分かるのかなー。
「!!」(「バンバン (bang bang)」と読みます) という演算子を使うと、そのオブジェクトを2回否定することになるので、どんなオブジェクトも強制的に論理値に変換できます。
そんな読み方なんだ……。
論理値を見たいときは便利な演算子かな。
>> !!nil => false >> !!0 => true
Rubyでのオブジェクトとメッセージ受け渡しについて学習しました。 今日の作業時間は【30分】。
Rubyを書く上で重要なんだけど慣れるには時間かかるかも。
次は「4.2.4 メソッドの定義」から。