バイオインフォ道場、くまぞうです。
Rubyが実行する式は、色々な演算を演算子で結合して作られています。よく使う演算子や注意点をチェックしましょう。
演算子について
プログラムで演算を行う場合に使う記号です。他のプログラム言語と同じような記号を使います。
演算の優先順位
演算子には優先順位があります。優先順位が高い方から解釈されます。「(括弧)」でくくると、優先順位を変更または明示化することができます。
a || b && c # 慣れていないと判りにくいかも。「b && c」が先に判断される。 (a || b) && c # 「(a || b)」が先に判断される。
よく使う演算子
比較・等値演算子と否定演算子
比較演算子は、2つの値を比較>
・<
・==
するときに使います。結果は、true
・false
を返します。否定は、「!」を併せて使います。一致しない場合は、!=
で評価します。正規表現のマッチング比較も=~
で評価し、!~
で否定の評価を行います。パターンマッチする場合は位置、マッチしなければnil
を返します。
(a = 10) > (b = 5) => true (a = 10) != (b = 5) => true
a = "hello world" a =~ /w.*/ => 6 #文字列の6番目(先頭は0番目)から一致
File.open("aaa.txt").each do |line| next if line =~ /^#/ # ファイルのコメント行を飛ばす等の用途で使う場合 # 処理 end
論理演算子とビット計算
論理演算は、真か偽かを判断するデータの演算です。if文などの条件文で良く使います。通常、true
・false
を返しますが、値を直接返すこともあります。(x && y)
の例。論理演算では、&&
・||
を使います。間違って&
・|
を使うとビット演算になるので注意が必要です。
x = 2 y = 3 puts "hello" if (x>1 && y>1) => hello
puts (x && y) => 3 puts (x || y) => 2
1 && 2 # 論理演算で値が返された場合 => 2 1 & 2 # ビット演算 => 0 printf("%04b", 1) # ビット演算(確認) => 0001 printf("%04b", 2) # ビット演算(確認) => 0010 (0b0001 & 0b0010) # ビット演算(確認) => 0
三項演算子
ある条件に対して、true
のときとfalse
のときの簡単な処理を一度に書くことができます。条件や対応する処理が複雑でなければ、if文よりも簡潔になることが多いです。
a = 11 result = (a > 10) ? "a > 10" : "a <= 10" puts result => a > 10
べき乗演算子と数学関数
べき乗演算は、「**」を使います。数学関数はMathモジュールで定義されています。多くの数学関数を使う場合は、Mathモジュールを予めインクルードしておくと良いです。
2 ** 3 => 8 2 ** 0.5 => 1.4142135623730951
Math.log(8, 2) => 3.0 include Math log(8, 2) => 3.0
代入
代入は、変数に初期値をセットしたり、変更したりするときに使います。
自己代入
代入の際、演算と代入を組合せて、簡潔に表現する方法です。+=
, ||=
、これらは使いやすくよく使われる自己代入だと思います。特に、||=
は、初期値のセットや値の更新を明示的に行えるので重宝するときがあります。尚、演算に関する部分は、他の演算子に置き換えても使うことができます。(+
,-
,*
,/
…)
a = 10 # a 10 a += 1 # a = a + 1 と同じ => 11 a %= 3 # a = a % 3 と同じ。%は割り算の余り => 2
a ||= 10 (aがnilの場合、10が初期値として代入される) => 10 a ||= 20 (すでにaはnilでないので、20は代入されない。10のまま。) => 10
多重代入
一度にたくさんの変数に値をセットするときに便利です。尚、「*(アスタリスク)」を使うと、配列を利用することができます。
a, b, c = 1, 2, 3 # a=1 b=2 c=3 a, b, c = 1, 2 # a=1 b=2 c=nil a, b, c = 1, 2, 3, 4 # a=1 b=2 c=3
a, *b = 1, 2, 3 # a=1 b=[2, 3] a, *b, c = 1, 2, 3, 4 # a=1 b=[2, 3] c=4