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

43 lines
5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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を使った記法が書かれていたぜひものにしたい