質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

3回答

4500閲覧

Ruby 論理演算and orと&&と||の違いについて

takuya_126

総合スコア18

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2014/11/23 01:40

Ruby初心者です。
and or && ||のこれらの違いはなんなのでしょうか?
違いを教えていただけないでしょうか?
宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

and, or, &&, || の差については 他の回答に詳しいです。

この回答では コーディング規約の点からの情報を示します。

rubocop https://github.com/bbatsov/rubocop では 標準設定では and or の使用は警告が出ます。

$ cat sample.rb a = true b = false puts '1' if a and b puts '2' if a && b $ rubocop sample.rb Inspecting 1 file C Offenses: sample.rb:3:15: C: Use && instead of and. puts '1' if a and b ^^^ 1 file inspected, 1 offense detected

and の代わりに && を使え と警告がでています。

投稿2014/11/24 08:33

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

優先度以外は同じです。
and or は、代入やメソッド呼び出しの引数の結合より、優先度が低いので、ringさんの例は、
p 5 and 10 は、(p(5)) and 10 と書くとよりわかりやすいかと思います。

また、p (5 and 10) は、pの直後の空白が肝で、空白の無いp(5 and 10) はエラーです。
前者の括弧は演算の優先度を示すための括弧、後者の括弧はメソッド呼び出しの引数をくくる括弧です。
後者の場合、引数を区切るカンマよりandの優先度が低いので、引数に出来ないため。
p((5 and 10)) はOK。外側の括弧がメソッド呼び出しの引数をくくる括弧、内側の括弧が演算の優先度を示す括弧です。

このあたり、and or not を使うと考慮点が多い、また、思わぬバグを生む可能性があると言うことで、コーディングルールで、and or not を禁止して && || ! だけを使うようにしている所もあるようです。
それはそれでありだと思います。

私は、and or not は構文の一部だというように、if/unless 等の条件部分の直下だけで使っています。(むしろ、条件部分の直下では && || ! は使わない)
代入や、メソッド呼び出しの引数では and or not は使わない。

あと、&& は || より優先度が高いが、and と or は同じ優先度というのも、and or を使うなら忘れてはいけません。

投稿2014/11/24 06:43

otn

総合スコア85630

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

大きく2つあります。
&& ||の方がand orよりも優先度が高いということ(代入演算子よりも演算子の優先度が低いこと)。
もうひとつ、両者の違いは、自己代入ができないこと、
などがあります。

例えば、サンプルです。

p 5 && 10 # p (5 && 10)と同じで、10が出力されます。

p 5 and 10 # p (5) and 10と同じで、5が出力されます。

前者は論理積の結果がpに渡されていますが、
後者ではpの実行結果と10の論理積が渡されているということです。

後者を&&と同じ結果にしようとするのであれば、
p (5 and 10)というようにすればできます。

投稿2014/11/23 08:48

ringo

総合スコア170

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問