Skip to main content
GameDev.net gamedev.net
🔒 Locked

Why do it the easy way?

Started by Madhed Feb 25, 2013 at 11:09 PM 11 replies 5.6k views
Original Post
Madhed
Madhed

Something I found in our javascript codebase


{
    //...
    isActive: function(active) {
        return (active ? true : false);
    }
    //...
}
Michael Tanczos
Michael Tanczos

Is it even possible to have *too* many ternary operators?

bool isActive = ((running && !done) ? (done || running) : !(running && done)) ? true : (1==2);

Madhed
Madhed

Very good ideas for reafctoring in this thread, keep em coming.

Alpha_ProgDes
Alpha_ProgDes

if (isActive == TRUE) {
    return 1;
}
else if (isActive == FALSE) {
    return 0;
}
 
Beginner in Game Development?  Read here. And read here.  
xycsoscyx
xycsoscyx

How about something akin to what I find in some of my companies legacy code:


ASSERT(isActive); // We should never be inactive so lets just assert in debug, it'll be fine in release

return TRUE;

Nercury
Nercury

You have it easy, you are not maintaining legacy PHP code.

This is direct copy-paste from code currently in production.

Guess what is it doing. Hint: in function name.


    function extract_where_from_join($on_condition) {
	$where_list = array();
	
	$anal_list = array('="' => '"', '= "' => '"', "='" => "'", "= '" => "'"); 
	
	$anal_pos = FALSE;
	$anal_end_pos = FALSE;
	$found_anal_from = FALSE;
	$found_anal_to = FALSE;
	foreach ($anal_list as $anal_from => $anal_to) {
	    $anal_pos = strpos($on_condition, $anal_from);
	    if ($anal_pos !== FALSE) {
		$found_anal_from = $anal_from;
		$anal_end_pos = strpos($on_condition, $anal_to, $anal_pos + strlen($anal_from));
		if ($anal_end_pos !== FALSE) {
		    $found_anal_to = $anal_to;
		    break;
		}
	    }
	}
	
	if ($anal_pos !== FALSE && $anal_end_pos !== FALSE) {
	    $anal_value = substr($on_condition, $anal_pos + strlen($found_anal_from), $anal_end_pos - $anal_pos - strlen($found_anal_from));
	    $condition = 'and';
	    $not_space_bw_pos = strbipos($on_condition, $condition, $anal_pos);
	    if ($not_space_bw_pos === FALSE) {
		$where_list[] = array(trim(substr($on_condition, 0, $anal_pos)), $anal_value);
		$on_condition = substr($on_condition, $anal_end_pos + strlen($found_anal_to));
		if ($on_condition === FALSE) {
		    $on_condition = 'TRUE';
		}
	    } else {
		$where_list[] = array(trim(substr($on_condition, $not_space_bw_pos + strlen($condition), $anal_pos - $not_space_bw_pos -strlen($condition))), $anal_value);
		$on_condition = substr($on_condition, 0, $not_space_bw_pos) . substr($on_condition, $anal_end_pos + strlen($found_anal_to));
		if ($on_condition === FALSE) {
		    $on_condition = 'TRUE';
		}
	    }
	}
	
	return array($where_list, $on_condition);
    }

It turns out this is parsing SQL join statement and extracting it's condition to be used elsewhere as "where" condition. Talking about easy way?

Michael Tanczos
Michael Tanczos

You have it easy, you are not maintaining legacy PHP code.

This is direct copy-paste from code currently in production.

Guess what is it doing. Hint: in function name.

8) Holy.. anal... You know, this would be quite an odd naming convention rule to walk into if you got hired by a company. (Use whatever variable names you want, as long as they include at least one porn industry term)

long long johnson = 69 & 0; // Initialize counter to zero

That code looks pretty ridiculous for what it does. I would think you could use a regex for this without much trouble.

Sik_the_hedgehog
Sik_the_hedgehog

Was gonna comment on the original topic, but what the— Abbreviations gone awry o_O And this is why you should avoid abbreviations except for a few well-estabilished ones...

As for the original topic, I find this a lot (and yes, with basic types, not classes which could have side-effects):


if (!blah)
   blah = true;

This could have easily done the job:


blah = true;
Don't pay much attention to "the hedgehog" in my nick, it's just because "Sik" was already taken =/ By the way, Sik is pronounced like seek, not like sick.
Nercury
Nercury


Was gonna comment on the original topic, but what the— Abbreviations gone awry o_O And this is why you should avoid abbreviations except for a few well-estabilished ones...

As for the original topic, I find this a lot (and yes, with basic types, not classes which could have side-effects):


if (!blah)
   blah = true;

This could have easily done the job:


blah = true;

Unless it is dynamically typed language (like javascript):


var blah = "hello";
if (!blah)
    blah = true;

// blah remains "hello"

blah = 15;
if (!blah)
    blah = true;

// blah remains 15

blah = 0;
if (!blah)
    blah = true;

// blah is true 

I hate dynamically typed languages for allowing this.

Sik_the_hedgehog
Sik_the_hedgehog

The examples of that I see are usually in C or C++ though...

Don't pay much attention to "the hedgehog" in my nick, it's just because "Sik" was already taken =/ By the way, Sik is pronounced like seek, not like sick.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.