RubyでFizzBuzz書いてハマった話
学んだこと TL;DR
putsはnilを戻り値として返す。
最初のコード
def fizz_buzz(num) if num % 15 == 0 puts "Fizz Buzz" elsif num % 3 == 0 puts "Fizz" elsif num % 5 == 0 puts "Buzz" else puts num.to_s end end require 'minitest/autorun' class FizzBuzzTest < Minitest::Test def test_fizz_buzz assert_equal '1', fizz_buzz(1) assert_equal '2', fizz_buzz(2) assert_equal 'Fizz', fizz_buzz(3) assert_equal '4', fizz_buzz(4) assert_equal 'Buzz', fizz_buzz(5) assert_equal 'Fizz', fizz_buzz(6) assert_equal 'Fizz Buzz', fizz_buzz(15) end end
実行結果
あれ?最初のアサーションで処理が止まってる??なんでや、、
修正後のコード
def fizz_buzz(num) if num % 15 == 0 "Fizz Buzz" elsif num % 3 == 0 "Fizz" elsif num % 5 == 0 "Buzz" else num.to_s end end require 'minitest/autorun' class FizzBuzzTest < Minitest::Test def test_fizz_buzz assert_equal '1', fizz_buzz(1) assert_equal '2', fizz_buzz(2) assert_equal 'Fizz', fizz_buzz(3) assert_equal '4', fizz_buzz(4) assert_equal 'Buzz', fizz_buzz(5) assert_equal 'Fizz', fizz_buzz(6) assert_equal 'Fizz Buzz', fizz_buzz(15) end end
実行結果
ちゃんとテストパスできた〜
感想
puts やprintがnilを返すということは多分もう忘れないと思います。
あとrubyだとreturnをあんまり使わずに"文字列"だけを書いて戻り値とするんだなと知りました。