Ruby のお勉強 - 関数・メソッド -

公開日:2014-12-24

関数・メソッド

ソース
def test
  return 1
end
p test 
実行結果
1
関数・メソッドは、def ~ end で定義する。


ソース
def test
  3
  2
  1
end
p test 
実行結果
1
return は省略できる。最後の値が有効。


ソース
def test(a)
  a = a + 1
end
print test 5
実行結果
6
こんな書き方もできる。


ソース
def test(s)
  s[0] = "A"
end
s = "abc"
test(s)
print s
実行結果
Abc
変数は全てオブジェクトなので、引数は参照渡しになる。


ソース
def test()
  return 1, 2
end
a, b = test
p a
p b
実行結果
1
2
戻り値を複数返して、複数同時に代入できる。但し、return を付けないとエラーになる。


ソース
def test
  [1, 2, 3]
end
a, b, c = test
p a
p b
p c 
実行結果
1
2
3
配列にすれば、return を付けなくても、複数戻り値を返せる。


ソース
def test(*args)
  p args.count
end
test
test(1)
test(1, 2)
test(1, 2, 3)
実行結果
0
1
2
3
可変長引数。引数を配列で取得できる。


ソース
def test(a)
  if a == 0
    "OK"
  end
  
  if a == 1
    "NG"
  end 
end
p test(0)
p test(1)
実行結果
nil
"NG"
a == 0 の時、"OK" が最後になるので、戻り値が "OK" になるのかと思ったら、nil になった。
最後の if が nil を返しているためだと思われる。


ソース
def test(a)
  if a == 0
    "OK"
  else a == 1
    "NG"
  end
end
p test(0)
p test(1)
実行結果
"OK"
"NG"
else にしたところ、予想通りの動きとなった。
return を書いた方が、間違えがないし、見やすいと思う。


ソース
class TestClass
  def test1
    p "test"
  end
  def test2
    test1
  end
  
  public  :test1, :test2
  private :test1
end
#TestClass.new.test1 #privateメソッドのためエラー
TestClass.new.test2
実行結果
"test"
メソッドの可視性は、シンボルを使って指定可能。
また、最後に指定したものが有効になる。