【Ruby入門】 関数(メソッド)の使い方まとめ【型 引数 戻り値】


そもそも関数(メソッド)って何?
Rubyで関数(メソッド)はどうやって書けばいいの?

プログラミングを学んでいると「関数」という言葉をよく聞くと思いますが、このようにそもそも関数が何かわからなったり、どうやって書けばいいのかわからない方も多いのではないでしょうか?

そこで今回はRubyの関数について、基礎からわかりやすく説明していきたいと思います。

関数(メソッド)とは?

関数とは「特定の処理をまとめた塊」のことでメソッドとも呼ばれています。

まずはこちらのサンプルコードをみてください。

def num_times(number)
  new_number = number + 2
  new_number = new_number * 5
  new_number
end

これはnumberという変数に2を足して5倍するという処理をまとめたもので、このような処理を関数と呼びます。rubyではdef(define=定義する)を使うと関数(メソッド)を定義することができます。

基本構造は以下の通りです。

def 関数の名前(関数の引数1、関数の引数2、…)
処理1
処理2
…
end

上記のサンプルコードの例では関数の名前がnum_timesで、関数の引数がnumberですね。そして、new_number = number+2やnew_number*5などは処理にあたります。

このように、関数(メソッド)はとてもシンプルな構造をしています。

またRubyでは関数という言葉は使用せずメソッドという言葉が使用されることがほとんどです。今後の説明ではメソッドという言葉を使用して説明します。

defの使い方についてはこちらの記事で詳しく紹介されているので、参考にしてみてください。

そんなメソッドのメリットは一体なんでしょうか?詳しく見ていきましょう

p 1*2
p 2*2
p 3*2
p 4*2
# => 2 4 6 8

上のコードは1 ~ 4それぞれの数字を2倍にして出力しています。今は2倍ですが、これを3倍にしたいと思った場合、

p 1*3
p 2*3
p 3*3
p 4*3
# => 3 6 9 12

のように全ての数字を変更しなければいけません。今は4個ですが今後大きいプログラムを書いていくと重複箇所が10個や20個になることもあります。

しかし、この2倍にするという処理をメソッドにまとめておけば、どれだけ重複箇所が増えようと変更箇所は一つですみます。

def num_times(number)
  number * 2   #ここの数字を変更すれば倍率を一括で変えることができる。
end

p num_times(1)
p num_times(2)
p num_times(3)
p num_times(4)

上のようによく使用される処理をまとめてメソッドにすることで、変更があった場合にとても対応がしやすくなります。

Rubyでのメソッドの使い方

それではRubyでのメソッドの使い方について解説していきます。

基本のメソッド

メソッドはdefを使って以下のように定義するごとができるのでしたね。

def メソッドの名前(メソッドの引数1、メソッドの引数2、…)
処理1
処理2
…
end

例えばdogというメソッドを定義したい場合は

def dog 
   "Woof!"
end

このようになります。

ただメソッドは定義するだけだと、実行はされません。メソッド名をコード中に書くことによって、メソッドを実行することができます。

def dog 
   "Woof!"
end
p dog 
"Woof!"

これでメソッドの定義と呼び出しを行うことができます。

引数のあるメソッド

引数とはメソッドに値を飛ばしたい時に使用する数のことです。実際の例で考えてみましょう。上のdogというメソッドに誰が吠えたか飛ばせるようにしてみましょう。

def dog(name)
  "#{name}はわんと吠えました"
end
p dog("ポチ")    
p dog("たま")    
"ポチはわんと吠えました"
"たまはわんと吠えました"

このように色々な名前でdogという関数を使い回すことができます。またメソッドに設定できる引数には様々なバリエーションがあります。

たとえば可変長引数を使えば、任意の個数の引数を受け取ることができます。

def pets(*pets)
  p "私のペットは"
pets.each {|pet| p pet}
  p "です"
end
pets("cat","dog","pig","mantis")
"私のペットは"
"cat"
"dog"
"pig"
"mantis"
"です"

*アスタリスクをつけて引数を設定することで、任意の個数引数を受け取れる可変長引数になります。
可変長引数は配列として受け取れるので、たとえばeachメソッドを使って展開できます。(eachメソッドを使うことで配列の要素をそれぞれ出力できます。)

そのほかにも、便利な引数がたくさんあるので、引数をより使いこなしたい方はこちらの記事を参考にしてみてください。

また配列についてはこちらを参考にしてください。

メソッドの型

Rubyではメソッドに渡す引数に型を明示する必要がありません。というのも、Rubyは渡された引数によって型を自動的に判別するからです。

dog(name)
  "#{name}はわんと吠えました"
end
p dog("ポチ")    
p dog("たま")    

この例ではメソッドdogに対しての引数nameには型が明示されていません。ですが、"ポチ"や"たま"はStringオブジェクトとして渡されています。

渡された引数によって型を判別することができるので、メソッド内でもちゃんとStringオブジェクトとして使用できます。

戻り値について

全てのメソッドに戻り値というものがあります。戻り値とは「メソッドを実行した結果」のことです。

def dog 
   "Woof!"
end

で考えてみるとdogメソッドの返り値は"Woof!"ということになります。戻り値とは基本的に、一番最後に実行された行になります。

ですが、returnを使うと、メソッド中の任意のタイミングで戻り値を返すこともできます。

def hotspring(num)
return print "#{num}は禁止された番号です" if num == 4 or num == 13
print "あなたは#{num}番を使用します"
end
hotspring(4) 
hotspring(13)
hotspring(2)
"4は禁止された番号です。"
"13は禁止された番号です。"
"あなたは2番を使用します。"

この場合、引数として渡されたnumが4と13のときにはreturnで設定された戻り値になります。

まとめ

今回はRubyのメソッドについて解説していきました。メソッドは少し難しいように感じるかもしれませんが使いこなすと、プログラムを綺麗に書くことができます。

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

長瀬来

長瀬来

Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。

経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど

言語が好きで、英語や中国、ドイツ語を勉強しました。
将来的には海外で生活したいです。

現在はRuby on Rails5やCocos2dxの勉強を主にしています。

ライターとしては
できるだけ初心者にわかりやすい文章になるように心がけています。

趣味は語学、読書です。