ぞえの技術めも

Ruby on Rails勉強中

【21日目】【1日20分のRailsチュートリアル】Rubyでのオブジェクトとメッセージ受け渡し

Ruby on Railsチュートリアル(第3版)

今日は「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 メソッドの定義」から。