プログラム言語っぽく書くべきか、自然言語っぽく書くべきか
rubyでは、makeというメソッドがあったときに
make(:breakfast)
と書くこともできるし、
make :breakfast
と書くこともできる。
好みの問題もあるけど、.eachとか.to_sを後ろにつなげたりして、()が必要不可欠なとき以外は、後者のように書くのがRubyなんじゃないかという気がする。どこかで見た「Rubyはソース自体がコメントである」といういささか極端な言葉の意味するところは、Rubyは自然言語に近いソースを記述できる、つまりソース自体が何をやっているのかを文章として物語るように記述できる、ということだと思うから。
多分JavaとかC++とかをバリバリにやってきた人は、rubyをはじめたときは迷わず前者を選ぶんじゃないかという気がするけど、郷に入れば郷に従え、ということでそんな人でも後者のように書くべきだと思う。
俺も最初は()を付けて書いてて、()をつけないのは気持ちが悪かったけど、RailsのActiveRecordに触れて完全に考えが変わったね。
class Company < ActiveRecord::Base has_many :employees end class Employee < ActiveRecord::Base belongs_to :company end
最初はこれがクラスメソッドということすらわからず、なにこの魔法、って感じだった。よくわかんないけど、オブジェクトの関係を簡潔に、わかりやすく書くことができる。美しいコードってこういうことじゃない?
この記述で何が起こっているのかrubyに触れる中でわかってきて、他にもいろんなrubyの側面を知って、なぜDHHはrubyを選んだのか改めて実感したね。これはPHPにはできない。同じものを書くとしたら、PHPは美しさにおいてrubyには勝てないと思う。
うわさによるとpythonはrubyと似ているらしいんだけど、どうなんだろうね。