発端
最近仕事でとあるライブラリをforkしていじっているのですが、どうにもこういうも違和感ががが。
Rubyを書き始めて8ヶ月くらいですが、仕事で自社アプリのソースは結構読んでいるし、メジャーどころのRuby本(プログラミングRuby, The RSpec Book, リファクタリング Rubyエディション, メタプログラミングRubyなど)は読んでいるので目はまずまず肥えてきたと思ってます。
で、ふとこんなことをつぶやいたら
他の人のRubyのコードを見て「これってRubyっぽくないなぁ」となんとなく感じるくらいにはRuby力は向上した気がします(Ruby歴8ヶ月 男性)
— sue445さん (@sue445) 2013年2月19日
この「感じ」は形式知にできないのかなぁ。"@sue445: 他の人のRubyのコードを見て「これってRubyっぽくないなぁ」となんとなく感じるくらいにはRuby力は向上した気がします(Ruby歴8ヶ月 男性)"
— urimaroさん (@urimaro) 2013年2月19日
とレスがあったので書いてみます。
1. メソッドの最後のreturnは削る
rubyっぽくない
def get_value # do something return value end
rubyっぽい
def get_value # do something value end
2. 引数がたくさんある場合はHashにする
rubyっぽくない
def some_method(name, position, language="en") # do something end
rubyっぽい
def some_method(args ={}) name = args[:name] position = args[:position] language = args[:language] || "en" # do something end
必須な引数は普通の変数にして、省略可能なオプション引数はHashにするという使い分けも一理あり
ArrayやHashの初期化は括弧の方がかっこいい *1
rubyっぽくない
values = Array.new options = Hash.new
rubyっぽい
values = [] options = {}
文字列に変数を埋め込む時は #{〜} を使う
rubyっぽくない
suite_precure_count = 4 message = "届け" + suite_precure_count.to_s + "人の組曲!"
JavaだとString+intだとintが暗黙的に toString() が呼ばれて連結できるのですが、Rubyだとできないのでto_sが必要
rubyっぽい
suite_precure_count = 4 message = "届け#{suite_precure_count}人の組曲!"
Javaだと変数埋め込みは ${〜} なのでいまだに間違えます。
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
自分の違和感を文章化してみたらこんなところですかねぇ。。。
「rubyっぽい」「rubyっぽくない」はあくまで僕自身の主観です *2
- 作者: まつもとゆきひろ,David Flanagan,卜部昌平(監訳),長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/01/26
- メディア: 大型本
- 購入: 21人 クリック: 349回
- この商品を含むブログ (118件) を見る
The RSpec Book (Professional Ruby Series)
- 作者: David Chelimsky,Dave Astels,Zach Dennis,角谷 信太郎,豊田 祐司,株式会社クイープ
- 出版社/メーカー: 翔泳社
- 発売日: 2012/02/22
- メディア: 大型本
- 購入: 7人 クリック: 136回
- この商品を含むブログ (13件) を見る
- 作者: Jay Fields,Shane Harvie,Martin Fowler,Kent Beck,長尾高弘
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2010/02/27
- メディア: 大型本
- 購入: 9人 クリック: 321回
- この商品を含むブログ (41件) を見る
- 作者: Paolo Perrotta,角征典
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2010/08/28
- メディア: 大型本
- 購入: 17人 クリック: 513回
- この商品を含むブログ (112件) を見る