メソッドの定義
メソッドを定義するにあたっての基礎的な部分を
アウトプットを兼ねてこちらで共有していきます!!
###メソッドについて
そもそも、メソッドとはプログラミングにおいて何らかの処理をまとめたもののことを言い、そのメソッドの名称を記述することによって記述したメソッドの処理を実行することができます。
例えば、lengthメソッドを記述すれば文字列の文字数を出力することができます
※ターミナルのirbにて
irb(main):001:0> "baseball".length
=> 8
##メソッドの定義
###メソッド定義の記述
このようなメソッドは予め数多く存在していますが、すでにあるもののみならず自分で定義することで作成することができます。
メソッドを作成する際には以下のように記述します。
def メソッド名
# 実行する処理のコード
end
これをもとに例文を作成してみると
例文↓
def my_hobby
puts "私の趣味はプロ野球観戦です。"
end
my_hobby
# 出力結果
私の趣味はプロ野球観戦です。
上記のように、my_hobbyというメソッドを定義したことによって
my_hobbyと記述することによって「私の趣味はプロ野球観戦です。」を出力する処理を実行することができます!
コードが読まれる順番は普通では上からとなりますが、定義されたメソッドが存在する場合は、そのメソッドの記述は読まれずに一旦スルーされます。
上記の例で言うと、my_hobbyと記述してそれが読み込まれた段階で定義されたメソッドのmy_hobbyが呼び出されて処理が実行されます。
###実行したメソッドの最終的な値
メソッドを定義し、そのメソッドの処理が実行されて出力される値のことを戻り値または、返り値といい、上記の例文でいうと
**「私の趣味はプロ野球観戦です。」**という出力結果の部分が戻り値となります。
またlengthメソッドを用いた場合の戻り値は、文字数として出力された数字が戻り値となります。
そして定義されたメソッドに関しては、メソッド内の処理の1番最後の行の処理の結果が戻り値となって出力されます
例文↓
def week
"Sunday"
"Monday"
"Tuesday"
"Wednesday"
"Thursday"
"Friday"
"Saturday" # 1番最後の行が戻り値!
end
puts week
# => Saturday
このようにメソッド内の処理は最後の行が出力されるが
return文をメソッド内に記述すると戻り値を指定することができます!
例文↓
def week
"Sunday"
"Monday"
return "Tuesday" # これが戻り値となり、処理が終了する!
"Wednesday" # 呼び出されない
"Thursday" # 呼び出されない
"Friday" # 呼び出されない
"Saturday" # 呼び出されない
end
puts week
# => Tuesday
上記のようにreturnを指定することによって、戻り値として処理を行う部分を指定することができ、returnを記述した部分が出力されます。
###値の使用可能範囲
定義した変数を使用できる範囲は限られていて、その範囲のことをスコープと言います。
①定義したメソッド外で定義された変数をそのメソッド内で使用することは出来ず
、その逆も同じように②定義したメソッド内の変数をメソッド外で使用することは出来ない
ためエラーとなります。
①の場合の例文↓
def introduce
puts name
end
name = "Kinoshita"
introduce
# => エラー!
②の場合の例文↓
def introduce
name = "Kinoshita"
end
puts name
# => エラー!
いずれも、スコープの範囲外ということで定義された変数が使えずにエラーとなってしまいます。
こういったスコープ範囲外で定義された値を使いには**引数(ひきすう)**という値を使用します。
引数を使用するには以下のように記述します。
例文↓
def メソッド名(仮引数)
# 処理の記述
end
メソッド名(実引数)
仮引数はメソッドを定義する際に記述し処理の際に利用する引数で、
実引数はメソッドを呼ぶ際に受け取る値を記述する引数のことを言います。
また、引数は複数用いることができ、その場合は
メソッド名(第1引数, 第2引数)
という記述をします。
仮引数と実引数の名称は必ずしも一致している必要はありませんが、引数の数は必ず一致される必要があります。
上記の例文のエラーを解決するために引数を用いてみます。
例文↓
def introduce(name)
puts name
end
teacher = "Kinoshita"
introduce(teacher)
# => "Kinoshita"
上記のように、introduceメソッド外で定義されたteacherが実引数として記述することで、メソッド外で定義された変数teacherが、introduceメソッド内の仮引数nameとして渡され、メソッド内の処理を実行する。
これによってメソッド外で定義された変数が使用できる形になります!