1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Ruby silver】範囲式 フリップフロップ演算子

Last updated at Posted at 2021-10-31

次のコードを実行するとどうなりますか。 

10.times{|d| print d == 3..d == 5 ? "T" : "F" }

解説文

d == 3..d == 5の部分は条件式に範囲式を記述しています。
この式は、フリップフロップ回路のように一時的に真偽を保持するような挙動をとります。
詳細は、Rubyリファレンスに詳しい説明がありますのでそちらを参照してください。

https://docs.ruby-lang.org/ja/latest/class/Range.html
初めて見た時に混乱しました。 どうゆう順番で評価するか整理して考える必要があったのでまとめます。

⑴Rangeの復習

# ..の場合
a = (1..5).to_a
=> [1, 2, 3, 4, 5]

# ...の場合
a = (1...5).to_a
=> [1, 2, 3, 4]

👆
..の場合は5を含む1〜5の範囲になる。
...の場合は4.9999...までは対象になるが5は範囲に含まない。整数で考えると1〜4が範囲になる。

ひとつずつ崩して考えて理解する
10.times
{|d| print d == 3..d == 5 ? "T" : "F" }

10.times
0..9の範囲を考える => 0123456789

(d == 3)..(d == 5)
dが3〜5の時に(わかりやすく括弧で囲いました。)

? "T" : "F"
条件式:trueの場合"T"を出力、falseの場合は"F"を出力。
【補足】
三項演算子: 条件式 A ? 式 B : 式 C
条件式 A が真の時は式 B が実行され、偽の時は式 C が実行される。

0123456789
345がTrueのためTが出力される

結果としてFFFTTTFFFFが出力される

ソニックガーデンjnchitoさんの記事:https://qiita.com/jnchito/items/e7aa147e340311e94a4d その他参考解説:https://www.yokoyan.net/entry/2019/07/26/224946
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?