Infosys strikes again
-
One of the iOS applications I support at work contains a nice little method whose sole responsibility is to create and display an alert. It's short and clean and serves a single purpose, taking no parameters and returning void:
- (void)showFooAlertView
{
// Setup and display code
...
...
}Today one of the offshore devs submits a pull request and changes the method to this:
- (BOOL)showFooAlertView:(BOOL)shouldShowAlertView
{
BOOL shouldShow = NO;
if (shouldShowAlertView)
{
// Setup and display code
...
...
shouldShow = YES;
}
return shouldShow;
}That's right. Now you can call a method with a single clear purpose and at the same time tell it not to perform its single clear purpose, and as a bonus it will even tell you what you told it to do. I was naturally curious as to the value added by this modification. When I asked I was informed that this was done to "increase readability" and "make the method understandable to everyone".
-
@Smitty said:
I was informed that this was done to "increase readability" and "make the method understandable to everyone"
Mission accomplished, then, because I understand it and I've just had to read it three or four times to make that true.
I didn't have to read the old version anywhere near as many times to achieve the same end, so it must have had lower readability.
-
To be honest, it does do a conversion to BOOL as well. If you manage to somehow pass it something like @"YES", NULL or -3.14, it will still return just YES or NO. That's so wonderful.
-
Not only that, but if you pass it something that evaluates to false, it won't do anything but that conversion. This gives the coder the flexibility to re-use this code for a much wider range of tasks than that envisioned by the impoverished design it replaces. It's win-win!
-
Wait a minute — what sort of alert are we talking about, that has no parameters of any kind?
-
@Daniel Beardsmore said:
Wait a minute — what sort of alert are we talking about, that has no parameters of any kind?
A FooAlert, obviously. I buttume that all the information needed to show the alert is implied by the type of alert; therefore, no parameters are needed.