This commit is contained in:
Rikuoh Tsujitani 2024-03-16 22:40:05 +09:00
parent 47daa94314
commit dc906b0ca5
Signed by: riq0h
GPG key ID: 010F09DEA298C717
2 changed files with 63 additions and 0 deletions

30
cherry.md Normal file
View file

@ -0,0 +1,30 @@
## 3/16
Rubyの真偽値はfalseまたはnil以外はすべてtrueRuby固有の特徴
if文の戻り値を変数に代入できるgreeting = if country == 'japan' elsif...のように書ける
メソッド名はスネークケースで書くhello_world のような形式
%記法でエスケープが不要になる:%!unkoburi!のように囲える
ヒアドキュメント:<<-識別子 テキスト 識別子 の形式で複数行の文章を格納できる式展開も使える <<-を途中で使うとインデントされる引数として渡すこともできるヒアドキュメントを二つ使うと配列を作れるこれすごい便利じゃないか
配列の結合:[10,20,30].join で全部くっつく
unlessifの逆 でもこれ逆に頭がこんがらがりそう
==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

33
main.rb
View file

@ -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)