Rubyで複数の配列を同時に処理する方法
あんまり機会は多くないけど、 今までこんな感じに書いてた。
ary1 = %w(hoge fuga foo baz) ary2 = %w(user_1 user_2 user_3 user_4 user_4) i = 0 loop do break if i == ary1.size p ary1[i] p ary2[i] i += 1 end
配列の配列を作成(Array#zip)してからeachするとスッキリかける。
ary1.zip(ary2).each do |keyword, user_id| p keyword p user_id end
Ruby, Railsのドキュメント・コードをみる方法
Ruby のコードはCだからちょっと難しいけど、
Rails(ActiveSupport)とかのコードの実装(Ruby)をみると
とても勉強になります。
んで、pry を使うとすごく簡単に確認できることを知りました。
(pry は irb の強化版みたいなものです)
$ gem install pry
これでおk。
ちなみにpry-railsなんていうgemもあってRailsのデバックなんかのときも便利です。
コードとかドキュメントを見る時は
pryの?と$という便利なコマンドを使います。
?
: 指定したメソッドのドキュメント(コメント)を表示
$
: 指定したメソッドのソースを表示
みんなよく使うblank?はこんな感じ。
pry(main)> ? ''.blank? From: /Users/whitech0c0/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activesupport-4.0.2/lib/active_support/core_ext/object/blank.rb @ line 86: Owner: String Visibility: public Signature: blank?() Number of lines: 6 A string is blank if it's empty or contains whitespaces only: ''.blank? # => true ' '.blank? # => true ' '.blank? # => true ' something here '.blank? # => false [8] pry(main)> $ ''.blank? From: /Users/whitech0c0/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activesupport-4.0.2/lib/active_support/core_ext/object/blank.rb @ line 92: Owner: String Visibility: public Number of lines: 3 def blank? self !~ /[^[:space:]]/ end
presentの中身を見てみると、これだけ!
def present? !blank? end
そのまんま!!ですね。 どんどん活用していきたいでっす。
Team Geek を読んだ。
Team Geek ―Googleのギークたちはいかにしてチームを作るのか
- 作者: Brian W. Fitzpatrick,Ben Collins-Sussman,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/07/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (15件) を見る
エンジニアも非エンジニアも必ず読むべき一冊だと思います。
良いチームを作るにはHRT*1
って考え方が大事!
ってことをあらゆる場面などを例に解説されていて、エンジニアリングだけでなく、人生すべてに当てはまるいろんな場面で役に立つ考え方や方法論が学べまっす。
なおやさんも言ってたけど、 「俺は作品を批判してるのであって、お前の人格を否定しているわけではないんだから傷つかないで欲しい」 みたいなニュアンスを伝えるってすごく難しいし、伝える方も受け取る方も誤解しやすいところ。
技術も大事だけど、こういうエモいことを継承していくことはもっと大事だなぁとあらためて。優秀なエンジニアの方々はこういうことも常々意識してるし、こういうエモいことが知れるpplogはとても良いサービスだと思いますはい。
*1: Humility(謙遜)、Respect(尊敬)、Trust(信頼)
Ruby で !! のつかいどころ
日記です / Ruby Patterns - ✘╹◡╹✘ http://t.co/tWyrSRcQ0B
— 中村氏 (@r7kamura) 2014, 1月 22
Rubyのいいパターンについて言及されていました。
なるほどなーと思ったので、自分用にもメモっときます。
[1] pry(main)> !!"hoge" (pry):1: warning: string literal in condition => true [2] pry(main)> !!1 => true [3] pry(main)> !!0 => true [4] pry(main)> !!false => false [5] pry(main)> !!nil => false
上のような感じで
RUbyでは、!! をつけると true か false で返してくれます。
だから、
? がつくメソッドには必ず式の先頭に !! をつけて true, false になるようにした方よい。
(nil とか オブジェクトを返すのは意味合いがわかりずらくなる)
サンプルコード
class Entry def has_user? !!user end def user User.find_by(id: user_id) end end
たしかに、if user とかで判定するよりもこっちの方がキレイだし納得できますね。
本家のブログの方にはテストも含めたメソッドの命名規則なんかのパターンについても書かれています。とても参考になります。