通常、メソッドは実行すると何かの値を返します
ruby
1class Num
2 def initialize
3 @number = 1
4 end
5
6 def add_one
7 @number + 1
8 end
9end
10
11num = Num.new
12puts num.add_one # => 2
13puts num.add_one # => 2
14puts num.add_one # => 2
しかしこの add_one
メソッドは @number
の値を書き換えるわけではありません。
あくまで @number
と 1
を足した結果を返すだけです。
なので何回呼び出しても値は変わりません。
この内部的に持っている @number
がメソッド呼び出しによって書き換わることを
「破壊的」な処理と呼びます
たとえば
ruby
1class Num
2 def initialize
3 @number = 1
4 end
5
6 def add_one
7 @number = @number + 1
8 end
9end
10
11num = Num.new
12puts num.add_one # => 2
13puts num.add_one # => 3
14puts num.add_one # => 4
こうすると、最初の結果は同じですが、内部で持っている @number
の値が変わるのでこの場合メソッド add_one
は破壊的なメソッドということになります。
しかし前者と後者で見た目が同じなのは紛らわしいので、rubyではメソッドの最後に !
を付けておく慣習があります。
ruby
1class Num
2 def initialize
3 @number = 1
4 end
5
6 def add_one!
7 @number = @number + 1
8 end
9end
10
11num = Num.new
12puts num.add_one! # => 2
13puts num.add_one! # => 3
14puts num.add_one! # => 4
こうすれば破壊的なメソッドを呼び出していることがわかりやすくなります。
質問の email
という変数はおそらく文字列が代入されているので
downcase
と downcase!
の違いは内部で持っている文字列が書き換わるかそうでないかという違いがあります
ruby
1email = 'SAMPLE@EXAMPLE.COM'
2
3puts email.downcase # => sample@example.com
4puts email # => SAMPLE@EXAMPLE.COM
5
6puts email.downcase! # => sample@example.com
7puts email # => sample@example.com
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。