今度は演算子について。
演算子は、+だとか-だとか*だとか色々あるけれど、全部を列挙するとこれくらいになる。演算子の優先度は表の上にあるほうが高くなる。
演算子 | 意味 |
:: | スコープ ModuleName::ClassNameのように使う |
[] | インデックス array[0]のように使う |
** | 累乗 2 ** 3 # 8になる |
+, -, !, ~ | 単項演算子 |
*, /, % | 乗算,割り算,剰余 |
+, - | 足し算, 引き算 |
<<, >> | 論理シフトとか |
& | ビットごとのAND |
|, ^ | ビットごとのOR, XOR |
>, >=, <, <= | 比較 |
==, ===, <=>, !=, =~, !~ | 等価, 不等など |
&& | 論理AND |
|| | 論理OR |
.., ... | 範囲演算子 |
= (含む+=, -=, *= ...) | 代入演算子 |
A ? B : C | 三項演算子 |
not | 論理否定 |
and, or | 論理AND, OR |
今までJavaやC++とかC#をやってきて見慣れないものもいくつかあるものの、大体見覚えのある演算子が並んでいる。
Ruby以外ではあまり見たこと無い演算子として、===, <=>がある。
===はcase文での比較のときにつかわれる演算子らしい。==ではないんだね。これによって正規表現と文字列の比較とかもcase文でうまいこといけるようになってるみたいだ。
<=>演算子は、左辺と右辺を比較して、等しかったら0, 左辺が小さかったら-1, 左辺が大きかったら1を返す演算子のようだ。
puts 1 <=> 2 # -1
puts 2 <=> 1 # 1
puts 1 <=> 1 # 0
ほかに珍しいものとしては、and or notなどがある。論理ANDとかという意味では珍しくないけど、andとorの優先順位が同じだったり、代入演算子と比べて優先度が低かったりと特徴的だ。
ここらへんは、どういったことがおきるのかTHREE=ONEさんのブログの以下の記事で書かれてる。
Ruby の論理演算子
演算子だけをとってみても奥が深そうだ。
因みに、演算子のうちのいくつかはメソッドとして呼び出せるみたいだ。
例えば+とかは、変数.+(引数)といった形で書いても動く。
NetBeans6.5のRubyエディタでは、演算子をメソッドとして呼び出すような補間はCtrl+Spaceをしても出てこなかった。
コード補間のリストには+とか-は出てこなかった
まぁ実質問題はない!