Contents
Ruby –演算子~RUBY入門〜RUBYTUTORIAL〜
Rubyは多くの演算子をサポートしています。演算子は実際にはメソッド呼び出しです。たとえば、a + bは。+(b)と解釈され、変数aで参照されるオブジェクトの+メソッドがbを引数として呼び出されます。
各演算子(+ – * /%**&| ^ << >> && ||)には対応する形式の省略代入演算子(+ = – =など)があります。
Ruby算術する場合の演算子
変数aが10変数bが20の場合
ようは計算式のことです。実はみなさんが使っているプログラミングはすべて数字でできています。
1 | +加算 – 演算子の両側に値を追加します。 | a + b=30 |
2 | –減算 – 左オペランドから右オペランドを減算します。 | 答え10 |
3 | *乗算 – 演算子の両側の値を乗算します。 | a * b=200 |
4 | /除算 – 左オペランドを右オペランドで除算します。 | b / a=2 |
5 | %モジュラス – 左オペランドを右オペランドで除算し、余りを返します。 | b%=0 |
Ruby比較演算子
変数aが10変数bが20の場合
真偽(嘘かホントか)を問う演算になります。たとえば貯金が1000万になれば家を買う。それ以外は買わないは、条件式にあてはまりますね。
1 | ==2つのオペランドの値が等しいかどうかをチェックします。そうであれば、conditionがtrueになります。イコールですね | (a == b)は真ではない。
1000万ぴったりたまったら家を買おう(1001万はダメ 笑) |
2 | !=2つのオペランドの値が等しいかどうかをチェックし、値が等しくなければconditionがtrueになります。 | (a!= b)は真
900万は1000万ではない |
3 | >左オペランドの値が右オペランドの値より大きいかどうかをチェックし、そうであれば、条件が真となります。 | (a> b)は真ではない。
700万は1000万円ではない |
4 | <左オペランドの値が右オペランドの値より小さいかどうかをチェックし、そうであれば、条件が真となります。 | (a <b)は真
700万は1000万より大きい |
5 | > =左オペランドの値が右オペランドの値以上であるかどうかをチェックし、そうであれば、条件が真となります。 | (a> = b)は真ではない。 |
6 | <=左オペランドの値が右オペランドの値以下であるかどうかをチェックし、そうであれば、条件が真となります。 | (a <= b)は真 |
7 | <=>複合演算子。最初のオペランドが2番目の場合は0を返し、1番目のオペランドが2番目のオペランドより大きい場合は1を返し、1番目のオペランドが2番目のオペランドより小さい場合は-1を返します。 | (a <=> b)は-1を返します。 |
8 | ===case文のwhen節内での等価性のテストに使用されます。 | (1 … 10)=== 5は真を返します。 |
9 | .eql?受信側と引数が同じ型と等しい値を持つ場合はtrueです。
オブジェクトを比較したいときは、普通は
class Cat end cat1 = Cat.new cat2 = cat1 cat3 = Cat.new puts cat1.eql?(cat2) puts cat1.eql?(cat3) |
|
10 |
equal?常に,同じObjectかどうか,を調べるのに使います。自作のクラスでequal?をしてはいけません。 str1 = "hello" str2 = "hello" puts str1 == str2 puts str1.equal?(str2) true false 同じ車じゃないといけないよということです。ダイハツミラとスズキの軽はちがいますよ。 |
aObjがbObjの複製である場合、aObj == bObjは真であり、a.equal?bObjは偽であるが、a.equal?aObjは真である。 |
Ruby代入演算子
変数aが10変数bが20の場合
1 | =単純な代入演算子、右側のオペランドの値を左側のオペランドに代入します。 | c = a + bはa + bの値をcに代入する |
2 | + =AND代入演算子を追加し、左オペランドに右オペランドを追加し、その結果を左オペランドに代入します。 | c + = aはc = c + aと等価です。 |
3 | – =減算AND代入演算子は、左オペランドから右オペランドを減算し、その結果を左オペランドに代入します。 | c – = aはc = c – aと等価です |
4 | * =乗除算AND代入演算子は、左オペランドに右オペランドを乗算し、その結果を左オペランドに代入します。 | c * = aはc = c * aと等価です。 |
5 | / =除算AND代入演算子は、左オペランドを右オペランドで除算し、その結果を左オペランドに代入します。 | c / = aはc = c / aと等価です。 |
6 | %=モジュラスAND代入演算子は、2つのオペランドを使用してモジュラスをとり、その結果を左のオペランドに代入します。 | c%= aはc = c%aと等価です |
7 | ** =指数AND代入演算子は、演算子の指数演算を行い、左のオペランドに値を代入します。 | c ** = aはc = c ** aと等価です。 |
Ruby並列割り当て
Rubyは変数の並列割当てもサポートしています。これにより、1行のRubyコードで複数の変数を初期化することができます。例えば -
a = 15 b = 20 c = 30
これは、パラレル割当てを使用してより迅速に宣言することができます。
a, b, c = 15, 20, 30
パラレル割り当ては、2つの変数に保持されている値をスワップする場合にも便利です。
a, b = b, c
便利ですね
Rubyビット演算子
ビット単位の演算子はビット単位で動作し、ビット単位で実行します。
a = 60ならば、b = 13である。バイナリ形式では、次のようになります。
ビット演算子とは整数に対してビット単位で演算を行うための演算子です。Integerクラス(Fixnumクラス及びBignumクラス)のオブジェクトに対して使われます。ビット演算子には次のものが用意されています。
a = 0011 1100 b = 0000 1101 ------------------ a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011
次のBitwise演算子は、Ruby言語でサポートされています。
Sr.No. | オペレータと説明 | |
---|---|---|
1 | & バイナリAND演算子は、両方のオペランドに存在する場合、結果にビットをコピーします。1011 = 11 1110 = 14 ———— 1010 = 10 |
|
2 | |バイナリOR演算子は、いずれかのオペランドに存在する場合、ビットをコピーします。
1010 = 10 |
|
3 | ビットXORは演算子の左辺と右辺の同じ位置にあるビットを比較して、ビットの値が異なる場合にだけ「1」
1010 = 10
|
|
4 | 、ビットを反転させる効果があります。
0000000000001010 = 10 |
|
5 | <<バイナリ左シフト演算子。左オペランドの値は、右オペランドで指定されたビット数だけ左に移動します。
a << b 例として11を1ビット左へシフトした場合以下になる。 0000000000001011 = 11 |
|
6 | >>バイナリ右シフト演算子。左オペランドの値は、右オペランドで指定されたビット数だけ右に移動します。
a >> b 例として11を1ビット右へシフトした場合以下になる 0000000000001011 = 11 |
そもそも2進数がわかってますか?わからなければこちらへ
Ruby論理演算子
次の論理演算子はRuby言語でサポートされています
変数aが10変数bが20の場合
Sr.No. | オペレータと説明 | 例 |
---|---|---|
1 | & 論理AND演算子と呼ばれます。両方のオペランドが真の場合、条件は真となります。 | (a&b)は真です。 |
2 | or 論理OR演算子と呼ばれます。2つのオペランドのいずれかがゼロでない場合、条件は真となります。 | (aorb)は真です。 |
3 | &&論理AND演算子と呼ばれます。両方のオペランドがゼロでない場合、条件は真となります。 | (&& b)は真です。 |
4 | ||論理OR演算子と呼ばれます。2つのオペランドのいずれかがゼロでない場合、条件は真となります。 | (a || b)は真です。 |
5 | !論理NOT演算子と呼ばれる。オペランドの論理状態を反転するために使用します。条件が真であれば、論理NOT演算子は偽になります。 | !(a && b)はfalseです。 |
6 | not 論理NOT演算子と呼ばれる。オペランドの論理状態を反転するために使用します。条件が真であれば、論理NOT演算子は偽になります。 | not(a && b)はfalseです。 |
Ruby三項演算子
三項演算子と呼ばれる演算子がもう一つあります。最初に真または偽の値の式を評価し、評価の結果に応じて2つのステートメントの1つを実行します。条件付き演算子はこの構文を持ちます。
Sr.No. | オペレータと説明 | 例 |
---|---|---|
1 | ?:条件式 | 条件が真ならば?値X:
そうでなければ値Y |
Rubyレンジ演算子
Rubyのシーケンス範囲は、開始値、終了値、およびそれらの間の値の範囲からなる連続した値の範囲を作成するために使用されます。
Rubyでは、これらのシーケンスは ".."と "..."の範囲演算子を使用して作成されます。2ドット形式はインクルーシブ範囲を作成し、3ドット形式は指定された高い値を除外する範囲を作成します。
Sr.No. | オペレータと説明 | 例 |
---|---|---|
1 | ..始点から終点までの範囲を作成します。 | 1..10範囲を1〜10の範囲で作成します。 |
2 | …開始点から終了点までの範囲を排他的に作成します。 | 1〜10 1〜9の範囲を作成します。 |
Rubyのdefined?演算子
Rubyで変数が定義されているか確認するにはdefined?
を使用する。 defined?
は変数が定義されていなければnil
を返す。
使用法1
defined? variable # メソッドが定義されている場合はtrue
例えば
a = true
b = nil
defined? a #=> "local-variable"
defined? b #=> "local-variable"
defined? c #=> nil
使用法2
defined? method_call # メソッドが定義されている場合はtrue
例えば
defined? puts # => "method" defined? puts(bar) # => nil (barはここで定義されてません。) defined? unpack # => nil (ここでは定義されていません)
使用法3
# スーパーユーザーで呼び出すことができるメソッドが存在する場合はtrue
例えば
defined? super # => "super" (もしsuperをよびだせれば) defined? super # => nil (呼び出せなければ)
使用法4
defined? yield
#コードブロックが渡された場合はtrue
例えば
defined? yield # => "yield" (コードブロックを越せた場合) defined? yield # => nil (こせなかった場合)
ルビードット ” とダブルコロン “::”演算子
モジュールメソッドを呼び出すには、モジュール名の前にピリオドを付け、モジュール名と2つのコロンを使用して定数を参照します。
Rubyでは、クラスとメソッドも定数と見なされることを覚えておいてください。
:: Const_nameの接頭辞には、適切なクラスまたはモジュールオブジェクトを返す式を付ける必要があります。
接頭辞式を使用しない場合、デフォルトでメインのObjectクラスが使用されます。
ここに2つの例があります –
MR_COUNT = 0 # mainに定義された定数 Object class module Foo MR_COUNT = 0 ::MR_COUNT = 1 # グローバルカウントセット1 MR_COUNT = 2 # ローカルカウントセット1 end puts MR_COUNT # グローバルコンスタント puts Foo::MR_COUNT # ここはローカルコンスタント