紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【Ruby Silver学習】Flip Flop演算子が全くわからなかった話

f:id:yokoyantech:20190609155931p:plain

はじめに

Ruby Silverの学習ログです。現在、RExを使って学習しています。

rex.libertyfish.co.jp

わからなかったコード

こういう問題があり、実行結果が全くわかりませんでした。 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 を返します。

qiita.com

なるほど。d == 3trueが返された後に、d == 5が満たされるまでtrueを返すということなんですね。なので、d = 3,d = 4,d = 5の間はTになるようです。

d == 3..d == 5 ? "T" : "F"

qiita.com

〈状態〉を保持して,それによって真偽が変わるんだろうけど,誰が状態を持ってんの? ワケわからーん!

激しく同意です。ワケわかめ。

Ruby3から廃止されるらしい

qiita.com

フリップフロップは Ruby 3 で廃止されることが決まったそうです(Ruby 2.6 では警告)。

まとめ

Flip Flop演算子、とても勉強になりました。Ruby2.6が警告を出してくれなかったら絶対理解できなかったと思います。Ruby3から廃止されるとのことなので、本当に試験合格のためだけに理解する事になりそうです。