diff --git a/cherry.md b/cherry.md index 2d3d13b..5322587 100644 --- a/cherry.md +++ b/cherry.md @@ -34,6 +34,41 @@ numbers.sum : 名前通り配列の要素を合計できる。文字列でも使 (1..5)←これはRangeという名前のオブジェクトだった!:ただのそういう感じの簡略記法かと思っていた。点が三つだと5は含まれなくなる (1..5).to_aで値が連続する配列を作ることができる:これ””””答え””””だ。こういうものがあるといいと思ってた RBG変換器の実装を通じて:これたぶんもっと短くなる方法ありそうだな……と思っていたらすぐ下でsumを使った記法が書かれていた。ぜひものにしたい +123ページまで + +## 3/19 +to_intsメソッドのリファクタリングを通じて:空の配列を用意して、ほかの配列をループ処理した結果を空野妃紫配列に詰め込んでいくような処理の大半はmapメソッドに置き換えることができる……らしい +上級編に書かれていた多重代入➜scanメソッド➜mapメソッドを呼ぶからの&シンボ➜エンドレスメソッドの流れはカードバトのフィニッシのコンボみがある +a.values_at(0,2,4)この形式で取得したい要素を複数指定できる。 +a[a.size - 1]この形式で最後の要素を取得できる +a[-1]これでもいける +a.lastこれもいける +a[開始地点,範囲] = 置き換える数字 で要素を置き換えられる +a.concat(b)でaを破壊的にbと結合する(bは破壊されない) +e, *f = 100,200,300*このような書き方をするとはみ出した数字を含めた配列がfに代入される +e, * = 100,200,300 この場合は100のみがeに格納されて他は無視される +e, = 100,200,300 これも同じ +a, *b, c, d = 1,2,3,4,5* この場合は間に挟まれた残りの要素がbに入る(2,3) +配列を配列にpushで代入する場合、スプラット演算子をつけなければ多重配列になる +上記の特性を活かしてwhen節で配列を複数の条件として展開できる +上記の特性を活かして簡潔な形で配列を連結させることもできる[-1, 0, *a, 4, 5] +%w記法:これはフォーマッタが教えてくれた。%W大文字を使うとタブ文字なども使える +'Ruby'.chars この形式で文字を一文字ずつ分解して配列にできる +'Ruby,Java,Python'.split(',') 文字列から配列を作る +a = Array.new(5, 0) 配列に初期値を設定して作る方法。この例では5つの0が配列に入る +a = Array.new(10) {|n| n % 3 + 1} ブロックを使った初期値の設定例。引数の数だけ呼ばれてブロックの中身が要素の添字になる +第2引数デフォルト値を指定するとすべての配列が同じ文字列オブジェクトを参照するため、破壊的メソッドですべてが置き換わる +ミュータブルとイミュータブル:イミュータブルなオブジェクトは破壊的変更の影響を受けない。主に数値、シンボル、真偽値、nil、Rangeはイミュータブル +freezeメソッドを使うとイミュータブルなオブジェクトにすることができる +with_indexはeach以外でも使えるmapやdelete_ifなど : Enumeratorクラスに属するものはwith_indexを呼び出せる +配列の要素分だけブロックパラメータを用意すると各要素の値が別々の変数に格納される +ブロックパラメータを丸括弧で囲うとwith_indexなどで他のブロックが必要になる場合でも上記の挙動を実現できる +番号指定パラメータ:_1 このような形式でブロックに格納する変数を指定できる +do..endの代わりに使う{}は結合度が高い:異なった解釈をする場合があるのでブロックに丸括弧が必須 +しかしながらdo..endと{}は基本的には同じなのでendの後ろにドットをつけて.joinなどをつけても機能する +151ページまで + + diff --git a/main.rb b/main.rb index 8d6269e..e89c2f3 100644 --- a/main.rb +++ b/main.rb @@ -1,5 +1,9 @@ -def to_hex(r, g, b) - [r, g, b].sum('#') do |n| - n.to_s(16).rjust(2, '0') +def to_ints(hex) + r = hex [1..2] + g = hex [3..4] + b = hex [5..6] + ints = [] + [r, g, b].map do |s| + s.hex end end diff --git a/main_test.rb b/main_test.rb index 5dcc3ba..cbc44c9 100644 --- a/main_test.rb +++ b/main_test.rb @@ -2,9 +2,9 @@ require 'minitest/autorun' require_relative 'main' class RdbTest < Minitest::Test - def test_to_hex - assert_equal '#000000', to_hex(0, 0, 0) - assert_equal '#ffffff', to_hex(255, 255, 255) - assert_equal '#043c78', to_hex(4, 60, 120) + def test_to_ints + assert_equal [0,0,0], to_ints('#000000') + assert_equal [255,255,255], to_ints('#ffffff') + assert_equal [4, 60, 120], to_ints('#043c78') end end