Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

多くのプログラミングでandまたは&&などの論理演算子が使えますが、Rubyではandと&&の両方が使えます。しかし、その機能は同じではありません。混在して使った場合、意図したとおり動作しないことがあります。

Rubyでは演算子の優先準備が決まっており、これを知らないとプログラムが作れません。今回は、andと&&の優先順位の違いから、Rubyらしい論理演算子の使い方について解説します。

この記事の結論
  • Rubyの論理演算子ではtureとfalseを扱う
  • Rubyの演算子には順序があり、&&は高くandは低い
  • Rubyではandの優先順位は=よりも低いので注意

論理演算子の基本

論理演算子とは、プログラミング言語の条件分岐などに使われるandやorなどの論理演算を指示するための演算子です。なお、この場合の論理とは、trueとfalseの2つの値のことです。

そして、tureとfalseの2つの値を扱い、否定(not)、論理和(or)、論理積(and)の3つの演算に使われるのが、論理演算子です。次から、Rubyの論理演算子の基本について解説します。

Rubyで使える論理演算子

論理演算子は、プログラム言語によっても違いますが、Rubyでは次の3つが使えます。

否定を表す「!」。使い方は「!a」で、aがtrueならfalseを返し、aがfalseならtrueを返します。

論理和を表す「||」。使い方は「a || b」で、aとbのどちらかがtrueならtrueを、両方がfalseならfalseを返します。

論理積を表す「&&」。使い方は「a && b」で、aとbの両方がtrueならtrueを、どちからがfalseならfalseを返します。

論理演算子&&の使用例

a = true
b = false
if a && !b then
  puts "a && !b = true"
end
if a || b then
  puts "a || b = true"
end

Rubyではandとorも使える

Rubyでは、先ほど説明した&&と||の他に、andとorも使えます。さらに、否定を表す!の代わりに、notで代用することも可能です。

andとorを使った例

a = true
b = false
if a && !b then
  puts "a && !b = true"
end
if a || b then
  puts "a || b = true"
end

&&とandは同じではない

上記のように、Rubyには、同じように使える2つの論理演算子があります。しかし、「&&」と「and」は、厳密には同じではありません。この違いを知らないで使ってしまうと、プログラムの不具合の原因になるので、注意が必要です。

なお、Rubyの公式サイトのマニュアルには、次のように紹介されています。

(ここから引用)
左辺を評価し、結果が偽であった場合はその値(つまり nil か false) を返します。左辺の評価結果が真であった場合には右辺を評価しその結果を返します。andは同じ働きをする優先順位の低い演算子です。

Rubyを学びたい方におすすめのスクールはこちら

Rubyにおける演算子の順序

多くのプログラム言語では、演算子の優先度が決められており、その順序で計算等を実施します。例えば、掛け算と足し算が混じった式を計算する場合、先に掛け算を計算し、その後、足し算を計算します。

そしてRubyにも、この演算子の順序が決められており、&&は優先度が高く、andは優先度が最低です。この違いについて解説します。

Rubyの演算子の優先順位

Rubyの演算子の優先順位は、次のように定義されています。

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

これを見てもらうと解るように、論理演算子で最も優先されるのは否定「!」です。そのため、それより低い「&&」や「||」と組み合わせた場合、先に「!」が演算されてから、次に「&&」や「||」が演算されます。

否定が先に適用される例

a && !b

この例では、先に否定の「!b」が演算され、次にその結果と「a」の「&&」が演算されますまた、notとandやorの関係も同じで、先にnotが演算され、次にandやorが演算されるのが理解できるでしょう。

優先度の違いにより&&とandの結果が違う

先ほど、Rubyには同じ論理積を表す「&&」と「and」の論理演算子があり、この2つの優先度は違います。特に、andとorは、代入を意味する=よりも優先度が低いことから、それが原因で演算結果が違ってしまうことがあります。次から、論理演算の結果が違ってしまう例を紹介します。

andの結果が代入されない

先ほどRubyの演算子の優先順位で紹介した演算子の優先順位を見てもらうと、andやorより上に「=」があります。そのため、「=」とandが同じステートメントに記述された場合、先に=が実行されてしまいます。

例えば、下記の論理演算子&&を使った例では、&&の演算結果が=によって代入されます。しかし、&&の代わりにandを使うと、優先順位が=より下なので、演算結果が代入されません。

論理演算子&&による演算結果を代入する例

val = true && false

この場合、valには、trueとfalseの論理積、つまりfalseが代入されます。

論理演算子andによる演算結果を代入する例
val = true and false

この例では、andより先に=が実行されるので、valにはtrueが代入され、その後にandが実行されます。

条件演算子で結果が異なる

先ほどRubyの演算子の優先順位で紹介した演算子の優先順位を見てもらうと、論理演算子の&&とandの間に、条件演算子があるのに気が付かれたでしょうか。もし、条件演算子で論理演算子の&&とandを使った場合、結果が違うことがあるので注意が必要です。

&&を使った条件演算子の例

v1 = 15
v2 = 20
flg = (v1 > 10) && (v2 > 10) ? "OK" : "NG"
puts flg

この例では、変数v1とv2を比較した結果が両方trueになるので、flgに”OK”が格納されます。

andを使った条件演算子の例

v1 = 15
v2 = 20
flg = (v1 > 10) and (v2 > 10) ? "OK" : "NG"
puts flg

先ほどと同じですが、&&の代わりにandを使ったことで、まず「flg = (v1 > 10)」が、次に「(v2 > 10) ? “OK” : “NG”」が実行され、最後にそのandが実行されます。その結果、flgに格納されるのはtrueです。このように、&&とandでは結果が違ってしまうので注意してください。

同じ結果にするなら括弧で囲む

多くのプログラム言語にも演算子の優先順位が決められており、優先度の低い演算を先にやりたい場合は、括弧で囲みます。そして、この書き方はRubyでも有効で、括弧があると、その中の演算を先に実行します。

例えば、先ほど、&&とandの結果が違っていた式は、次のように書くことで、andの演算を先に実行します。

括弧を使ったandの演算例

val = ( true and false )

この場合、括弧内のandの演算結果がfalseなので、valにはfalseが格納されます。
Rubyを学びたい方におすすめのスクールはこちら

まとめ

これまで解説したように、Rubyにおける&&とandは同じ論理積を演算する論理演算子ですが、他の演算子と組み合わせた場合、優先度の違いで結果が違ってしまいます。そのため、同じように使っていると、不具合の原因になるので注意してください。

ただし、括弧で囲むことで、同じ結果にすることは可能です。論理演算子の優先順位を正しく理解してRubyのプログラミングに活用してください。

また、Rubyについてもっと詳しく学びたい方は、ポテパンキャンプの利用を検討されてはいかがでしょうか。
Rubyを学びたい方におすすめのスクールはこちら

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。