Search

検索したいワードを入力してください

2019年04月04日

Rubyにおける引数の種類や使われ方をまとめて解説

Rubyでは、引数の指定の仕方が複数あります。利用局面に応じて、最適な方法で引数をしていできるよう、まずは、引数の種類と指定の仕方を見てみましょう。Rubyで効果的なプログラミングをできるよう、引数の実装の仕方や種類について覚えておきましょう。

引数とは

引数は、「ひきすう」と読みます。もとは、数学における関数の用語として使われていましたが、現在では、コンピュータプログラムに関する用語として耳にすることが増えています。IT用語としての「引数」は、値のやりとりするための変数や値を示しています。

IT関連の会話の中で「引数」は、「パラメータ」と呼ばれることもあります。プログラムの中で引数のやり取りの指定方法は、使用する言語やメソッドによって異なります。

Rubyにおける8つの引数

引数は、さまざまなプログラミング言語で使われていますが、使い方や指定の仕方は言語特有となる部分もあります。Rubyでプログラム開発を行う際に使っていく引数は、大別すると以下の8種類に分かれます。

・ 普通の引数
・ 括弧なしの引数
・ デフォルト引数
・ キーワード引数
・ 可変長引数
・ オプション引数
・ コマンドライン引数
・ ブロック引数

それぞれの引数の使い方についてサンプルを交えながら見ていきましょう。

普通の引数

Rubyで使用する「普通の引数」とは、Rubyで一番よく使用される引数で、引数の個数に制限はありません。ただし、引数の数が多過ぎるとソースコードが読みづらくなるので、引数の多い場合は、他の引数を使うことも考えて、コーディングに工夫が必要です。

普通の引数は、メソッドなど引数を必要とする記述に対し、括弧の中に変数もしくは値を記述します。ハッシュや文字列も変数のまま渡すことが可能です。

引数の特徴

普通の引数では、括弧の中に変数や値を書くだけで「引数」とみなされます。以下のサンプルコードでは、sampleクラスの中にabcメソッドを定義しています。このメソッドは外部からの引数を受け取り、処理の中で使用しています。

【サンプルコード】

class sample
def self.abc(msg)
p msg
end
end

sample.abc('Delicious')


【実行結果】
Delicious

括弧なしの引数

「普通の引数」は、変数や値を括弧つきで渡すものでしたが、Rubyでは、括弧を付けずに引数を渡すことも可能です。使用するメソッドなどに応じて、普通の引数と括弧なしの引数を使い分けることが推奨されています。

Rubyでは、p, putsなどの出力処理や、returnなどでは、括弧なしの引数を指定が推奨されています。開発者がコーディングしたメソッドなどは、括弧つきで引数を指定することが推奨されています。

括弧なしの引数の特徴

Rubyで引数を扱う際も、定義時の仮引数の 括弧は省略しません。括弧をなくすとメソッド名と引数が並列に見えてプログラムの中に埋もれてしまうためです。

Rubyの言語仕様として括弧の省略が可能でも、乱用するのは避けた方が良いでしょう。コマンドラインなどでは、括弧なしの方がキー入力の手間が省けます。しかし、プログラムコードの中では、他人が見ても整然と読み解けるよう、普通の引数で記述するのがおすすめです。

普通の引数括弧なしの引数
サンプルメソッドの書き方sample.abc('Delicious')sample.abc 'Delicious'

デフォルト引数

Rubyでデフォルト引数を使うと、引数が見つからないときに、デフォルト値として設定されている値が、引数として与えられたとみなされます。デフォルト引数は、引数が必須の場合などに有効です。

【サンプルコード】
class Sample2
def self.abc(msg='abc')
p msg
end
end

Sample2.abc
Sample2.abc('cba')


【実行結果】
abc
cba

デフォルト引数の特徴

デフォルト引数が設定されていると、先のサンプルの実行結果からもわかるように、引数を指定したときは引数の値が使われ、引数を省略したときはあらかじめ「デフォルト引数」として指定した値が使われています。

