return value optimization
-
I was reading some of the legacy code that is being used by one of our applications. there are some .js files which are meant to be used by new developments so that we dont have to "reinvent the wheel" (thats what we have been told) I opened the first file and first function and i saw
function somefucntion()
{
.
.
.
if (!flag)
{
retVal = false;
return false;
}retVal = true; return true;
}
What the heck? Is this some kind of javascript return value optimization that I am unaware of because i think i can simply replace these lines with
return flag;
P.S. even after pointing in out I am not allowed to change is as we are not allowed to change this code as "it might break something" (WT Elephant?)Rahul Rajat Singh wrote:
"it might break something" (WT Elephant?)
Yes it might break original coder's heart :laugh: I once saw this in production code: :laugh:
bool func(bool check)
{
if(check)
{
if(check)
{
//Double check to be 100% sure
}
}
} -
Rahul Rajat Singh wrote:
"it might break something" (WT Elephant?)
Yes it might break original coder's heart :laugh: I once saw this in production code: :laugh:
bool func(bool check)
{
if(check)
{
if(check)
{
//Double check to be 100% sure
}
}
}The comment is wrong: It must be 200% ;)
-
The comment is wrong: It must be 200% ;)
yes indeed :laugh::rose:
-
I was reading some of the legacy code that is being used by one of our applications. there are some .js files which are meant to be used by new developments so that we dont have to "reinvent the wheel" (thats what we have been told) I opened the first file and first function and i saw
function somefucntion()
{
.
.
.
if (!flag)
{
retVal = false;
return false;
}retVal = true; return true;
}
What the heck? Is this some kind of javascript return value optimization that I am unaware of because i think i can simply replace these lines with
return flag;
P.S. even after pointing in out I am not allowed to change is as we are not allowed to change this code as "it might break something" (WT Elephant?) -
I was reading some of the legacy code that is being used by one of our applications. there are some .js files which are meant to be used by new developments so that we dont have to "reinvent the wheel" (thats what we have been told) I opened the first file and first function and i saw
function somefucntion()
{
.
.
.
if (!flag)
{
retVal = false;
return false;
}retVal = true; return true;
}
What the heck? Is this some kind of javascript return value optimization that I am unaware of because i think i can simply replace these lines with
return flag;
P.S. even after pointing in out I am not allowed to change is as we are not allowed to change this code as "it might break something" (WT Elephant?)but the better code would be if(flag) //skipping creating the ! result return true; return false; [edit] i thought it is better :))))))))))))))))))))))))))))))))))))) [/edit]
-
but the better code would be if(flag) //skipping creating the ! result return true; return false; [edit] i thought it is better :))))))))))))))))))))))))))))))))))))) [/edit]
-
but the better code would be if(flag) //skipping creating the ! result return true; return false; [edit] i thought it is better :))))))))))))))))))))))))))))))))))))) [/edit]
IMHO,
return flag;
is still better than this. -
IMHO,
return flag;
is still better than this.oh fuck, i didnt notice the stupidity :))))) sorry guys
-
oh fuck, i didnt notice the stupidity :))))) sorry guys
Its ok. If only this realization would have came to the original developer of this code :-)
-
Rahul Rajat Singh wrote:
"it might break something" (WT Elephant?)
Yes it might break original coder's heart :laugh: I once saw this in production code: :laugh:
bool func(bool check)
{
if(check)
{
if(check)
{
//Double check to be 100% sure
}
}
}I guess this coder had seen the double check synchronisation pattern, e.g.
X getSynchronisedSingleCopyOfX(){
if(x == null){
lock(this){
if(x == null) x = new X();
}
}
return x;
}... (commonly used in singleton instantiation) and didn't understand what the real benefit of the double check in that case was. Or maybe he was just an idiot :-\
-
I was reading some of the legacy code that is being used by one of our applications. there are some .js files which are meant to be used by new developments so that we dont have to "reinvent the wheel" (thats what we have been told) I opened the first file and first function and i saw
function somefucntion()
{
.
.
.
if (!flag)
{
retVal = false;
return false;
}retVal = true; return true;
}
What the heck? Is this some kind of javascript return value optimization that I am unaware of because i think i can simply replace these lines with
return flag;
P.S. even after pointing in out I am not allowed to change is as we are not allowed to change this code as "it might break something" (WT Elephant?)Yes, you must not change the sacred elephant code or you will anger the coding spirits. ;) If they fear making changes to the code then they need unit tests to prove that the code still works after changes. Also, if the code is so brittle that it may break after a small improvement then it needs reviewed and replaced with better code.
Just because the code works, it doesn't mean that it is good code.
-
Rahul Rajat Singh wrote:
"it might break something" (WT Elephant?)
Yes it might break original coder's heart :laugh: I once saw this in production code: :laugh:
bool func(bool check)
{
if(check)
{
if(check)
{
//Double check to be 100% sure
}
}
}haah ai was laughing for about a minute, i remember now i was programming in c++ and i received the following message:"suspicious pointer conversion"
-
Actually,
return flag
could be wrong.
flag
could be a non-Boolean value (e.g.0
or""
or [not so well known so a major gotcha]'\n'
which have a Boolean equivalent offalse
; whereas most other values have a Boolean equivalent oftrue
). So, to returnfalse
for! flag
andtrue
forflag
, you should usereturn ! ! flag;
. This is a useful trick: the 2nd
!
converts
flag
(in this case) to a Boolean and negates it (true
->false
andfalse
->true
) then the 1st!
negates it back to what its Boolean equivalent was.
-
Actually,
return flag
could be wrong.
flag
could be a non-Boolean value (e.g.0
or""
or [not so well known so a major gotcha]'\n'
which have a Boolean equivalent offalse
; whereas most other values have a Boolean equivalent oftrue
). So, to returnfalse
for! flag
andtrue
forflag
, you should usereturn ! ! flag;
. This is a useful trick: the 2nd
!
converts
flag
(in this case) to a Boolean and negates it (true
->false
andfalse
->true
) then the 1st!
negates it back to what its Boolean equivalent was.
-
Good point, although using a variable name of 'flag' for something which wasn't a boolean would be deserving of headline mention in this forum! Can't you just cast to boolean instead of using !!?
BobJanova wrote:
Can't you just cast to boolean instead of using !!?
Yes, you could. Casting could be done using
return Boolean(flag);
Note that
return new Boolean(flag);
would return a Boolean object whereas without the
new
keyword, you'd be casting to a Boolean primitive. Greater clarity could be effected by using the triadic operator:return flag ? true : false;
or you could use short circuiting, viz
return flag && true;
but using
! ! flag
is more succinct. (I noticed yesterday a piece of jQuery that used!1
forfalse
- I wouldn't go that far in obfuscation).