ryota21silvaの技術ブログ

Funna(ふんな)の技術ブログ

これまで学んだ技術の備忘録。未来の自分が救われることを信じて

【備忘録】チェリー本第2章:Rubyの基礎

2.6 メソッドの定義(P.36)

メソッドの戻り値

Rubyは最後に評価された式がメソッドの戻り値になるため、returnのようなキーワードは不要。
以下のように、returnはメソッドを途中で脱出したい場合に使用することが多い。

irb(main):012:1* def greeting(country)
irb(main):013:1*   return '入力してください' if country.nil?
irb(main):014:1*
irb(main):015:2*   if country == 'japan'
irb(main):016:2*     'こんにちは'
irb(main):017:2*   else
irb(main):018:2*     'hello'
irb(main):019:1*   end
irb(main):020:0> end
=> :greeting
irb(main):021:0>
irb(main):022:0> greeting(nil)
=> "入力してください"
irb(main):023:0> greeting('japan')
=> "こんにちは"

2.10 真偽値と条件分岐についてもっと詳しく

2.10.5 条件演算子(三項演算子)

式 ? 真だった場合の処理 : 偽だった場合の処理

irb(main):025:0> n = 15
irb(main):026:1* if n > 10
irb(main):027:1*   '10より大きい'
irb(main):028:1* else
irb(main):029:1*   '10以下'
irb(main):030:0> end
=> "10より大きい"

上記の条件分岐を、条件演算子で書けば以下のような感じ。

irb(main):031:0> n = 15
irb(main):032:0> n > 10 ? '10より大きい' : '10以下'
=> "10より大きい"

条件演算子の結果を代入することも可能。

irb(main):033:0> n = 15
irb(main):034:0> message = n > 10 ? '10より大きい' : '10以下'
irb(main):035:0> message
=> "10より大きい"

シンプルなif文は条件演算子ですっきり書けるかもしれないけど、複雑な条件文で使うとかえってコードの可読性が悪くなる場合もあるから注意。

2.11 メソッド定義についてもっと詳しく

2.11.1 デフォルト値付きの引数

引数なしで呼び出した場合もエラーにならない。

def メソッド(引数1 = デフォルト値1, 引数2 = デフォルト値2)
  # 処理
end
irb(main):036:1* def greeting(country = 'japan')
irb(main):037:2*   if country == 'japan'
irb(main):038:2*     'こんにちは'
irb(main):039:2*   else
irb(main):040:2*     'hello'
irb(main):041:1*   end
irb(main):042:0> end
=> :greeting
irb(main):043:0> greeting
=> "こんにちは"
irb(main):044:0> greeting('china')
=> "hello"

2.12 その他の基礎知識

2.12.5 参照の概念を理解する

Rubyの変数にはオブジェクトそのものではなく、オブジェクトへの参照が格納されている。
ある変数をほかの変数に代入したり、メソッドの引数として渡すと、新しい変数やメソッドの引数は元の変数のオブジェクトを参照している。

どのオブジェクトを参照しているかは、object_idメソッドを使えばわかる。

irb(main):048:0> a = 'hello'
irb(main):049:0> b = 'hello'
irb(main):050:0> c = b
irb(main):051:0> a.object_id
=> 180
irb(main):052:0> b.object_id
=> 200
irb(main):053:0> c.object_id
=> 200

2.12.7 require

組み込みライブラリでない標準ライブラリやgemを利用する場合は、明示的にそのライブラリを読み込む必要がある。
自分で作成したRubyプログラム(クラスの定義など)を読み込む場合も必要。

require ライブラリ名