💨
一日一処: 「時は金なり」をRubyで表現するとちゃんとした英語っぽくなって興奮する
時は金なり
前回は、JavaScriptで表現したが、JavaScriptだと、やたら記号が多かったりと、文章というには程遠い。だが、英文法に寄せることのできるRubyだと、もっと文章チックに表現ができる。
準備
class Time
def is(value)
value.class == Money
end
end
class Money
end
2つのクラスを用意した。Timeクラスには、isメソッドを追加し、引数として与えられたもののクラスがMoneyクラスだった場合、真を返す。
文章っぽくしたいので、sayメソッドも準備しておく。
def say(msg)
puts msg
end
英文っぽく
それぞれをインスタンス化し、以下のように利用すると、英文っぽく表現できた。
class Time
def is(value)
value.class == Money
end
end
class Money
end
def say(msg)
puts msg
end
time = Time.new
money = Money.new
say "Time is Money." if time.is money
# Time is Money.
しかし、say "Time is Money." if time.is money
を読んでいると、AはAである、のような文章になっていて、これもすこし面白い。
英文に寄せたとしても、やはり、邪魔になる記号が残ってしまう。これは仕方ないが、逆に、プログラムらしさを最大に引き出す方法として、こういうのもいいだろう。
演算子オーバーロード
class Time
def ==(value)
value.class == Money
end
end
# 省略
say "Time is Money." if time == money
Rubyでは、クラスにおいて、演算子オーバーロードが可能だ。そのため、==
を用いて、評価させることもできる。
Discussion
putsをsayに置き換えたいならaliasでもよさそう
意見ありがとうございます!
たしかにそうですね、
alias
の方が文字数もスッキリするので、そちらのほうが良かったかもしれません。