Ruby 演算子

作成日: 2003-08-04
最終更新日:

Ruby と演算子

Ruby の演算子は、最近の言語で用意されている演算子をほぼ備えている。 しかし、他の言語の演算子と違うところもある。 ここでは Java と比較して、Ruby にあるもの、Ruby にないものを調べる。

Ruby にあって Java にない演算子

**

** はべき乗演算子である。例:2 ** 3 # => 8
** がべき乗であることを表すのは、Fortran 以来初めてみた。

<=>

基本的な比較演算子。 ほかの比較演算子はこの演算子を元に Comparable モジュールで定義されている。 左が大きければ 1, 等しければ0, 右が大きければ -1 を返すように作ることが期待されている。

===

特殊な等号演算子。 このメソッドは case 文での比較に用いられる。 デフォルトは == と同じ働きをするが、 この挙動はサブクラスで所属性のチェックを実現するため適宜再定義される。 たとえば、Range クラスで === が使われるとき、 対象オブジェクトが比較オブジェクトの範囲内に含まれている時に真を返す。

Ruby になくて Java にある演算子

++, --

C 言語以降、最近の言語には備わっている ++, -- は前置、後置ともにない。 Ruby の父であるまつもとさんが、意図的に用意しなかったという話をきいている。

>>>

ビットの右シフトで、符号ビットも含めて右シフトする演算子である。

==の意味

正規分布の分布関数の値(累積下側確率)を求めるスクリプトを書いた。 NormalDistribution.lower(x)というクラスメソッドで、x が 0.0の場合、 この関数の値は0.5になる。 その結果のテストに RubyUnit を使った。assert_equal で次のように書いた。

assert_equal("0.5", NormalDistribution.lower(0.0))

しかし、RubyUnitの結果は次のようになった。

(前略) in `raise_assertion_error' : expected : <0.5> but was : <0.5> (RUNIT::AssertionFailedError)
(後略)

賢明な読者の方々はおわかりだろう。assert_equalの第1引数が文字列であるのに対し、 第2引数が数値だ。これでは一致するはずがない。 左側の文字列を数値にして(単に引用符をはずす)再度試したところ、エラーは消えた。

さて、引数が0のときはいいが、0以外の時は近似値になる。

x = -1 のとき、0.15866
x = -2 のとき、0.02275
x = -3 のとき、0.00135

このような場合、近似的によいということを表すにはどうすればいいか。 少し考えないといけない。

まりんきょ学問所Rubyの浮き輪 > 演算子


MARUYAMA Satosi