これからRubyの勉強を始めようと考えているあなたに、Rubyのプログラムの書き方を紹介します。
この記事では、Rubyでのメソッド(関数)の使い方について解説します。
プログラムでのクラスやメソッドの役割
プログラムでは、同じ処理を色々な場所で使える用にしたい(再利用したい)ということが良くあります。
処理をまとめて記述して、使いたい場所で呼び出すことでプログラムを再利用できるようにしたのが「メソッド(関数)」になります。
実際のプログラムの開発では、このメソッド単位で、処理を考えて開発することが多いです。
メソッド
メソッドとは、複数の処理をまとめて、呼び出して使えるようにしたプログラムの部品です。
例えば、「ファイルにデータを書き出す」、「文字列を特定のフォーマットにする」といったように、良く使う処理をまとめて書いておきます。
このメソッドに与える引数という変数を変えることで処理の一部分を変化させることができます。
例えば、「ファイルにデータを書き出す」というメソッドで、「ファイル名」を引数として渡すことで、書き出すファイル名を変えることができます。
メソッドの種類
一般的にプログラミング言語では、そのプログラミング言語に標準で組み込まれている関数「組み込み関数」と、自分で定義できる「ユーザー定義関数」の2種類があります。
Rubyの場合は、「組み込み関数」を「(カーネル)メソッド」と呼び、「ユーザー定義関数」は単に「メソッド」と呼ばれることが多いです。
(カーネル)メソッドの例を挙げると、コンソールに文字列を出力する「puts」は組み込み関数になります。
メソッドの書き方
Rubyのメソッドの定義の仕方は、以下のような構文になります。
「def」でメソッドの名前を定義し、「def」から「end」の間に実行する処理を記述します。
メソッドに渡す引数が無い場合は、以下のように書きます。
def メソッドの名前
実行する処理
end
メソッドに引数を渡したい場合は、以下のように記述します。
def メソッドの名前(引数1, 引数2, ・・・)
実行する処理
end
メソッドの引数にデフォルト値を設定することができます。
この場合、メソッドを呼び出すときに引数を指定しなかった場合、設定したデフォルト値がメソッドに渡されます。
def メソッドの名前(引数1=引数1のデフォルト値, 引数2=引数2のデフォルト値, ・・・)
実行する処理
end
メソッドの例
メソッドの例として、ファイルに指定したメッセージを書き出すメソッドを書いてみます。
引数として、ファイル名と書き込むメッセージを指定できるようにします。
メソッドは以下のようになります。
def write_file_message(file_name="default.txt", message="message")
File.open(file_name, "w") do |f|
f.puts(message)
end
このメソッドを呼び出す場合は、メソッドを呼び出したいところで、以下のように記述します。
write_file_message("sample.txt", "sample message")
キーワード引数
ここまでで紹介したメソッドの定義の仕方には、欠点があります。
それはメソッドに渡す引数の順番が決まっていることです。
例えば、先ほど例で示したwrite_file_message
は、file_name
,message
の順番で引数を与える必要があります。
Rubyの2.0以降では、メソッド定義の部分で、変数ではなくキーワードを指定する方法があります。
Ruby2.0以降を使っている場合は、基本的に以下で紹介する方法で記述するのが良いでしょう。
先ほどのwrite_file_message
をキーワード引数で書き直してみます。
def write_file_message(file_name: "default.txt", message: "message")
File.open(file_name, "w") do |f|
f.puts(message)
end
呼び出す時は以下のように記述します。
write_file_message(file_nmame: "sample.txt", message: "sample message")
以下のように、順番を入れ替えても大丈夫です。
write_file_message(message: "sample message", file_nmame: "sample.txt")
引数を省略する場合は、以下のように記述します。省略した場合は、デフォルト値が使われます。
# file_nameはデフォルト値の"default.txt"が使われる
write_file_message(message: "sample message")
メソッドの戻り値
ここまでの例では、メソッド内で処理を行うだけでしたが、メソッド内で処理したデータを呼び出し元に戻してほしい場合があります。
そのような場合は、return
を使って戻り値を指定します。
例えば、配列を引数に、配列の中身の合計値を計算して返すメソッドは、return
を使って以下のように書きます。
return
が実行されるとその時点でメソッドの処理は終了します。
def sum(array:)
value = 0
for v in array
value += v
end
return value
end
呼び出し側では、帰ってきた値を変数に入れることができます、
array = [1, 3, 6, 7]
# 配列の合計の計算結果がarray_sumに格納される
array_sum = sum(array)
メソッド名の付け方の注意点
組み込み関数(カーネルメソッド)と同じ名前のメソッドを定義すると、組み込み関数を上書きしてしまうので、
組み込み関数と同じ関数の名前を定義しないように注意しましょう。
まとめ
この記事では、Rubyのメソッドの定義の仕方と利用の仕方について解説しました。
実際にプログラムを作る時は、このメソッド単位で処理を考えて作ることが多いので、処理の塊をイメージして再利用しやすい良いメソッドが作れるようにしましょう。
以下の講座で体系的に学ぶのもオススメです。