###演習
1.lengthメソッドを使って調べろ
>> a = "racecar"
=> "racecar"
>> a.length
=> 7
2.reverseメソッドを使って調べろ
>> a.reverse
=> "racecar"
3.等しいか比べろ
>> s = "racecar"
=> "racecar"
>> s == s.reverse
=> true
等しかった。
4.```puts "It's a palindrome!" if s ==s.reverse
```rb
>> puts "It's a palindrome!" if s == s.reverse
It's a palindrome!
=> nil
nilが帰ってきた。
なんで?
puts "foo"は文字列「"foo"」を副作用としてスクリーンに表示しますが、戻り値には「文字どおりの無」であるnilを返します
予想ではsと等しい時に表示させると思う。
なんかわからんけど
スクリーンに表示させると戻り値はnilが帰ってくるらしい。
###メソッドの定義
homeアクションや、リスト 4.2のfull_titleヘルパーと同じ方法でメソッドを定義することができます
>> def string_message(str = '')
>> if str.empty?
>> "It's an empty string!"
>> else
>> "The string is nonempty."
>> end
>> end
=> :string_message
>> puts string_message("foobar")
The string is nonempty.
>> puts string_message("")
It's an empty string!
>> puts string_message
It's an empty string!
メソッドの引数を省略することも可能です
def string_message(str = '')
引数にデフォルト値を含めているからです(この例のデフォルト値は空の文字列です)
str変数に引数を渡すことも渡さないこともできます。
指定のデフォルト値が自動的に使われます。
Rubyのメソッドには「暗黙の戻り値がある」
それは
メソッド内で最後に評価された式の値が自動的に返されること
>> def string_message(the_function_argument = '')
>> if the_function_argument.empty?
>> "It's an empty string!"
>> else
>> "The string is nonempty."
>> end
>> end
=> :string_message
>> puts string_message("")
It's an empty string!
>> puts string_message("foobar")
The string is nonempty.
2番目のreturnは実はなくても良い。
メソッド内の最後に置かれた式"The string is nonempty."
は、returnキーワードがなくても暗黙で値を返すため
両方にreturnを使う方が見た目の対称性が保たれるので好ましいと言える。
####演習
>> def palindrome_tester(s)
>> if FILL_IN
>> puts "It's a palindrome!"
>> else
>> puts "It's not a palindrome."
>> end
>> end
1.FILL_INの部分を適切なコードに置き換え、回文かどうかをチェック
>> def palindrome_tester(s)
>> if s == s.reverse
>> puts "It's a palindrome!"
>> else
>> puts "It's not a palindrome."
>> end
>> end
=> :palindrome_tester
2.上で定義したメソッドを使って “racecar” と “onomatopoeia” が回文かどうかを確かめろ
>> puts palindrome_tester("racecar")
It's a palindrome!
=> nil
>> puts palindrome_tester("onomatopeia")
It's not a palindrome.
=> nil
3.palindrome_tester("racecar")
に対してnil?メソッドを呼び出し、戻り値がnilであるかどうかを確認しろ
>> puts palindrome_tester("racecar").nil?
It's a palindrome!
true
=> nil
文字列が返されたのでnilになった。
前に文字列を表示させた時にnilが返されたことがあったのを思い出した。