静岡理工科大学 菅沼ホーム Ruby 目次 索引

演算子

  1. 演算子の種類
  2. 代入
  3. 範囲式
  4. 条件演算子

  1. 演算子の種類

      Ruby には以下にあげる演算子があります.なお,最初にあげた演算子ほど優先順位が高い演算子です.

    演算子 使用目的
    :: クラス内部の定数などの参照  例: Test::Const
    [] 配列要素などの参照  例: x[2]
    +(単項) 数値の符号
    ! 論理否定
    ~ ビット演算子(否定)
    ** べき乗  例: 2**0.5
    -(単項) 数値の符号
    * 乗算など
    / 除算
    % 余り演算など
    + 加算など
    - 減算など
    << ビット演算子(左シフト)など
    >> ビット演算子(右シフト)など
    & ビット演算子(論理積)など
    | ビット演算子(論理和)など
    ^ ビット演算子(排他的論理和)など
    > 比較演算子
    >= 比較演算子
    < 比較演算子
    <= 比較演算子
    <=> 比較を行い,正,0,負の判定など
    == 比較演算子
    === クラス又はそのサブクラスのインスタンスであるか否かの比較など
    != 比較演算子
    =~ 正規表現とのマッチ
    !~ 正規表現にマッチする場合に false,マッチしない場合に true
    && 論理積
    || 論理和
    .. 範囲式
    ... 範囲式
    ?: 条件演算子
    = 代入
    not 論理否定
    and 論理積
    or 論理和

      ほとんどの演算子は,特別な形式のメソッド呼び出しですので再定義(オーバーロード)可能です.しかし,一部のものは言語に組み込まれているため再定義できません.
  2. 代入

      例えば,

    x = x + 5

    のような式は

    x += 5

    のように表現することができます.このような代入を,自己代入と呼びます.自己代入が可能な演算子には以下に示すようなものがあります.
    +, -, *, /, %, **, &, |, ^, <<, >>, &&, ||
      多重代入は,複数の式または配列から同時に代入を行う方法です.左辺の式が一つしか与えられなかった場合,式を評価した値は配列に変換されて,右辺の各要素が左辺のそれぞれの式に代入されます.左辺の要素の数よりも右辺の要素の数の方が多い場合には,余った要素は無視されます.右辺の要素が足りない場合には,対応する要素の無い左辺には nil が代入されます.

      左辺の最後の式の直前に * がついていると,対応する左辺のない余った要素が,その式に配列として代入されます.余った要素が無い時には空の配列が代入されます.また,右辺の最後の式の直前に * がついていると,その式は配列として,各要素に分割されます.

      下に,以上述べたことに関するプログラム例を示します.
    a, b, c = 1, 2, 3
    printf "a = %d, b = %d, c = %d\n", a, b, c
    a = 1, 2, 3
    printf "a[0] = %d, a[1] = %d, a[2] = %d\n", a[0], a[1], a[2]
    a, b = 1, 2, 3
    printf "a = %d, b = %d\n", a, b
    a, b, c = 1, 2
    printf "a = %d, b = %d, c = %d\n", a, b, c
    a, *b = 1, 2, 3
    printf "a = %d, b[0] = %d, b[1] = %d\n", a, b[0], b[1]
    x = [1, 2, 3]
    a, b, c = 5, x
    p a
    p b
    p c
    a, b, c = 5, *x
    printf "a = %d, b = %d, c = %d\n", a, b, c
    		
    (出力)
    a = 1, b = 2, c = 3
    a[0] = 1, a[1] = 2, a[2] = 3
    a = 1, b = 2
    a = 1, b = 2, c = 0
    a = 1, b[0] = 2, b[1] = 3
    5
    [1, 2, 3]
    nil
    a = 5, b = 1, c = 2
    		
  3. 範囲式

      範囲式は,演算子 ..,または,... を使用して生成され,Range クラスのインスタンスです... 演算子によって生成された範囲オブジェクトは終端を含み,... 演算子によって生成された範囲オブジェクトは終端を含みません.範囲式で指定する式は,互いに演算子 <=> で比較できる必要があります.また,次の数値または文字列を返すメソッドである Integer クラスの succ,または,String クラスの succ などのメソッドを実行できるものでなければいけません.枠内に示すプログラムは,範囲式を使用した例であり,下に示すのがその出力結果です.
     1 2 3
     aa ab ac
    		
    for i in 1 .. 3
    	printf " %d", i
    end
    printf"\n"
    for k in "aa" .. "ac"
    	printf " %s", k
    end
    printf"\n"
    		
  4. 条件演算子

      条件演算子は,

    式1 ? 式2 : 式3

    のように記述され 式1 が真であれば 式2,偽であれば 式3 を返します.例えば,

    a = (b > 0) ? 1 : 2

    のように記述した場合,b が正の時は 1,0 以下の時は 2 が,変数 a に代入されます.

静岡理工科大学 菅沼ホーム Ruby 目次 索引