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

Rubyのメソッドは、他のプログラミング言語の関数のように使えますが、同じではありません。関数と同じように引数を使えるものの、デフォルト値を設定して省略可能な引数が作れたり、引数を配列やハッシュで受け取ることも可能です。

今回はRubyのメソッドにおける引数の使い方について解説します。

メソッドの引数の詳細


Rubyのメソッドは、他のプログラミング言語の関数と同じように使うことが可能です。そして、関数のように引数でデータを受け渡せます。しかし、関数とメソッドは全く別の機能です。

例えばRubyの標準で使えるメソッドの中には引数を必要とするものを、必ずしも必要としないものがあります。そしてメソッドを自作する場合も同じようなメソッドを作れます。

ではそもそもメソッドの引数とは何でしょうか。まずはRubyにおけるメソッドの引数の基本について解説します。

そもそも引数とは

多くのプログラミング言語では、関数を定義することで、同じような処理を何度も書くことなく、読み易いプログラムを作れます。ただし特別に宣言した変数以外は、関数の中でそれを呼び出した処理の変数をそのまま使えません。そこで関数で使う変数を引数で引き渡します。

Rubyでは他のプログラミング言語における関数の代わりにメソッドを使います。そしてメソッドの中で使えるローカル変数と、それを呼び出したプログラムで使われていたローカル変数は別ものです。そのため、メソッドを呼び出す際に引数として変数の値を受け渡し、メソッドの中で利用するのは関数と同じです。

引数の無いメソッドとは

Rubyの使えるメソッドの中には、引数が不要なメソッドもたくさんあります。これは、標準ライブラリの多くのメソッドがオブジェクトを対象に処理する機能であり、引数で変数を受け渡さなくて、既に指定されているためのです。

ただし、オブジェクトを処理する際に追加で情報が必要な場合は、引数を設定します。なお中には引数のデフォルト値が設定されており、省略した場合そのデフォルト値を使うケースもあります。

そして自作したメソッドでもインスタンス変数を処理するだけなら引数は必ずしも必要ありません。また、デフォルト値を設定しておくことが可能です。

引数の型宣言は不要

Ruby以外のプログラミング言語の中には、受け渡す引数の型を定義し、それと一致しない場合にエラーとなるものもあります。Rubyはスクリプト言語で変数の型宣言が無いので、引数の型宣言もありません。

なおRubyでは、変数に何か値が代入されたら、その値に該当するクラスのオブジェクトが自動的に作られます。これは引数を受け渡した場合も同じです。そして、もしメソッド内の処理がそのオブジェトを対象にしていない場合、エラーが発生します。メソッドを自作する場合は、必要に応じてチェックする仕組みも組み込んでください。

引数付きのメソッドの作り方


自作のメソッドを作る場合、クラス内で参照できるインスタンス変数を操作するだけなら引数は不要です。しかし条件等を指定したい場合は引数を設定します。

次から引数付きのメソッドの作り方を解説します。

通常の引数の使い方

メソッドに単に値を引き渡すだけなら、メソッドを定義した際に、引数を受け取ってメソッド内で利用する変数名を記述します。なお複数の引数を利用する場合は、「,」で区切って設定してください。

引数を利用したメソッドの定義方法

def メソッド名( 引数1, 引数2, … )
メソッドの処理
ned

引数を使った例

@name = "名前:"
def view_name( views )
  puts @name + views
end

view_name("ポテパン")  # "名前:ポテパン"が表示される

この例はメソッド内からも参照できるインスタンス変数「@name」と、引数で与えられたviewsを繋いで表示します。

デフォルトありの引数の使い方

先ほど紹介したようにRubyでは引数を省略するとデフォルト値が使われるメソッドも作成できます。このようなメソッドを作る場合は、メソッドを定義した際に引数にデフォルト値を設定しておきます。

なお、デフォルトありの引数となしの引数の混在は可能ですが、i番目の引数にデフォルト値を設定したら、i+1番目以降の全てにデフォルト値を設定しなければなりません。そのため、1番目の引数は必須ですが、2番目以降にデフォルト値を設定して省略が可能、といった使い方をします。

デフォルト値ありのメソッドの作り方

def メソッド名( 引数1=デフォルト値1, 引数2=デフォルト値2, … )
メソッドの処理
ned

デフォルト値ありの引数を使った例

@name = "名前:"
def view_name( views="なし" )
  puts @name + views
end

view_name("ポテパン")  # "名前:ポテパン"が表示される
view_name()  # "名前;なし"が表示される

可変長引数を使う

一般的に関数で指定できる引数の数は、関数を宣言した際に決まってしまいますが、Rubyではサイズが可変な配列として引数を受け取ることが可能です。そしてこのような引数を配列で受ける方法を、可変長引数と言います。

使い方は複数の引数の変数を指定する代わりに、アスタリスク(*)がついた変数を1だけ指定することで、その変数を配列として扱えます。

可変長引数の使い方

def メソッド名( *引数 )
メソッドの処理
ned

可変長引数の使用例

@name = "名前"
def view_names( *arr )
  strs = @name
  arr.each do |x|
    strs = strs + ":" + x
  end
  puts strs
end

view_names("ポテパン","スタイル","ブログ")  # "名前:ポテパン:スタイル:ブログ"が表示される

この例では可変長引数を使って引数を受け渡しているので、引数を格納した配列オブジェクトのoptを対象にeachメソッドを使って引数の値を取り出しています。

オプション引数を使う

先ほど引数を配列として受け取る可変長引数を紹介しましたが、同じように引数をハッシュとして受け取る方法がオプション引数です。オプション引数を使う場合は、引数を受け取る変数にアスタリスク(*)を2つ付けます。

オプション引数の使い方

def メソッド名( **引数 )
メソッドの処理
ned

オプション引数の例

@name = "名前"
def view_name( **opt )
  puts @name + ":" + opt[:s1] + ":" + opt[:s2] + ":" + opt[:s3]
end

view_name(s1:"ポテパン", s2:"スタイル", s3:"ブログ")

引数の作り方のコツ


Rubyはオブジェクト指向なオープンソースのスクリプト言語です。さらにプログラムで使われる変数の多くがオブジェクトであり、その操作はオブジェクトで使えるメソッドを利用します。

そのようなRubyですから、自作したメソッドでも引数で外部から与えるのではなく、できるだけインスタンス内のデータを使うメソッドにすると、Rubyらしいプログラムを作れます。

ただし自作のメソッドで引数を使うべきでない、ということではありません。条件の指定などで引数が必要なケースもあります。ぜひ、インスタンス変数と外部から与える引数をうまく活用しましょう。

まとめ


これまで紹介したようにRubyのメソッドは他のプログラミング言語の関数のように使えます。なおオブジェクトの中の機能に当たるメソッドは、同じオブジェクトのデータを処理するための仕組みです。それを理解してメソッドを作り、必要なら引数で外部からデータを受け渡しましょう。

なお、Rubyのメソッドの引数として、一般的な引数の使い方の他に、デフォルトの値を設定できたり、可変長引数やオプション引数も使えます。引数を利用するシーンに応じて、使い分けてください。

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

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

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

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

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

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

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

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

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

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

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