Rubyにはちょっと特殊な演算子 ..(範囲演算子)が、条件式の中で フリップフロップ演算子 として動く場合があるらしい。
例:3〜5の範囲だけ「T」を表示する
10.times { |d| print d == 3..d == 5 ? "T" : "F" }
結果
FFFTTTFFFF
コードの解説
-
10.times { |d| ... }
0から9までの整数 d に対してブロックを10回実行します。 -
d == 3..d == 5
• 普通の範囲演算子のように見えますが、条件式の中で使うと フリップフロップ演算子 として働きます。
• フリップフロップのルール- 左側の条件(ここでは d == 3)が true になるまで false を返す
- 左側が true になったら true を返し続ける
- 右側の条件(ここでは d == 5)が true になったら false に戻る
動作のイメージ
| d | d == 3..d == 5 | 出力 |
|---|---|---|
| 0 | false | F |
| 1 | false | F |
| 2 | false | F |
| 3 | true | T |
| 4 | true | T |
| 5 | true | T |
| 6 | false | F |
| 7 | false | F |
| 8 | false | F |
| 9 | false | F |
まとめ
• .. が条件式の中にあると フリップフロップ演算子 として動く
• 「左条件が true になるまで OFF → 左条件が true になったら ON → 右条件で OFF」に戻る
• テキスト処理やループで 特定の範囲だけ処理したいとき に便利