デフォルト引数には、1つの値のみでなく、複数の引数を設定することも可能です。複数のデフォルト引数が必要な場合は、ハッシュを引数として渡すことができます。

キーワード引数

Rubyで使えるキーワード引数は、引数をRubyのハッシュ形式で記述します。ハッシュで渡すため、記述する引数の順序にとらわれる必要がありません。

【サンプルプログラム】
class Sample3
def self.abc(age: '21', name: 'Yamada')
p "#{age}, #{name}"
end
end

サンプルの実行
【実行コード】
sample3.abc
sample3.abc(age: '56', name: 'Sano')
sample3.abc( name: 'Sato', age: '19')
【実行結果】
"21, Yamada"
"56, Sano"
"19, Sato"

キーワード引数の特徴

Rubyのキーワード引数は、渡さなければならない引数を意識する必要があっても、その順序まで覚える必要がないので、複数の引数を必要とするメソッドに向いています。

実行コードと実行結果からもわかるように、引数ageとnameの前後を入れ替えても、正しく引数が渡り、実行されていることがわかります。

可変長引数

Rubyの可変長引数は、引数の個数が不確定の場合に使います。渡した引数は、受け取ったプログラム側で配列に格納されるので、個数が不確定でも扱うことができます。

【サンプルプログラム】
class sample4
def self.abc(*msg)
p msg
end
end

サンプルの実行
【実行コード】
sample4.abc('ichi')
sample4.abc('eins','zwei')
sample4.abc('one','two','three','four','five')
【実行結果】
["ichi"]
["eins", "zwei"]
["one", "two", "three", "four", "five"]

可変長引数の特徴

可変長の引数を使う場合は、受け取り側のメソッド定義の中で引数に「*」を付けておくと、複数の引数を設定することができます。サンプルコードでは、外部から引数を複数個受け取る想定のメソッドになっています。

可変長引数を使うと、引数の個数を固定しないため、引数が流動的に変わる可能性のあるメソッドを、繰り返し処理を記述することなく実現できます。

オプション引数

Rubyのオプション引数は、ハッシュで引数を渡すことができる仕組みです。ハッシュとして引数を渡し、戻り値もハッシュで受け取るような処理に使えます。

【サンプルプログラム】
class sample5
def self.abc(**msg)
p msg
end
end


サンプルプログラムのように、引数の変数に「*」を2つ付けるとオプション引数として扱われます。オプション引数はハッシュの扱いとなります。

サンプルの実行
【実行コード】
sample5.abc(name: 'Yamamoto')
sample5.abc(age: '21', name: 'Sasaki')
【実行結果】
{:name=>"Yamamoto"}
{:age=>"21", :name=>"Sasaki"}

オプション引数の特徴

Rubyのオプション引数では、ハッシュで引数・戻り値のやり取りを行えます。引数や戻り値の数が流動的な場合にキーと値をセットでやり取りできるので、プログラムの中で使いやすい形で値を扱うことができます。

複数の引数を想定しているものの、毎回すべての引数をやり取りするわけではない、という想定のメソッドでは、オプション引数を使っておけば、その後のプログラミングもスムーズに行えます。

コマンドライン引数

Rubyのコマンドライン引数は、ターミナルからコマンドを実行する時に引数を読み込むことができる仕組みです。

【サンプルプログラム】
puts "$0:#{$0}"
ARGV.each_with_index do |arg, i|
puts "ARGV[#{i}]:#{arg}"
end


【実行結果】
$0: Sample6.rb
ARGV[0]:one
ARGV[1]:two

コマンドライン引数の特徴

サンプルプログラムは、実行したプログラムのファイル名とコマンドライン引数を標準出力に出力します。$0とARGV[]は、プログラム内のコマンドライン引数が代入される変数です。

$0:コマンド名
ARGV[引数番号]:コマンドに渡した引数名

