nevan king
nevan king

Reputation: 113747

Set a BOOL right after checking it

I'm working through someone else's codebase and there are several lines like this:

if (self.aBooleanProperty) {
    self.aBooleanProperty = YES;
    // Do some stuff
}

Is there any point to setting it to YES right after checking it? Is there something I'm missing here?

Upvotes: 4

Views: 148

Answers (4)

bbum
bbum

Reputation: 162712

if (self.aBooleanProperty) {
    self.aBooleanProperty = YES;
    // Do some stuff
}

In properly written code, you aren't missing anything and that setter line increases the billable lines of code by one with a no-op.

There are two reasons, though, that this could be done for misguided reasons.

As @HotLicks said, there may be side effects to the setter that might need to be triggered. But they should have been triggered on set unless the developer had the misguided notion of setting the ivar directly everywhere and then using the above to coalesce the cost of setting to one spot. But that'd be a remarkably fragile and silly thing to do.

The other reason is because, traditionally, Objective-C's BOOL is a glorified char. Only it isn't so glorified. Thus, comparing a BOOL to YES is actually dangerous because YES has an explicit value.

BOOL mmmmmK = 2;  // this is valid

if (mmmmmK == YES) { /* this won't execute */ } 

Sort of like when climbing a cliff and something starts falling, you don't yell "bottle", "shoe", "pebble", or "prosthetic limb", but you always yell ROCK.

So, maybe the developer was thinking of normalizing the affirmative with an explicit YES. Again, quite doubtful and, even if that is the case, then it should raise suspicion about the quality of the rest of the codebase.

Ouch.

Upvotes: 7

Lithu T.V
Lithu T.V

Reputation: 20021

if

 self.aBooleanProperty = YES;

is included in the braces,it is not needed and if it is

 self.aBooleanProperty = NO;

is included ,then it is logical

Upvotes: 0

Sulthan
Sulthan

Reputation: 130092

This is difficult to tell without having more code. I think everybody will agree the code appears to be wrong, however, what we are seeing is an obj-c property - the previous programmer could do some "clever" thing, e.g. it's possible that the getter of aBooleanProperty sets itself to NO when you call it.

Before modifying the code, check the getters. This reminds me of schrödinbug

Upvotes: 2

Ahmed Z.
Ahmed Z.

Reputation: 2337

I think the person miswrote YES, instead should've written NO as it already is YES when it checked in the condition. Or otherwise there isne any point to that line.

Upvotes: 1

Related Questions