leaning diary Rails

【Learning Diary27】Rubyの基本を理解する(empty?/=~/===/when/object_id etc)

 

【Learning Diary27】Rubyの基本を理解する(empty?/=~/===/when/object_id etc)

復習にRubyの書籍を読んでいます。

自分の理解が不十分だった点を書き留めます。

 

empty?メソッド

その文字列の長さが0のときにtrueを返します。

 

正誤表現によるマッチング

「=~」を使います。

 

>> p /Ruby/ =~"Ruby"
0
=> 0
>> p /Ruby/ =~ "Diamond"
nil
=> nil

 

比較演算子 ===

case分ではwhenで指定した値に一致するかどうかを「===」を使って判定します。

 

「===」は以下のような挙動をとります。

 

■左辺が数値が文字列の場合は「==」と同じ意味

 

■正規表現の場合は「=~」と同じようにマッチしたかを判定する

 

■クラスの場合はそのクラスのインスタンスかどうかを判定する

 

 

> p(/zz/==="xyzzy")
true
=> true
>> p(String==="xyzzy")
true
=> true
>> p((1..3)===2)
true
=> true
>>


 

when文をif文で書き換える

 

case value
when A
文1
when B
文2
else
文3
end

if A === value
文1
elsif B === value
文2
else
文3
end

 

オブジェクトの同一性を確かめたいとき

object_id(__id__)メソッドを使います。

 

> ary1=[]
=> []
>> ary2=[]
=> []
>> p ary1.object_id
118820
=> 118820
>> p ary2.object_id
125100
=> 125100
>> p ary2.__id__
125100
=> 125100
>>

 

なお、2つのオブジェクトそのもの(ID)が同じかどうかはequal?メソッドで判定します。

 

>> str1="foo"
=> "foo"
>> str2=str1
=> "foo"
>> str3="f"+"o"+"o"
=> "foo"
>> p str1.equal?(str2)
true
=> true
>> p str1.equal?(str3)
false
=> false

 

「値」が同じかどうかを調べるには「==」を使います。

 

> p str1==str2
true
=> true

 

デフォルト値を指定する

デフォルト値は、引数を省略してメソッドを呼び出したときに使われる値です。

 

「引数名=値」と書きます。

 

def hello(name="Ruby")
puts "Hello, #{name}."
end

hello()
hello("Newbie")

 

メソッドが複数の引数をもつ場合は、引数リストの右端から順にデフォルト値を指定します。

 

例えば、3つの引数のうち2つを省略可能にする場合は右側の2つにデフォルト値を指定します。

 

メソッド定義の中のyieldはブロック付きメソッドを定義する際に最も重要なキーワードです。

 

引数の数が不定なメソッド

 

❯ irb
?> def foo(*args)
?> args
>> end
>> p foo(1,2,3)
[1, 2, 3]
=> [1, 2, 3]

 

少なくとも1つは指定しなければならない引数があるメソッドを定義したい場合は以下のとおりです。

 

?> def meth(arg,*args)
?> [arg,args]
>> end
=> :meth
>> p meth(1)
[1, []]
=> [1, []]
>> p meth(1,2,3)
[1, [2, 3]]
=> [1, [2, 3]]

 

「*変数名」の形式の引数はメソッド定義の引数リストに1つだけ含めることができます。

 

最初の引数と最後の引数は決まった名前で受け取って、その間の引数は省略できるようにしたい場合は次のようにします。

 

?> def a(a,*b,c)
?> [a,b,c]
>> end
=> :a
>> p a(1,2,3,4,5)
[1, [2, 3, 4], 5]
=> [1, [2, 3, 4], 5]
>> p a(1,2)
[1, [], 2]
=> [1, [], 2]

 

 

キーワード引数

def  メソッド名(引数1:引数1の値,引数2:引数2の値,...)
実行したい処理
end

 

 

-leaning diary, Rails
-