関係演算子

広告

if文などの条件分岐の時には条件式の内容が真か偽かによって処理を分けます。条件式には「xxxと等しい」とか「xxxよりも大きい」などを指定することになります。この条件式の中で使用されるのが関係演算子(比較演算子とも言います)です。

まずはRubyで用意されている関係演算子の種類を確認します。

演算子記述例意味
==a == bbがaに等しい
!=a != bbがaに等しくない
>a > bbよりaが大きい
>=a >= bbよりaが大きいか等しい
<a < bbよりaが小さい
<=a <= bbよりaが小さいか等しい

関係演算子は実際には左辺側のオブジェクトのメソッドです。StringクラスやIntegerクラス、Floatクラスで定義されています。

左辺と右辺のオブジェクトが持つ数値や文字列を比較し等しいか等しく無いか、また大きいか小さいかなどを比較できます。(オブジェクトそのものが同一かどうかを比較するわけではありません)。

左辺 演算子 右辺

比較した結果として真(true)または偽(false)を返します。

等しいかどうかの比較

演算子の左辺と右辺が等しいかどうかを比較するには「==」演算子を使用します。

num = 18
if num == 20 then
  print("num は 20 と等しい")
end

val = "Red"
redcolor = "Red"
if val == redcolor then
  print("col は Red です")
end

まず変数「num」に代入されている数値と数値の「20」を比較しています。数値の値が異なるため条件式は偽(false)です。また次に変数「val」に代入されている文字列と変数「redcolor」に代入されている文字列が比較されます。同じ文字列ですので条件式は真(true)です。

文字列が比較されている時、オブジェクトとオブジェクトが同じかどうかを比較しているわけではありません。文字列オブジェクトが持つ文字の集まりが同じかどうかを比較しています。数値オブジェクトも同じですが、数値オブジェクトの場合には数値が同じ場合には全て同じオブジェクトとなります。

次に等しく無いかどうかを比較するには「!=」演算子を使用します。

num = 18
if num != 20 then
  print("num は 20 と違います")
end

val = "Red"
redcolor = "Red"
if val != redcolor then
  print("col は Red と違います")
end

変数「num」に代入されている数値と数値の「20」を比較しています。数値の値が異なるため条件式は真(true)です。また次に変数「val」に代入されている文字列と変数「redcolor」に代入されている文字列が比較されます。同じ文字列ですので条件式は偽(false)です。

大きいかどうかの比較

演算子の左辺と右辺の大きさを比較するには「>」「>=」「<」「<=」を使用します

num = 18
if num > 20 then
  print("num は 20 より大きい")
end

val = "Jan"
if val > "Feb" then
  print("Jan は Feb より大きい")
end

大きさを比較する場合、数値の場合は数値の大きさを比較します。文字列の場合は比較する2つの文字列をアルファベット順に並べて比較します。「a」は「b」よりも小さく「A」は「a」よりも小さいです。

上記の場合、変数「num」に代入されている数値と数値の「20」を比較しています。変数の値が「20」よりも小さいため条件式は偽(false)です。また次に変数「val」に代入されている文字列と「Feb」を比較しています。「J」は「F」よりも大きいですので条件式は真(true)です。

実際の例は省略しますが「<」演算子を使った場合は「>」演算子を使った場合と逆になります。左辺が右辺よりも小さい場合に真(true)となります。

「>=」や「<=」のように「=」が付く場合はそれぞれ「大きいか等しい」「小さいか等しい」場合に条件式が真(true)となります。

サンプルプログラム

では簡単なプログラムで確認して見ます。

test3-1.rb

#! ruby -Ku
require "kconv"

num = 18
if num == 20 then
  print(Kconv.tosjis("num は 20 と等しい¥n"))
end

val = "Red"
redcolor = "Red"
if val == redcolor then
  print(Kconv.tosjis("col は Red です¥n"))
end

if num != 20 then
  print(Kconv.tosjis("num は 20 と違います¥n"))
end

if val != redcolor then
  print(Kconv.tosjis("col は Red と違います¥n"))
end

num = 18
if num > 20 then
  print(Kconv.tosjis("num は20より大きい¥n"))
end

val = "Jan"
if val > "Feb" then
  print(Kconv.tosjis("Jan は Feb より大きい¥n"))
end

if val > "jan" then
  print(Kconv.tosjis("Jan は jan より大きい¥n"))
end

if num < 20 then
  print(Kconv.tosjis("num は20より小さい¥n"))
end

if val < "Feb" then
  print(Kconv.tosjis("Jan は Feb より小さい¥n"))
end

if val < "jan" then
  print(Kconv.tosjis("Jan は jan より小さい¥n"))
end

上記のプログラムを「test3-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。

関係演算子

( Written by Tatsuo Ikura )