This commit is contained in:
Rikuoh Tsujitani 2024-03-19 22:26:33 +09:00
parent 00dfd30932
commit 1d5aeac6fd
Signed by: riq0h
GPG key ID: 010F09DEA298C717
3 changed files with 46 additions and 7 deletions

View file

@ -34,6 +34,41 @@ numbers.sum : 名前通り配列の要素を合計できる。文字列でも使
(1..5)←これはRangeという名前のオブジェクトだったただのそういう感じの簡略記法かと思っていた。点が三つだと5は含まれなくなる (1..5)←これはRangeという名前のオブジェクトだったただのそういう感じの簡略記法かと思っていた。点が三つだと5は含まれなくなる
(1..5).to_aで値が連続する配列を作ることができるこれ””””答え””””だ。こういうものがあるといいと思ってた (1..5).to_aで値が連続する配列を作ることができるこれ””””答え””””だ。こういうものがあるといいと思ってた
RBG変換器の実装を通じてこれたぶんもっと短くなる方法ありそうだな……と思っていたらすぐ下でsumを使った記法が書かれていた。ぜひものにしたい 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ページまで

10
main.rb
View file

@ -1,5 +1,9 @@
def to_hex(r, g, b) def to_ints(hex)
[r, g, b].sum('#') do |n| r = hex [1..2]
n.to_s(16).rjust(2, '0') g = hex [3..4]
b = hex [5..6]
ints = []
[r, g, b].map do |s|
s.hex
end end
end end

View file

@ -2,9 +2,9 @@ require 'minitest/autorun'
require_relative 'main' require_relative 'main'
class RdbTest < Minitest::Test class RdbTest < Minitest::Test
def test_to_hex def test_to_ints
assert_equal '#000000', to_hex(0, 0, 0) assert_equal [0,0,0], to_ints('#000000')
assert_equal '#ffffff', to_hex(255, 255, 255) assert_equal [255,255,255], to_ints('#ffffff')
assert_equal '#043c78', to_hex(4, 60, 120) assert_equal [4, 60, 120], to_ints('#043c78')
end end
end end