ねこものがたり

いちにちいっぽ

Grow.rb #1に参加しました

2019/5/17に開催されたGrow.rb#1に参加しました!

Grow.rb第1回:EnumerableをRubyで再実装してみよう! - Grow.rb | Doorkeeper

内容

テーマが「EnumerableをRubyで再実装してみよう!」だったわけですが、予め用意頂いたテストが通るように自分でメソッドを書いていく形式でした。 主催者の大倉さんが進行兼タイムキーパーで、「ではこれを10分で書いてください」というのを次々やっていくスタイル。

私は1時間位遅れていったので着いたときにはみなさんがちょうど何かを解いている最中でした。 「うわ!何だこの緊張感」と感じましたが、いざ自分も加わると、めちゃくちゃ頭を使っていました!

何が勉強になったか

いくつかあります。 一番大きいのは、メソッドの動きを知れたことです。このメソッドはブロックがあるとこうで、ないとこうなるのだな等。

次に、テストがあってそれを通すようにRubyを書くのがクイズっぽくて楽しかったんですが、あんまり解けませんでした。(むむむ) それを「こう考えていくといいね」と解説を聞いて、思考を追った上で参考のコードを移していけたのは、ペアプロ的学びがあってよかったです。

解けなかったけど考え方はあってたぞっていうのは結構ありました。 主にだめだった原因は block_given? が使いこなせてなかったことというのが個人的な気付き。

感想

Nerima.rbでもそうなんですが、Rubyで何ができるのか、何をしてるのかを知ること自体がめちゃくちゃ楽しいです。 眺めたり、ただメソッドを実行するだけでなく、再実装してみることで、理解がかなり深まるなと思いました。

当日使ったコードはGitHubに公開されてるので、まだやってないところなど時間見つけて取り組みたいなと思いました。

GitHub - grow-rb/enumerable-exercises: Write your own Enumerable methods and learn!

inquiryメソッドが便利だったので

昨日railsinquiryメソッドを知りました。

APIドキュメントinquiryと引くと、ArrayStringはえているようです。

今回知ってどちらのクラスにも使ったのですが、特にStringに対してこのメソッドを使うと、とにかく便利で、たった1語でこんなことができるんかと、まあとにかく感動しました。

例えばこのようになります。

inquiry使わない場合

> "sushi".class
=> String
> main_dish.sushi? # sushi?ってメソッドはStringクラスにないので
Traceback (most recent call last):
        1: from (irb):4
NoMethodError (undefined method `sushi?' for "sushi":String)

inquiry使う場合

> main_dish = "sushi".inquiry
=> "sushi"
> main_dish.sushi?
=> true
0> main_dish.pizza?
=> fals

メインディッシュは寿司に決まり!

> main_dish.sushi?.class
=> TrueClass
> main_dish.pizza?.class
=> FalseClass

とTrue/Falseが戻り値になります。

また inquiryというのは StringInquirerクラスで、もとのインスタンスをラップします。

> "sushi".inquiry.class
=> ActiveSupport::StringInquirer

上記はString#inquiryですが、Array#inruiryでも基本は同様(ArrayInquirerクラスにラップする)。

昨日知って昨日メソッドを使ったばかりですが、このソース読んでみます。 最近は「やりたいことはだいたいrailsのメソッドがある」というのを体感していて、感動しています。すごいなあ!