fjord/cherry.md
2024-03-17 23:28:50 +09:00

5 KiB
Raw Blame History

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

numbers.select {|n| n.even?} : このようにselectメソッドを使うと条件を満たした配列のみを作成できる。この例では偶数のみの配列が生成される numbers.find : findメソッドは戻り値が真になった最初の値のみを返す numbers.sum : 名前通り配列の要素を合計できる。文字列でも使える('')単純な連結ならjoinメソッドの方が楽だがsumは文字列の加工に優れる &:メソッド名でシンプルに書けるブロックパラメータが1つ、ブロックの中のメソッドに引数がない、メソッドを1回呼び出す以外の処理がない、といった条件をすべて満たすと [1,2,3,4,5,6].select{|n| n.odd?}を[1,2,3,4,5,6,].select{&:odd?}のように簡潔に書ける。演算子を使っている場合は不可能 (1..5)←これはRangeという名前のオブジェクトだったただのそういう感じの簡略記法かと思っていた。点が三つだと5は含まれなくなる (1..5).to_aで値が連続する配列を作ることができるこれ””””答え””””だ。こういうものがあるといいと思ってた RBG変換器の実装を通じてこれたぶんもっと短くなる方法ありそうだな……と思っていたらすぐ下でsumを使った記法が書かれていた。ぜひものにしたい