計算機編程中,翻轉(flip-flop)運算符是指一種運算符,當第一個操作數的值變為真,則操作符的結果從假變為真;當第二個操作數的值變為真,則操作符的結果從真變為假。Perl語言[1]Ruby[2],以及sedawk[1]有這種運算符。

例子

編輯

下述Ruby代碼將打印4至6:

(1..10).each do |x|
  puts x if (x == 4 .. x == 6)
end

第一處".."是範圍運算符英語range operator,產生一個從1至10的整數枚舉。第二處".."是翻轉運算符。[3]注意,打印5時"x == 4"和"x== 6"都是假值。這是因為表達式記住了前一次循環時"x == 4"為真且"x == 6"為假。

隱患

編輯

翻轉運算符需要存儲其狀態。這使得其生命期(lifetime)對編程者難以把握,特別是在多線程或遞歸時使用包含翻轉運算符的代碼。 例如,Perl語言中每個翻轉運算符有自己的在所有線程中共享的狀態。[4]其他語言與之類似。

用一個雙參數的函數實現翻轉運算符,函數在不同的被調之間,需要保持其內部狀態。

參考文獻

編輯
  1. ^ 1.0 1.1 Perl operators and precedence. [2016-10-21]. (原始內容存檔於2012-07-17). 
  2. ^ Nithin Bekal. Flip Flop Operator in Ruby. 2014-11-21 [2022-02-18]. (原始內容存檔於2021-11-16). 
  3. ^ PyCon Australia Lightning talk: Flip Flop Operators (flip floperators). 2018-08-26 [2022-07-15]. (原始內容存檔於2022-02-18). 
  4. ^ Range Operator in Perl. 2020-08-16 [2022-02-18]. (原始內容存檔於2020-07-11).