ブロック引数

Rubyのブロック引数を使うと、ブロックを引数として渡すことができます。サンプルプログラムで記述されているように、引数として渡されたコマンド記述をそのまま実行させるメソッドも作成できます。

【サンプルプログラム】
class sample7
def self.abc(&block)
block.call
end
end


【実行コード】
sample7.abc{ p '12345' }

【実行結果】
"12345"

ブロック引数の特徴

Rubyのブロック引数は、yieldと同じ使い方ができます。どちらを使っても同じ結果が得られるので、どちらかというとyieldの方がよく使用されます。サンプルプログラムと同じ結果が得られるようyieldを使って記述すると以下のようになります。

【yieldによる書換え】
class sample8
def self.abc
yield
end
end


【実行コード】
sample8.abc{ p '12345' }

コマンドラインにオプションと引数を設定する

Rubyでは、optparseというライブラリを使って、コマンドラインにオプションを設定することができます。作成したオプションに引数を渡すこともできます。

コマンドにオプションを設定する際は、onというインタンスメソッドを使います。「on」の引数としてオプション設定する文字列を指定します。

コマンドのオプション設定

コマンドにオプションを設定する「on」というインタンスメソッドに、引数としてオプション設定する文字列を指定します。この文字列は以下の2パターンの形式で指定します。

・ハイフン+(一文字):オプションの省略形設定
・ハイフン+(複数文字):省略形でないオプション名の設定

以下のオプション定義の例と実行方法・結果を参考にしてください。

コマンドラインへのオプション設定例(abc.rbに記述)
【オプション定義】
require 'optparse'

op = OptionParser.new
op.on('-a','--hi','puts hello'){puts 'Hello!'}
op.on('-b','--an','puts and'){puts ' & '}
op.on('-c','--good','puts bye '){puts 'Goodbye'}
op.parse(ARGV)
【実行コード】
ruby abc.rb -a -b --bye
【実行結果】
"Hello! & Goodbye"

定義されているオプションの確認

Rubyのコマンドに対して設定されているオプションを確認する際は、デフォルトで設定されている-h、–helpオプションが使えます。

試しにサンプルとして使用したabc.rbを指定して、オプションを確認してみましょう。

【実行コード】
ruby abc.rb --help

【実行結果】
-a,--hi   puts hello
-b,--an   puts and
-c,--good   puts bye

コマンドラインのオプションに引数を渡す

Rubyでは、コマンドのオプションに応じた引数を設定することも可能です。オプション定義の記述の後ろに、任意の文字を設定すると、引数を受け取れるオプションになります。

引数の定義記述の後ろに以下のサンプル例では「val」という変数を記述しています。コマンドオプションを記述したabc.rbをコマンドラインから実行してみましょう。オプションの後ろに引数も記述して実行します。

コマンドラインのオプションへの引数設定例(abc.rbに記述)
【オプションへの引数定義】
require 'optparse'
op = OptionParser.new
op.on('-a val','--hi','puts hello'){|a| puts "Hello!,#{a}"}
op.parse(ARGV)
【実行コード】
ruby abc.rb -a Jane.
【実行結果】
"Hello!Jane."

引数が任意の場合の記述方法

オプションに対する引数指定が任意の場合は、引数定義を以下のように記述しましょう。引数を指定してもしなくても、正常に動作するようになります。

【コード記述例】
op.on('-a [val]','--hi','puts hello'){|a| puts "Hello!,#{a}"}

Rubyの引数を使ってみよう

Rubyには、複数種類の引数の指定方法があり、また、引数付きのコマンドの定義も容易にできます。引数の指定の仕方を変えながら、動きや効果を確認しましょう。

プログラミングにおいては、プログラム内でいかに分かりやすいコード記述がされているかも肝になります。引数の使い方・設定方法・指定の仕方、いずれもプログラムに最適な方法を考え、記述していけるよう心がけましょう。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related