diff --git a/cherry.md b/cherry.md new file mode 100644 index 0000000..e7121f9 --- /dev/null +++ b/cherry.md @@ -0,0 +1,30 @@ +## 3/16 +Rubyの真偽値はfalseまたはnil以外はすべてtrue:Ruby固有の特徴 +if文の戻り値を変数に代入できる:greeting = if country == 'japan' elsif...のように書ける +メソッド名はスネークケースで書く:hello_world のような形式 +%記法でエスケープが不要になる:%!unkoburi!のように囲える +ヒアドキュメント:<<-識別子 テキスト 識別子 の形式で複数行の文章を格納できる。式展開も使える。 <<-を途中で使うとインデントされる。引数として渡すこともできる。ヒアドキュメントを二つ使うと配列を作れる(これすごい便利じゃないか?) +配列の結合:[10,20,30].join で全部くっつく +unless:ifの逆 でもこれ逆に頭がこんがらがりそう +==true , ==false は冗長なので使わない:それはそうだ +case文:絶対に使うべき局面でもなぜか忘却してif文を使ってしまう message = case xxx when 'yyy' end のように使う +三項演算子:絶対に使うべき局面なのになぜか忘却して以下略 式 ? 真だった場合の処理 : 偽だった場合の処理 のように使う +メソッドにデフォルト値の引数を付ける:def greet(country = 'japan')などで引数なしでjapanが引数として扱われる。(x, y=x)のようにするとyが無指定の場合にxと同じ値として扱われる +!で終わるメソッドは破壊的メソッドだが、ついていないからといって破壊的ではないとは限らない:concatは付いていないが破壊的 +エンドレスメソッド定義 endがいらない:def greet = 'hello!' +lengthとsizeはどちらも”まったく”同じメソッド:なにか違うはずだろと思っていたのに…… +標準ライブラリと組み込みライブラリはイコールではない:同じだと思ってた +putsとprintの差は改行の有無だが、pはオブジェクトそのものがメソッドの戻り値になる(p 123の後に123を参照すると123が戻ってくる、putsの場合はnil)、ppはpよりも整形してきれいに出力してくれる。pはオブジェクトをStringではなくinspectに変換している +配列で元の大きい添字を指定すると間の値はnilで埋められる:a=[1,2,3] a[4]=50などとすると[1,2,3,nil,50]となる +配列はa << 2 などで最後に要素を追加できる:コードを見た覚えがある割には自分で使ったことはなかった +削除はdelete.at(n)で行う。delete(n)だとnに一致する要素がまとめて削除される +divmodというメソッドは商と余りを配列で返す 14.divmod(3)は[4,2]になる delete_ifメソッドを使うとdo |x|で条件を別に記述できる +Rubyプログラマはfor文を使わない:確かに例文でほとんど出てこないので気にかかっていた。たまたまかと思いきや本当に使わないのか +配列の要素を順番に取り出す作業はeachメソッド、要素をどう扱うかはブロック(ブロックの中身に書くコード)の役割:ごっちゃになっていたのでようやく納得した +変数名の重複により他のものが参照できなくなることをシャドーイングという +do endの代わりに{}でブロックをくくることもできる:僕が最初にうまく理解できなかった理由はこれだな +.mapを使うとブロックの戻り値が配列の要素となる新しい配列が作成される:new = numbers.map { |n| n * 10}で配列numbersを10倍にした新しい配列が作れる +112ページまで + +## 3/17 + diff --git a/main.rb b/main.rb index e69de29..b538c33 100644 --- a/main.rb +++ b/main.rb @@ -0,0 +1,33 @@ +def fizz_buzz(n) + if n % 15 == 0 + 'FizzBuzz' + elsif n % 3 == 0 + 'Fizz' + elsif n % 5 == 0 + 'Buzz' + else + n.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 fizz_buzz(1) +# puts fizz_buzz(2) +# puts fizz_buzz(3) +# puts fizz_buzz(4) +# puts fizz_buzz(5) +# puts fizz_buzz(6) +# puts fizz_buzz(15)