LoginSignup
2
2

More than 5 years have passed since last update.

Ruby 演算子,真偽値

Last updated at Posted at 2019-02-28

動作環境はMacとなります。

比較演算子

演算子による値の比較
2つの値の大小と同じ値かを調べる方法

比較演算子の記号
※マークダウン方式の影響で、より大きいの記述がおかしくなってます。

より大きい > ⇦これ
= 以上
< より小さい
<= 以下
== 等しい
!= 等しくない


式が成り立つ場合 true
式が成り立たない場合falseを返す


irb#1(main):001:0> 1 < 2
=> true
irb#1(main):002:0> 1 <= 2
=> true
irb#1(main):003:0> 1 > 2
=> false
irb#1(main):004:0> 1 >= 2
=> false
irb#1(main):005:0> 1 == 2
=> false
irb#1(main):006:0> 1 != 2
=> true

演算子の優先順位

irb#1(main):007:0> 1.0 + 2.0 * 3.0 / 4.0 
=> 2.5
irb#1(main):008:0> (1.0 + 2.0) * 3.0 / 4.0 #()で優先順位を上げる
=> 2.25

高い ::
[]
+(単項) ! ~
**
-(単項)
* / %
+ -
<< >>
&
| ^
> >= < <=
<=> == === != =~ !~
&&
||
.. ...
?:(条件演算子)
=(+=, -= ... )
not
低い and or


数値と文字列は暗黙的に変換されない

数値と文字列を連結するとエラー

irb#1(main):009:0> 1 + "1"
TypeError: String can't be coerced into Integer
    from (irb#1):9:in `+'
    from (irb#1):9

文字列を数値に変換

irb#1(main):011:0> 1 + "1".to_i #整数クラスに変換
=> 2
irb#1(main):012:0> 1 + "1.1".to_f #浮動小数点クラスに変換
=> 2.1

出力された!


数値を文字列に変換

irb#1(main):015:0> num = 10
=> 10

irb#1(main):021:0> "Number name is " + num
TypeError: no implicit conversion of Integer into String
    from (irb#1):21:in `+'
    from (irb#1):21
#numが変数のため、わかりにくいが文字列と数値の足し算はエラー

irb#1(main):020:0> "Number name is " + num.to_s
=> "Number name is 10"

#数値を文字列に変換

出力された!


インクリメントとディクリメント

・インクリメント
数値に1を足す

・ディクリメント
数値から1を引く

他のプログラミング言語のように++や--で表すことができない点に注意!

irb#1(main):022:0> n = 1
=> 1
irb#1(main):023:0> n = n + 1
=> 2
irb#1(main):024:0> n += 1
=> 3
irb#1(main):025:0> n = n -  1
=> 2
irb#1(main):026:0> n -= 1
=> 1

#どちらの表記でも大丈夫だが、+=や-=で表した方がスマート

真偽値

Rubyでは、nilかfalseの場合は偽(false)
それ以外は真(true)

trueの例

  • trueそのもの・・・true
  • 全ての数値・・・1,1.5,2/3
  • 全ての文字列 ・・・"false","true",""(空文字)

論理演算子

&&や||で複数の条件の式を真偽値で返すことが可能になる。

論理積
&&(かつ)=全ての条件が真の場合trueを返す

論理和
||(または)=少なくとも一つの条件が当てはまれば真になり、trueを返す

and,or,not

&&,||,!とほぼ同じ役割
ただし計算の優先順位が異なるため、式に混在させないこと


irb(main):001:0> t1 = true
=> true
irb(main):002:0> t2 = true
=> true
irb(main):003:0> f1 = false
=> false
irb(main):004:0> f2 = false
=> false
irb(main):005:0> t1 and t2
=> true
irb(main):006:0> t1 and f1
=> false
irb(main):007:0> t1 or t2
=> true
irb(main):008:0> f1 or f2
=> false
irb(main):009:0> !t1 || t1 #trueとfalse
=> true

#混在させると非常にわかりにくくなるため注意
irb(main):010:0> not t1 || t1
=> false
irb(main):011:0> t1 || t2 && f1 #&&の方が優先順位が高いため、t2とf1の計算が先にされた後、t1との和が計算される。
=> true
irb(main):012:0> t1 or t2 and f1 #orとandの優先順位は等しいので、左から計算
=> false

#()で囲ったりわかりやすくすることは複数人で開発するときには欠かせないスキル
irb(main):013:0> (t1 || t2) && f1 
=> false

まとめ

リファレンスに書いてある優先順位が高いものと低いものを混在させると非常にわかりにくい。
また、優先順位を上げたいときは()でくくるなど、直感的でわかりやすいプログラムを書くことが重要。

シンプルに記述するように心がけよう!

参考文献

Ruby 2.6.0 リファレンスマニュアル 演算子式

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2