Alex Rivera | Logout

What does !! mean in Objective-C

Asked 2009-11-11T21:50:26.480
10

I have this code:

- (BOOL)isConnected {
    return !!_sessionKey;
}

where _sessionKey is defined earlier as:

NSString* _sessionKey;

the code comes from the facebook-connect for iphone.

Since I am learning Objective-C by looking at code written by other people. The !! used in the isConnection function seems useless to me, or am I missing something? What does it do?

Edit
Report

1 Answer

18

The !! converts the result to either YES or NO.

Using !!x is an idiom from C. The result of this expression is:

  • !!x == 0 when x == 0 // x is zero
  • !!x == 1 when x != 0 // x is non-zero

At least in C, you can use any non-zero expression as a value which satisfies the condition of an if () or other conditional control flow. However, sometimes it is nice to know that the "true value" is represented by 1 rather than merely "non-zero".

In Objective-C, YES is defined as 1 rather than as "non-zero". Thus, in Objective-C, this C idiom becomes more useful.

Another way of putting it:

  • !!x == NO when x == NO
  • !!x == YES when x != NO
answered 2009-11-11T21:54:40.557

Your Answer