差をつけるRuby 💎
https://gyazo.com/b3febe2fffe07d43aa69d6e2d4e87f22
アンケート
Rubyをバリバリ書ける人 🙋♀️
Rubyを(研修前に)書いたことがある人 🙋♀️
Rubyを研修で初めて書いた人 🙋♀️
Rubyを楽しむために
Rubyは奥が深い
覚えゲーとも言う
いろんな機能を覚えるとキレイに書ける
キレイに書けるとRubyが楽しくなる
mapの小技 ①
map(&:method_name)
code: ruby
mapの小技 ②
map(&hash)
code: ruby
h = { a: 1, b: 2, c: 3 }
Safe navigation operator
安全なメソッド呼び出し
nilっぽいところに付ける
レシーバがnilだったらnilを返す
code: ruby
[].first.to_s # => NoMethodError
[].first&.to_s # => nil
Hashのデフォルト値
関数のメモ化(キャッシュ)に使う
code: ruby
h = Hash.new { |hash, key| hashkey = 0 } # 関数のメモ化
memo = Hash.new { |hash, key| hashkey = some_func(key) } memo:key # => some_func(:key)が走る tap
メソッドチェインの途中の状態を見たいときとかに使う
code: ruby
.map(&:abs).map(&:to_s)
.map(&:chars).map(&:first)
Struct
いわゆる構造体
クラスを作るほどではないがHashよりは "ちゃんとしたい" 時に使う
code: ruby
Hoge = Struct.new(:prop1, :prop2, :prop3)
hoge = Hoge.new('aaa', 'bbb', 'ccc')
hoge.prop1
hoge.prop2 = 100
Struct
いわゆる構造体
クラスを作るほどではないがHashよりは "ちゃんとしたい" 時に使う
code: ruby
class Point < Struct.new(:x, :y)
def hoge
end
end
Point.new(100,200).hoge # => "100, 200"
オープンクラス
Rubyは既存のクラスに後からメソッドを生やせる
組み込みクラスにも生やせる
code: ruby
class String
def hoge
'This is hoge!!!'
end
end
'aaaaa'.hoge # => 'This is hoge!!!'
ブロックの合成
ブロック:関数みたいなもの
ブロックは合成できる
code: ruby
f1 = proc { |e| e * 10 }
f2 = proc { |e| e + 1 }
(f1 >> f2).call(2) # => 21
まとめ
map(&:method_name)
map(&hash)
&.
Hashのデフォルト値
tap
Struct
オープンクラス
ブロックの合成