Home JavaScript Function Design
Function Structure
If you have a single function that is very long, break it apart into smaller sub-functions. The definition of "very long" is vague, but often a function longer than 20-30 lines is pushing it.
If you try to describe the function's purpose and find yourself using the word "and" a lot, that probably means the function does too many things and should be split into sub-functions.
Boolean Zen
Don't ever test whether a boolean
value is ==
or
!=
to true
or false
.
if (x == true) { ... } else if (x != true) { ... }
if (x) { ... } else { ... }
If you have an if/else
statement that returns a boolean value based on a test, just directly return the test's result instead.
if (score1 == score2) { return true; } else { return false; }
return score1 == score2;
If/Else Usage
If/Else Branching Patterns
When using if/else
statements, properly choose between various if
and else
patterns depending on whether the conditions relate to one another. Avoid redundant or unnecessary if
tests.
if (grade >= 90) { alert("You got an A!"); } if (grade >= 80 && grade < 90) { alert("You got a B!"); } if (grade >= 70 && grade < 80) { alert("You got a C!"); } ...
if (grade >= 90) { alert("You got an A!"); } else if (grade >= 80) { alert("You got a B!"); } else if (grade >= 70) { alert("You got a C!"); } ...
If/Else Factoring
Move common code out of if/else
statements so that it is not repeated
(ie., minimize redundancy in your code).
if (x < y) { foo(); x++; alert("hi"); } else { foo(); y++; alert("hi"); }
foo(); if (x < y) { x++; } else { y++; } alert("hi");
Loop Usage
For Loops vs. While Loops
Use a for
loop when the number of repetitions is known (definite); use a
while
loop when the number of repetitions is unknown (indefinite).
// repeat exactly size/2 times for (let i = 0; i < size / 2; i++) { ... } // repeat until the user clicks OK while (!confirm("Are you sure?")) { ... }
Break and Continue
In general, you should avoid break
and continue
statements unless absolutely necessary.
In this class, you should never use these statements (it would be very unlikely you would write code for our assignments
in which using one of these would be proper style).
Anonymous Functions
Anonymous functions are useful and expressive in some cases where a function's name is meaningless and cumbersome, such as an initial window.onload
handler. But over-using anonymous functions leads to code that is too heavily nested and has too few names to guide the programmer, so over-use of anonymous functions should be avoided. In general, give names to your functions unless the name is truly useless and meaningless.
window.onload = function() { myButton.onclick = function() { setTimeout(function() { alert("hi!"); }, 1000); }; }
window.onload = function() { myButton.onclick = myButtonClick; } function myButtonClick() { setTimeout(displayMessage, 1000); } function displayHiMessage() { alert("hi!"); }