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

公開日:2014-12-24 更新日:2019-05-11
[Ruby]

関数・メソッド

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"
メソッドの可視性は、シンボルを使って指定可能。
また、最後に指定したものが有効になる。