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