Ruby超入門コース#12 関数

はじめに

こんにちは。キノコードです。
「Python超入門コース#12 メソッド」について説明します。

メソッドとは?

まず、メソッドについて説明します。
メソッドとは、「処理」のことです。
なぜメソッドがあるのでしょうか?
料理で例えてみます。
例えば、いつも作るカレーがあるとします。
そのレシピを料理ロボットに記憶してもらいます。
またカレーが食べたくなったときに、
ボタン1つで作れる。
しかも、その料理ロボットは、自分も使えるし、家族も使える。
その料理ロボットがメソッドなのです。
メソッドの便利なところは、3つあります。
1つめは、同じものを2回書く必要がなくなること。
2つめは、同じものを他の場面でも使えること。
3つめは、他の人も使うことができることです。
実は、今までのレッスンでもメソッドを使ってきました。

メソッドの種類

変数の中身を表示させるときに使っていたpです。これはpメソッドです
メソッドには2種類あって、自分で作るメソッドと、Rubyがあらかじめ用意してくれているメソッドがあります。
このpメソッドは、Rubyがあらかじめ用意しているメソッドです。
pメソッドはたった1行で変数の中身を表示してくれますが、メソッドの中身は何行ものコードが書かれています。
もしpメソッドがなければ、変数の中身を表示させたいときに、イチからそのコードを書くことになり、大変です。
pメソッドがあるから、変数の中身を表示させたいたびに何行もコードを書く必要ありません。
使いたいときに、たった1行で使い回すことができるのです。

メソッドの定義方法

メソッドを作ることを「メソッドの定義する」といいます。
Rubyでメソッドの定義の方法をみていきましょう。
メソッドはまず最初にdefと書きます。
defの後にメソッドの名前であるメソッド名を書き、
丸括弧を書きます。
丸括弧の中に記述するものを引数と言います。
メソッドは、この引数を受け取ることができます。
受け取った引数は、メソッド内で使うことができます。
例えば、メソッド内にある数字と引数を掛け算することができます。
このように、メソッドに引数を値を渡すことでメソッドのできる処理の幅が広がります。
引数という言葉は、「引数をメソッドに渡す」と言ったり、
「引数をメソッドが受け取る」といったりします。
引数は、必ず必要と言うわけではなく、省略することができます。
また、引数は、何個でも渡すことができます。引数と引数の間をカンマで区切ればよいです。
引数の丸括弧のあとは改行。
この行に実行する処理を書きます。
実行する処理の行は右にひとつインデントをあけましょう。
メソッドの記述が
終わったら、
インデントを元に戻して、endを記述します。
そして、メソッドは、引数を受け取ることができる一方、
処理結果を返すことができます。
これを戻り値といいます。
return文を使うことで、戻り値としてメソッドの外に値を返すことができます。
それでは、実際に、コードを書いてみましょう。

def say_hello
    p "Hello World"
end

say_hello

あいさつを表示するメソッドを作成しましょう。
メソッドを定義します。
「def」を書いて、メソッド名を書きます。
メソッド名はメッセージを表示させるので「say_hello」としましょう。
今回、引数はないので何も設定しません。
改行して「end」を書きます。
「def」と「end」の間に、実行する処理「p “Hello World”」を書きます。
これでメソッドを定義することができました。
メソッドを実行するには、メソッド名を書くことで実行できます。
メソッド名の「say_hello」と記述すればよいです。これで「Hello World」が表示されるはずです。
実行してみましょう。
「Hello World」を表示することができました。

引数なしのメソッド

def say_hello
    p "Hello World"
end

say_hello
say_hello
say_hello

定義したメソッドは何度でも呼び出すことができます。
3回say_helloを記述します。
「Hello World」は3回表示されるはずです。
実行してみましょう。
「Hello World」を3回表示することができました。

引数ありの関数

def sayHello(greeting)
  p greeting
end

sayHello("Good morning")

次に、引数ありのメソッドを定義していきましょう。
メソッド名のあとに丸括弧。
丸括弧を書いて引数名。
引数名はあいさつの「greeting」とします。
受け取った引数をpメソッドで表示させます。
「p greeting」と記述します。
メソッドを呼び出すには、メソッド名、丸括弧。丸括弧の中に、引数を書きます。
引数は「”Good morning”」とします。これで「Good morning」が表示されるはずです。
実行してみましょう。
Good morningが表示されました。

def sayHello(greeting)
  p greeting
end

sayHello("Good evening")

次に、「Good evening」を渡してみましょう。
実行してみます。
Good eveningが表示されました。

複数の引数があるメソッド

def add(num01,num02)
    p num01 + num02
end

add(6,2)

引数を2つ使ってみましょう。
加えるという意味の「add」というメソッドを作ってみます。引数をnum01とnum02として、これを足してpメソッドで表示してみましょう。
では、addメソッドに6と2を渡してみます。
結果は、6足す2で8となるはずです。
実行してみます。
8が表示されました。

def add(num01,num02)
    return num01 + num02
end

add(6,2)

メソッドの結果は、return文で返すことができます。
pメソッドをreturnに変更してみましょう。
ただし、returnで結果を返しても、pメソッドで表示をさせていないので結果を確認することができません。
念のため、実行してみましょう。
何も表示されません。

def add(num01,num02)
    return num01 + num02
end

p add(6,2)

メソッドを呼び出すaddをpメソッドで表示させてみます。
実行してみます。
8が表示されました。

戻り値があるメソッド

def add(num01,num02)
    return num01 + num02
end

add_result = add(6,2)
p add_result

結果を変数に格納して、pメソッドで表示させる方法もあります。「add_result」という変数に代入して表示させてみましょう。
表示させてみます。8が表示されました。

確認問題

それでは最後に確認問題をやります。
3つの引数の受け取るメソッドを作り、9と4と2の平均を表示させてください。
一旦、動画を止めて記述してみてください。

def div(a ,b , c)
    return (a + b + c) / 3

div_result = div(9 ,4 ,2)
p div_result

それでは答え合わせです。まず、defと書いて、メソッド名はなんでもよいのですが、私はdivというメソッド名としました。
引数は3つなので、丸括弧の中に引数を3つ記述します。
引数名はなんでもいいですが、私はaとbとcとしました。
そして、returnを書き、a,b,cを足します。足し算は先に計算をしたいので丸括弧で括ってそれから個数の3で割ります。
これでメソッドの記述は終わりです。
結果をdiv_resultに格納して、pメソッドで表示させてみましょう。
5が表示させるはずです。
実行してみます。
5が表示されました。