はじめに
今回は備忘録的な感じで、自分でメソッドを定義して使う方法を紹介します
なお、本記述はMacにおいて、Railsでの開発を前提としています
また、まだまだひよっこですので、不備等ございましたらご指摘いただけると幸いです
目次
- メソッドの定義
- 応用する
メソッドの定義
今回は、"Squared"メソッドと言うものを自分で定義し、それを使って正方形の面積をもとめることとします
メソッドの定義の仕方は下記の様になります
def "メソッド名"'(引数)
"定義の中身や式"
end
ここで"(引数)"と言うものが出てきました
引数は簡単に言うと、メソッドなどに渡すことのできる値のことです
あとで少しだけ解説します
詳細に関しては別解説を用意する予定ですが、今回は先に進めてしまいましょう
習うより慣れろです
上記定義の方法に則って今回のsquaredメソッドを定義するとこうなります
def squared(num)
num ** 2
end
またよくわからないのがでてきました
"num ** 2"です
今回は正方形の面積を求めるとあらかじめ言っているので、勘の良い方はこれが二乗している式だとお気づきになるかもしれません
プログラミングの計算式において、" ** "は乗数を表します
なので、もし体積を求めたい場合は" ** 3 "(3乗)とすればいいわけです
(num)と"num ** 2"のnumは同じものをさします
なので(num)が3だった場合は、"num ** 2"は9と言うことになります
また、記述として" num * num "でも同様の結果となります
ちなみにnumは何でも構いません
第三者が見てわかればどんな単語でもOKです
ただし、(num)と"num ** 2"のnumを変更する場合は両方とも同じものに変更しなければならない点は注意してください(引数の特徴)
応用する
さて、メソッドの定義はこれでできました
ただし、これだけでは何も動作しません
このメソッドを使うよと言ってあげないと動きません
今回は正方形の面積なので、一辺の長さを入力すれば「一辺の長さが"hoge"cmの正方形の面積は"huga"㎠です」と出力される様プログラミングしてみます
一辺の長さは英語で"
Length of one side"の様ですが、長いので"side_length"とでもしておきましょう
先に答えを書いてしまいます
def squared(num)
num ** 2
end
puts "一辺の長さを入力してください"
side_length = gets.to_i
puts "1辺の長さが#{side_length}cmの正方形の面積は#{squared(side_length)}㎠です"
処理の流れを順番にみていきます
まず、メソッドの定義部分"def~end"は呼び出されるまで無視します
そしてputsメソッド(terminal上に文字列を表示させる)を使って、「一辺の長さを入力してください」と表示させます
次に、一辺の長さ(side_length)を定義(変数)します
今回は固定値ではなく、自分で入力した値としますので、"gets"メソッドを使います
getsメソッドを使うと、terminalに何か文字を入力することができる様になります
その後ろの"to_i"メソッドですが、入力された数値文字列を整数(10進数)に変換するメソッドです
プログラム上では、入力した値は「文字列」として認識されます
「文字列」のままだと「四則演算(計算)」ができません
「四則演算」をするのであれば、「数値」に変換しないといけません
そこで登場するのが"to_i"メソッドです
最後に計算結果を表示します
"#{side_length}"は文字列の中で、変数を展開(表示)する際に使う書き方で、"#{変数名}"で使うことができます
今回の場合は、入力した数値が表示されます
"#{squared(side_length)}"の部分でようやくsquaredメソッドを呼び出しています
"squared(side_length)"の様に、"メソッド名(引数)"とすることで、定義したメソッドを呼び出すことができます
"(side_length)"の中には先ほど入力した数字が入り、これを元に"squared(num)"が呼び出されます
"()"の中身の表示が違うのになぜ呼び出されるのか
これが引数の特徴です
"(num)"の部分は仮引数と呼ばれ、そのメソッド内で定義された同じ変数の中に代入して使用されます
一方で"(side_length)"の部分は実引数と呼ばれ、仮引数と同じ名前である必要はありませんが、メソッド呼び出しの際は"(num)=(side_length)"として認識され処理が行われます
混同してはいけないのは、あくまでメソッド自体は"squared"で定義していますので、メソッドの呼び出しはこの部分で行っていると言うことです
まとめ
少し長くなってしまったのでまとめます
- メソッドの定義は"def~end"で囲う
- 定義側のメソッド名の横の引数は仮引数という
- 呼び出し側のメソッド名の横の引数は実引数という
- 実引数と仮引数の名前は同じである必要がない
- putsメソッドはterminalに文字列を表示できる
- getsメソッドはterminalに文字列を入力することができる
- .to_iメソッドは、数値文字列を整数(10進数)に変換する
- 文字列内で変数を展開する場合は"#{変数名}"で表示できる
参考記事