動的型言語と言っても in Ruby

by tanabe on December 14, 2005

ある nakagami の日記のnakagamiさんがPerl/PHP/Pythonを例に動的型付けの話を書かれていました

同じネタをRubyでなぞってみます。

5 / 2
=> 2

5.0 / 2
=> 2.5

"5" / 2
=>NoMethodError: undefined method `/' for "5":String

うーん、美しい。背景のロジックが明快なのは落ち着きますね。

一方で、5 / 2なんだから、当然2.5だろう、という算数として当然の結果が返ってくる方が親切だという気持ちも分かる気はします。ただ、私もPython/Rubyスタイルの方が好みです。

ちなみに、5は整数型を表すクラス(厳密にはFixnum)から作成されたインスタンスで、5.0はFloatを表すクラス(Float)から作成されたインスタンスです。Rubyでは演算子もクラスのメソッドとして定義されている("5 / 2"は"5./(2)"と同義)ので、「5 / 2」はあくまで整数の結果を返し、「5.0 / 2」はあくまでFloatで結果を返すわけです。

プログラミング言語の型についての話は、Rubyまつもとさんの「まつもと直伝 プログラミングのオキテ 第4回」がオススメです。

※ ちなみに -5 / 2 は -3 を返します。