Ruby超入門 2周目 CHAPTER7-2 メソッドへ オブジェクトを渡す まで

f:id:kkouji0224:20191027224451p:plain

 

『ゼロからわかる Ruby 超入門 (かんたんIT基礎講座) 』
github.com

 

こんばんは。つい先日までめちゃくちゃに体重かったんだけど回復してきました。よかったよかったkoujiです。うえの画像のLGTMってさっきまで意味をしらなかったんだけど、Looks good to meの略で「いいね!」みたいな感じなんだねぇ〜。知らないことがいっぱいだ。使っていこうかな…

 

ってことで今日はCHAPTER7のメソッドを振り返っていきまーす。

 

メソッドを定義する

 

def area
    puts 2 * 2
end
area

 

いままで元々あったメソッドを使ってきたんだけど、自分で作れちゃうってことだね。def メソッド名 処理 end って書く感じだね。上のはdefってDefinitionの略かな?定義を英語にするとDefinitionだと思う。きっとそう。で、endの外からメソッド名のareaで呼び出してる。ぼーっとしてるとputs areaって感じで書いちゃったりしちゃうかもだけど、puts 2 * 2になってるからなっ!

 

あーでも、計算と表示わけたくない?そう思うじゃん。思うよね。思うに違いないんだ。大丈夫だ問題ない。

 

def area
    2 * 2  #メソッドの最後の実行結果、この場合4が【戻り値】として呼び出し元に返る
end
puts area #メソッド呼び出し areaが【戻り値】の4になるのでputs 4になる

 

こんな感じで書ける。やっぱり分かれてるほうが直感的にわかりやすいなぁって思うのは僕だけでしょうか。たぶんそうじゃない場合もあるのかもしれない。戻り値!戻り値!戻り値だ!Newbieは戻り値とか引数とか言われるとこんがらがってくるけど、落ち着いて考えれば問題ないぜ。

 

ちなみに戻り値は変数に代入することもできる。変数に名札つけれちゃうって感じだね。

 

def area
    2 * 2  
end
fuck = area
puts fuck

 

こんな感じだね。変数名が投げやりになってきてるのは気にしない。なんで変数fackに代入する必要があるんだろ?って思うじゃん。代入することでareaメソッドの計算結果を使って別の計算したり、他のところでも使えるようになるってこと。そういうこと。そういうことだ。

 

引数を使ってオブジェクトを渡せるメソッド

でたー引数!

 

def area(x)
    x * x
end
puts area(2)

 

怯えるな…。簡単だ…。area(x)のxは変数だ。area(2)の2が引数だ。puts area(2)で2がdef area(x)のxに代入されるんだ。で、メソッドの中でx * xだから2 * 2になるんだ。とても簡単だ。「引数」とか「渡す」とか出てくると混乱してくる人も居ると思うんだけど、変数に代入してるって考えると簡単だ。

 

ちなみに2つ以上の引数を持つメソッドも定義できる…

 

2つ以上だって… ややこしくなってきた…って思うじゃん。簡単だ。

 

def area(tateyoko)
    tate * yoko
end
puts area(23)

 

な?簡単だろ。area(tate, yoko)のtateとyokoは変数なので好きに書いて大丈夫。puts area(2, 3)の2がtateに、3がyokoにそれぞれ代入されるんだよね。で、tate * yokoで6が戻り値として返る。で、見ての通りなんだけど引数の個数はメソッドの定義側と呼び出し元で同数にしてあげる必要があるよって感じ。3つ以上にもできる。もちろん同数ね。

 

 

returnでメソッドを途中で終わらせる

 

def store_clerk_good(x)
    respons = "は〜い"
    unless x
        return respons
    end
    respons + "ありがとう!"
end
puts store_clerk_good(false)
puts store_clerk_good(true)

 

 

returnを書いてあげると、returnから下は実行されないんだよね。上のメソッドだとrespons + "ありがとう!"が実行されない感じね。で、return 変数responsになってるんだけど、returnは後に続くオブジェクトを戻り値にするから、この場合は代入されてる"は〜い"が戻り値になるね。このプログラムはレジの店員さんがいい感じ(true)だったら"ありがとう!"も言っちゃうし、よくない感じ(false)だったらreturnで"は〜い"だけで終わる感じにしてみたよ!

 

そんな感じで今日も振りかえってみました!

 

なんとなく自分で場面を想像してコードを少しだけ書き換えるってだけでも結構面白かったりするね!

 

ってことでアディオス!続きは明日!