動作環境はMacを使用しています。
メソッド
複数の処理を1つにまとめて扱いやすくしたもの
クラス内に定義される
≒クラス内に定義する関数
構文
def メソッド名(引数1、引数2...)
実行したい処理
end
引数がない場合省略可。
引数は、メソッドに渡すもの。
実践
"Hello, World"と出力するプログラムを実装
メソッド名はhello_world
method_hello.rb
def hello_world
puts "Hello, World!"
end
hello_world
出力結果
$ ruby method_hello.rb
Hello, World!
引数を使用して、任意の数字を計算するプログラム
method_add.rb
def add(x, y)
x + y
end
puts add(10,1)
#10+1の計算結果が出力される
#メソッド内にputsを定義しない理由は文字列ではないから
出力結果
$ ruby method_add.rb
11
戻り値
メソッドからメソッドの呼び出し元に戻す値のこと
他のプログラミング言語で戻り値を明示的に表す場合があるがrubyの場合は不要
method_add.rb
def add(x, y)
return x + y
end
puts add(10,1)
$ ruby method_add.rb
11
#エラーにはならない
メソッドの命名規則
メソッド名は小文字
method_name.rb
def hello
puts "Hello"
end
hello
出力結果
$ ruby method_name.rb
Hello
2語以上のメソッド名になる場合はスネークケース(アンダースコア)でつなぐ
※アンダースコアで始まるメソッド名はエラーにはならないが意図がない限り避ける
method_name.rb
def hello_world
puts "Hello"
end
hello_world
出力結果
$ ruby method_name.rb
Hello
メソッド名に数字は使用可能。ただし、使用しない方が良い
製作者しかわからないマジックナンバーになるため
method_name.rb
def hello1
puts "Hello"
end
hello1
#行頭に数字を持ってくるとエラーになる
def 1hello
puts "Hello"
end
1hello
出力結果
$ ruby method_name.rb
Hello
$ ruby method_name.rb
method_name.rb:1: syntax error, unexpected tINTEGER
def 1hello
^
実践
引数にcatが渡されたら"meow"
引数にdogが渡されたら"bowwow"
それ以外なら"???と出力されるメソッド
animal_cry.rb
def cry(animal)
if animal == "cat"
puts "meow"
elsif animal == "dog"
puts "bowwow"
else
puts "???"
end
end
puts cry(引数) #戻り値の出力
出力結果
$ ruby animal_cry.rb
meow #cat
$ ruby animal_cry.rb
bowwow #dog
$ ruby animal_cry.rb
??? #それ以外
FizzBuzzメソッド
3で割り切れる時Fizz
5で割り切れる時Buzz
15で割り切れる時FizzBuzz
それ以外は数値を文字列にして返す
fizz_buzz.rb
def fizz_buzz(n)
if n % 15 == 0
"FizzBuzz"
elsif n % 3 == 0
"Fizz"
elsif n % 5 == 0
"Buzz"
else
n.to_s
end
end
puts fizz_buzz(1)
puts fizz_buzz(2)
puts fizz_buzz(3)
puts fizz_buzz(4)
puts fizz_buzz(5)
puts fizz_buzz(6)
puts fizz_buzz(7)
puts fizz_buzz(8)
puts fizz_buzz(9)
puts fizz_buzz(10)
puts fizz_buzz(11)
puts fizz_buzz(12)
puts fizz_buzz(13)
puts fizz_buzz(14)
puts fizz_buzz(15)
出力結果
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
ポイントは3で割る処理の一番最初に持ってきてしまうと、
15で割る時にFizzが返ってしまうので、15で割る処理を一番最初に持ってくること。