Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Rubyに限らずプログラミング言語では、ある程度コードが長くなってくると、処理の単位ごとにメソッドを作成してコードを分離します。

この記事では、Rubyでメソッドを作成する方法や、作成したメソッドを呼び出す方法について解説していきます。

長くなりすぎたコードをメソッドに分離して、可読性の高いコードを目指しましょう。

「def」でメソッドを作成

Rubyでは、次の構文のようにdefendキーワード内に処理を記述してメソッドを定義します。

def メソッド名(引数, ...)
  #ここに処理を記述
end

定義したメソッドを呼び出すときは、メソッド名と括弧内に引数を指定して呼び出します。

メソッド名(引数, ...)
ポテパンダの一言メモ

引数がないメソッドを呼び出す場合、括弧の指定は省略できます。

メソッド定義のサンプルコード

引数あり・なしなど、実際にサンプルコードを確認しながら、メソッドの定義方法を見ていきましょう。

引数なしのメソッドの例

def say
  puts "Hello Ruby"
end

#メソッドの呼び出し
say


【実行結果】
-------------------------------------
"Hello Ruby"

引数が1つのメソッド

def say(args1)
  puts "Hello Ruby (args1=%s)" % args1
end

#メソッドの呼び出し
say("引数")


【実行結果】
-------------------------------------
"Hello Ruby (args1=引数)"

引数が2つのメソッド

def say(args1, args2)
  puts "Hello Ruby (args1=%s, args2=%s)" % [args1, args2]
end

#メソッドの呼び出し
say("引数1", "引数2")


【実行結果】
-------------------------------------
"Hello Ruby (args1=引数1, args2=引数2)"

戻り値があるメソッド

メソッドで処理した結果を、戻り値として返す場合もあるでしょう。

JavaやC言語などでは、メソッドの宣言時にpublic int say() {…}のように、戻り値の型を指定する必要がありますが、Rubyでは戻り値の型をメソッドで宣言する必要がありません。

処理の中で、return 値のように戻り値を返す処理を書くだけで、戻り値があるメソッドになります。

def sample_return(x1, x2)
  #2つの引数を加算した結果を戻り値で返却
  return x1 + x2
end

#メソッドの戻り値を変数=resultに格納
result = sample_return(1, 2)
puts "result=" + result.to_s


【実行結果】
-------------------------------------
"result=3"

デフォルト値を指定した引数

メソッドを定義するとき、引数にデフォルト値を指定できます。
デフォルト値を指定しておくと、該当の引数を省略してメソッドが呼び出された場合、デフォルト値が引数の値に設定されます。

デフォルト値を指定した引数のメソッドは、次のように宣言します。

#引数「age」にデフォルト値を指定したメソッド宣言
def sample_method(name, age=30)
  puts "Name=%s,  Age=%d" % [name, age]
end

#引数「age」を省略してメソッドを呼び出し
sample_method("Yamada")

#引数を指定してメソッドを呼び出し
sample_method("Yamada", 50)


【実行結果】
-------------------------------------
Name=Yamada,  Age=30
Name=Yamada,  Age=50

このように、引数を省略してメソッドを呼び出した場合はデフォルトが使用され、引数を指定した場合は、指定した値が使用されていることが分かります。

ポテパンダの一言メモ

デフォルト値の指定がない引数は、引数を省略してメソッドを呼び出すことはできません。
前述のサンプルコードを、引数を指定せずsample_methodのように呼び出すと、次のようなエラーが発生します。

wrong number of arguments (given 0, expected 1..2) (ArgumentError)

可変長引数 (*args)

メソッドの引数の前に*をつけると、可変長引数となります。

可変長引数は、メソッドの引数残りをすべて配列で受け取ることができる引数で、メソッドに1つだけ宣言できます。

次のコードをご覧ください。

def sample_method(p1, *p2)
  puts "p2:%s" % p2.inspect
end

sample_method(1, "A")             #可変長引数に1つ値を指定
sample_method(1, "A", "B", "C")   #可変長引数に3つ値を指定
sample_method(1)                  #可変長引数の指定なし


【実行結果】
-------------------------------------
p2:["A", "B"]
p2:["A", "B", "C"]
p2:[]

このように、2つ目以降の引数で指定された値を、可変長引数は配列で受け取ることができます。

キーワード引数

Ruby 2.0以降で使用できる「キーワード引数」は、引数をキーワード: デフォルト値のように宣言できます。

キーワード引数の宣言や、呼び出し時の引数の渡し方は次のとおりです。

def sample_method(name: "Yamada", age: 20)
  puts "Name=%s,  Age=%d" % [name, age]
end

#メソッドの呼び出し
sample_method(name:"ITO", age:50)
sample_method(name:"ITO")  #引数ageを省略


【実行結果】
-------------------------------------
Name=ITO,  Age=50
Name=ITO,  Age=20

このように、メソッドの呼び出し側もキーワード: 値の形式で引数を指定するため、どの名前の引数にどの値が渡っているかが一目で分かります。

通常の引数とキーワード引数の併用

通常の引数と、キーワード引数を1つのメソッドに同時に宣言することも可能です。

キーワード引数が最後になるようにメソッドを定義しないとエラーになるため、次のコードのように、通常の引数→キーワード引数の順に引数を定義します。

#先頭2つは通常の引数、以降はキーワード引数のメソッド
def sample_method(args1, args2, name: "Yamada", age: 20)
  puts "Name=%s,  Age=%d" % [name, age]
end

ハッシュで引数を受け取る

キーワード引数はRuby 2.0以降でしか使えないため、それ以前のバージョンで、キーと値で引数を受ける場合は「ハッシュ引数」を使います。

ハッシュ引数は、引数の前に**を付けて宣言します。

def sample_method(**hash)
  puts hash
end

ハッシュ引数は、Ruby 2.0以降でも使用できますが、メソッドの宣言を見ただけで、どんなキーワードの引数があるか分かりづらいため、基本的にはキーワード引数を使用したほうがよいでしょう。

まとめ

Rubyの「def」キーワードを使って、メソッドを作成する方法を紹介してきました。

実際のシステム開発でも、メソッドやクラスなどを複数作成して1つのシステムを完成させることが普通であるため、メソッドの作成方法や、キーワード引数、可変長引数などについて理解しておくようにしましょう。

【関連記事】
【Rubyの基礎】インスタンス変数の基本とattr_accessorの使い方

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。