メソッド(関数)を用いることで、複数の処理を かんたんに呼び出せるようにまとめておくことができます。
以下から Ruby のメソッド(関数)の作成で用いる「def」の使い方を解説していきます。
目次
メソッド(関数)とは? メソッド(関数)の意味
「メソッド(関数)」は、複数の処理を かんたんに呼び出せるようにまとめておいたものです。
例えば、西暦から元号を求めるプログラムを作成したとしましょう。このプログラムは複数の処理からできているでしょうが、メソッド(関数)を使うことで、これらをまとめてひとまとまりにして、一発で呼び出せるようにしておくことができます。
メソッド(関数)にしておくことで、さまざまな場所から繰り返して処理を呼び出すことができ、同じ処理を何度も書く必要がなくなります。
メソッド(関数)の特徴
メソッド(関数)には、「データを渡すと 答えを返してくれる」という性質があります。
例えば西暦から元号を求めるメソッド(関数)を作成したとしましょう。
この場合は、メソッド(関数)に「西暦を渡す」と「元号を返す」という設計にしてあるはずです。
プログラミングではこれを「関数」と言いますが、Ruby においては「メソッド」と呼ばれ、通常はクラスの中に書くことが多いです。
クラスとメソッドの関係について、詳しい解説はこちら。
また、メソッド(関数)に渡す値のことを「引数(ひきすう)」、返ってくる値を「返り値(かえりち)」と言います(「戻り値(もどりち)」と呼ばれることもあります)。
メソッドによっては引数がないものや、返り値が重要でないものもありますが、これが基本の形になります。
メソッドの種類
一般的なプログラミング言語のメソッド(関数)には、以下の2種類があります。
- 組み込み関数
- ユーザー定義関数
組み込み関数は、あらかじめ用意されているメソッド(関数)のことです。Ruby においても、each
や while
、length
、split
、to_i
、p
などなど、最初からさまざまなメソッドを使うことができるようになっています。
ユーザー定義関数は、欲しいメソッド(関数)を独自で作成したものです。組み込み関数にはないメソッド(関数)をオリジナルで作成することができるというわけです。
以下から、ユーザー定義関数の作り方について詳しく解説していきます。
メソッド定義の基本
引数なしのメソッド定義
メソッドは以下のように定義します。def
と end
の行の間に、メソッドを呼び出したときに実行される処理を書きます。
def メソッド名
メソッドを呼び出したときに実行される処理
end
定義したメソッドを呼び出すときは、以下のような形で記述します。
メソッド名()
()
は、以下のように省略することができます。
メソッド名
引数をつけたメソッド定義
引数を用意する場合は、以下のようにメソッド名のあとにカッコ(( )
)を使って引数名を記述します。引数名はカンマ(,
)で区切って、複数指定することもできます。
def メソッド名(引数名1, 引数名2, ……)
メソッドを呼び出したときに実行される処理
end
定義したメソッドを呼び出すときは、以下のような形で記述します。メソッド名の後ろのカッコ(( )
)内に引数として渡したい値を記述します。カンマ(,
)で区切って、複数指定することもできます。
メソッド名(引数1, 引数2, ……)
引数のデフォルト値の設定
引数をつけたメソッドを定義する際に、引数のデフォルト値を以下のように設定できます。引数を指定せずにメソッドが呼び出されたときに、デフォルト値が使われます。
def メソッド名(引数名1=デフォルト値, 引数名2=デフォルト値, ……)
メソッドを呼び出したときに実行される処理
end
返り値を設けたメソッド定義
メソッドの返り値を指定するときは、以下のように return
を使って値を指定します。
def メソッド名
:
:
return 返り値
end
メソッド内に return
がない場合は、基本的にメソッド内の一番下の行が返り値となります。
そのため、メソッド内の一番下の行で返り値を指定する場合は、以下のように return
を省略して書くことが多いです。
def メソッド名
:
:
返り値
end
メソッドを使ったプログラム例
実際にプログラムを書いて動作を確認してみましょう。
引数なしのメソッドを定義して呼び出す
以下は、「こんにちは」と表示する「hi」という名前のメソッドを作成した例。
def hi
p "こんにちは"
end
hi
"こんにちは"
def hi 〜 end
で「こんにちは」を表示するメソッドを定義しています。
それを一番下の hi
という行で呼び出しています。
引数をつけたメソッドを定義して呼び出す
今度は引数を使って、メソッド内の処理で使う値を渡してみます。
def hi(name)
p "#{name}さん、こんにちは"
end
hi("田中")
"田中さん、こんにちは"
def hi(name) 〜 end
でメソッドを定義し、hi("田中")
で「hi」メソッドを呼び出しています。
hi("田中")
では、「hi」メソッドに "田中"
を引数として渡しています。
メソッドの定義で def hi(name)
としたので、 「name」の変数に、引数として受け取った「田中」が代入されて、メソッド内で使えます。
2行目で「name」の値を表示させているので、「田中」が表示されます。
引数にデフォルト値を設定する
今度は引数にデフォルト値を設定してみます。
def hi(name="鈴木")
p "#{name}さん、こんにちは"
end
hi
"鈴木さん、こんにちは"
1行目のメソッドの引数のところで name="鈴木"
と指定しているので、「name」という引数のデフォルト値は "鈴木"
となります。
この状態で hi
のようにして引数を指定せずにメソッドを呼び出すと、デフォルト値が使われるので、上のように「鈴木さん、こんにちは」と表示されます。
今度は引数を指定し、メソッドを呼び出してみましょう。
def hi(name="鈴木")
p "#{name}さん、こんにちは"
end
hi("田中")
"田中さん、こんにちは"
上の例では hi("田中")
のようにして引数を "田中"
にしてメソッドを呼び出しています。
するとデフォルト値は使われず、引数として渡した値がメソッド内で使われるので、「田中さん、こんにちは」と表示されます。
メソッドに返り値を設ける
以下は、引数として渡された2つの数値を足した結果を返す「sum」メソッドを作成した例。
def sum(a, b)
a + b
end
answer = sum(2, 3)
p answer
5
def sum(a, b) 〜 end
でメソッドを定義し、sum(2, 3)
で「sum」メソッドを呼び出しています。
sum(2, 3)
では、「sum」メソッドに 2
と 3
を引数として渡しています。
メソッドの定義で def sum(a, b)
としたので、 「a」の変数に引数として受け取った 2
、「b」の変数に 3
が代入されて、メソッド内で使えます。
2行目の a + b
がメソッド内の最後の行で返り値となるので、返り値は 5
となります。
返り値は、answer = sum(2, 3)
のようにして変数に代入することができます(今回は「answer」という変数に 5
が代入されたことになります。)。最後に p answer
で変数の値を表示してしているので、実行結果で 5
が表示されます。
クラスの中にメソッドを定義する
Ruby の場合は、クラスの中にメソッドを定義することが多いです。
メソッドの定義のやり方はここまでの説明と同じようにできますが、呼び出し方が少し変わるので注意です。
以下は「User」クラスからインスタンスを作成し、「hi」メソッドを呼び出す例。
class User
def hi
p "こんにちは"
end
end
user = User.new
user.hi
"こんにちは"
class User 〜 end
で「User」クラスを定義し、その中に「hi」メソッドを作成しています。
user = User.new
で、「User」のインスタンスを作成して、「user」という変数に代入しています。
user.hi
で、作成したインスタンスに対して「hi」メソッドを実行しています。
Ruby でメソッドを使うときの注意点
メソッド名のルール
メソッドの名前をつけるときは、以下のルールに合わせる必要があります。ルールに沿っていない場合はエラーとなります。
- 1文字目は英字、もしくはアンダーバー(
_
) - 2文字目以降は英数字、もしくはアンダーバー(
_
)
メソッド定義は先に書く
メソッドを呼び出すときは、先に定義しておく必要があります。あとに定義しているメソッドは呼び出すことができません。
試しに先に hi
で「hi」メソッドを呼び出し、そのあとに def hi 〜 end
でメソッドを定義してみます。
hi
def hi
p "こんにちは"
end
実行すると、このように「メソッドが見つからない」というエラーが表示されてしまいました。
まとめ
以上、Ruby でのメソッド(関数)の使い方でした!
ここまでの内容をまとめておきます。
- 「メソッド(関数)」は、複数の処理を かんたんに呼び出せるようにまとめておいたもの。
- メソッド(関数)には、「データ(引数)を渡すと 答え(返り値)を返してくれる」という性質がある。
- メソッド(関数)の種類には、使っているプログラミング言語であらかじめ用意されている「組み込み関数」と、独自で作成する「ユーザー定義関数」がある。
def メソッド名(引数名1, 引数名2, ……) 〜 end
でメソッドを定義し、メソッド名(引数1, 引数2, ……)
で呼び出す。引数をなしにすることもできる。def メソッド名(引数名1=デフォルト値, 引数名2=デフォルト値, ……) 〜 end
のようにしてメソッドを定義するときにデフォルト値を設定すると、引数が指定されなかったときに使う値を指定できる。- メソッド内の一番下の行が返り値となる。明示的に返り値を指定したい場合は
return
を使う。 - メソッド名の1文字目は英字、もしくはアンダーバー(
_
)。2文字目以降は英数字、もしくはアンダーバー(_
)にする必要がある。 - メソッドを呼び出すときは、メソッド定義を先にしておく必要がある。