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

そのまんま!!ですね。 どんどん活用していきたいでっす。

http://qiita.com/jnchito/items/fc8a61b421d026a23ffe

Team Geek を読んだ。

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

エンジニアも非エンジニアも必ず読むべき一冊だと思います。


良いチームを作るにはHRT*1 って考え方が大事!
ってことをあらゆる場面などを例に解説されていて、エンジニアリングだけでなく、人生すべてに当てはまるいろんな場面で役に立つ考え方や方法論が学べまっす。

なおやさんも言ってたけど、 「俺は作品を批判してるのであって、お前の人格を否定しているわけではないんだから傷つかないで欲しい」 みたいなニュアンスを伝えるってすごく難しいし、伝える方も受け取る方も誤解しやすいところ。

技術も大事だけど、こういうエモいことを継承していくことはもっと大事だなぁとあらためて。優秀なエンジニアの方々はこういうことも常々意識してるし、こういうエモいことが知れるpplogはとても良いサービスだと思いますはい。

pplog - ゆるふわインターネットにポエムを刻もう

*1: Humility(謙遜)、Respect(尊敬)、Trust(信頼)

Ruby で !! のつかいどころ

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 とかで判定するよりもこっちの方がキレイだし納得できますね。

本家のブログの方にはテストも含めたメソッドの命名規則なんかのパターンについても書かれています。とても参考になります。