2013-07-27 19 views
9

truefalseの間で変数を切り替える最も良い方法は何ですか?ブール変数を切り替える最も良い方法は何ですか?

foo = false 

と実行します:

foo = foo.! 

私はトグルするたびに明白な方法は、変数fooを初期化することです。しかし、これは変数名が長い場合には冗長になります。これを行う簡単な方法がありますか(構文砂糖、元のクラスなどを使用して)?特に、単一のメソッドを与えるだけでトグルする方法があるのだろうかと思います。

foo.some_method 
+6

'FOO。!'私見非常に醜いです。どうして 'foo =!foo'? – Hauleth

+0

@ŁukaszNiemierと合意するfoo =!fooもっとルビースタイルの方法 – CodeGroover

+0

私は '!'メソッドも知らなかった。 @ŁukaszNiemierの提案は、値がブール値ではない変数を取るために二重形式で使用され、ブール値に変換されるので、より典型的です。 'foo = 1; foo = !! foo; ' –

答えて

22

XOR演算子を使用できます。使用

foo ^= true 

foo = false 
foo ^= true # => true 
foo ^= true # => false 
+0

これはクールです。できます。 – sawa

+11

これは動作しますが、一般的な知識ではなく、多くの人があなたのコードに見られるときにこれを理解しません。他のプログラマーがあなたのコードを調べて管理する可能性がある場合は、 '!'で標準否定を使用するべきです。 –

+4

@ネイト私はそれが論理的な値(真/偽、または1/0)のトグルであることをあなたが本当に(あるいはそれが少し、 '1'である)少なくともビットツイダーの世界ではよく知られています。基本的なブール論理です。ソフトウェアエンジニアがすぐにそれを理解できなければ、私は懸念しています。 – lurker

関連する問題