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

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

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

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

Q&A

解決済

2回答

428閲覧

Ruby && ||の戻り値の評価

encho

総合スコア182

Ruby

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

0グッド

0クリップ

投稿2020/05/08 11:39

#Ruby && ||の戻り値の評価について
プロを目指す人のためのRuby入門という書籍で学習を行っています。

Ruby

11&&2&&3 #=> 3 21&&nil&&3 #=>nil 31&&false&&3 #=>false 4 5nil||false #=>false 6false ||nil #=>nil 7nil||false||2||3 #=>2

以上のような式の評価に対してそれぞれ戻り値があります。
Rubyは式全体が真または偽であることが決定するまで左辺から順に式を評価する。
という記述の意味は理解できるのですが、

なぜtrueまたはfalse以外の戻り値になるのかが理解できていません。

初歩的な質問で申し訳ございませんが、
なにかアドバイスをいただけると幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

何故と言われても、そういう仕様であり、そういう仕様だと便利だからです。

例えば、「xnil(あるいはfalse)なら1を代入して、そうでなければそのまま」というケースは、

Ruby

1x ||= 1 2あるいは 3x = x || 1

と書けますが、これはこの仕様のおかげです。

&&||の結果が、常にtruefalse(真偽値が無い言語だと10)になる言語もあります(例えばCやPHP)。そういう言語だと、上記は、

C

1x = x ? x : 1; 2あるいは 3if(!x) x=1;

のように書かないといけません。まあ、これでも良いじゃないかと思うかも知れませんが。
そうコンパクトには代替できないケースもよくあります。

投稿2020/05/08 11:56

編集2020/05/08 11:57
otn

総合スコア84798

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

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

0

ベストアンサー

「Rubyは式全体が真または偽であることが決定するまで左辺から順に式を評価する。」ですか?
なんか、ちょっと違う気がします。

&& は 左辺が 偽 なら終了、真であったら右辺を評価
|| は 左辺が 真 なら終了 偽であったら右辺を評価

ですから、「式全体が」でもないし、、、、

で、「なぜtrueまたはfalse以外の戻り値になるのか」ですが、
rubyの文法として、 偽 は nil か false。それ以外は 真 とする
というのがあります。ですから 1&&2&&3 の 1も2も3も真です。

投稿2020/05/08 11:51

winterboum

総合スコア23401

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

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

encho

2020/05/08 13:07

&& は 左辺が 偽 なら終了、真であったら右辺を評価 || は 左辺が 真 なら終了 偽であったら右辺を評価 ここの説明の部分が分かりやすかったです。 確かに以上のことを考えるとそれぞれの戻り値の値に対しても理解ができました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問