はじめに
Ruby Silverの学習ログです。現在、RExを使って学習しています。
わからなかったコード
こういう問題があり、実行結果が全くわかりませんでした。
3項演算子の条件の、d == 3..d == 5
が意味不明です。3..d
ってなんだ。Rangeなのか??
# 24.rb 10.times{|d| print d == 3..d == 5 ? "T" : "F" }
書いてある意味もわからず、ググることも困難でしたが、Gitpodで実行するとflip-flopは非推奨である、という警告メッセージが出ました。flip-flopって何ぞや。ちなみに、私のGitpodの環境はRuby2.6です。
$ ruby 24.rb 24.rb:1: warning: flip-flop is deprecated FFFTTTFFFF
そもそも、なんでこの出力結果になるのかが意味がわかりません。
Flip-flop演算子とは
条件文を .. で結んで、最初の条件が満たされてから次の条件が満たされるまで true を返します。
なるほど。d == 3
でtrue
が返された後に、d == 5
が満たされるまでtrue
を返すということなんですね。なので、d = 3
,d = 4
,d = 5
の間はT
になるようです。
d == 3..d == 5 ? "T" : "F"
〈状態〉を保持して,それによって真偽が変わるんだろうけど,誰が状態を持ってんの? ワケわからーん!
激しく同意です。ワケわかめ。
Ruby3から廃止されるらしい
フリップフロップは Ruby 3 で廃止されることが決まったそうです(Ruby 2.6 では警告)。
matz が消したいと言ったので消してみた
— Yusuke Endoh (@mametter) June 15, 2018
まとめ
Flip Flop演算子、とても勉強になりました。Ruby2.6が警告を出してくれなかったら絶対理解できなかったと思います。Ruby3から廃止されるとのことなので、本当に試験合格のためだけに理解する事になりそうです。