Computer programs are the most complicated things that humans make. They must be perfect, which is hard for us because humans are not perfect. Programming is thought to be a “head” activity, but there is a lot of “gut” involved. Indeed, it may be the gut that gives us the insight necessary for solving hard problems. But gut messes us up when it come to matters of style. The systems in our brains that make us vulnerable to advertising and propaganda also influence our programming styles. This talk looks systematically at the development of a programming style that specifically improves the reliability of programs. The examples are given in JavaScript, a language with an uncommonly large number of bad parts, but the principles are applicable to all programming languages.
30. Use elements of good
composition where
For example, use a space after
a comma, not before.
31. Use spaces to disambiguate
• No space between function name and (.
• One space between all other names and (.
• Wrong:
foo (bar);
return(a+b);
if(a=== 0) {…}
function foo (b) {…}
function(x) {…}
38. with statement.
with (o) { o.foo = koda;
foo = koda; o.foo = o.koda;
} foo = koda;
foo = o.koda;
I am not saying that it isn’t useful.
I am saying that there is never a case where
it isn’t confusing.
41. If there is a feature of a
language that is sometimes
problematic, and if it can be
replaced with another feature
that is more reliable, then
always use the more reliable
feature.
42. Multiline string literals
var long_line_1 = "This is a
long line"; // ok
var long_line_2 = "This is a
long line"; // syntax error
43. Avoid forms that are
difficult to distinguish from
common errors.
44. if (a = b) {…}
a = b;
if (a) {…}
if (a === b) {…}
47. var statement.
• It gets split into two parts:
The declaration part gets hoisted to the top of the function, initializing with
undefined.
The initialization part turns into an ordinary assignment. So
function foo() {
...
var myVar = 0, myOtherVar;
• Expands into
function foo() {
var myVar = undefined,
myOtherVar = undefined;
...
myVar = 0;
52. Global variables.
• Global variables are evil.
• Avoid global variables.
• When using global variables, be
explicit.
UPPER_CASE
• Global variables should be as rare as
hens teeth and stick out like a sore
thumb.
53. new prefix
Forgetting new causes a
constructor to clobber global
variables without warning.
Fixed in ES5/strict.
76. The Analytical Language of John Wilkins
Jorge Luis Borges
These ambiguities, redundancies and deficiencies remind us of those which doctor
Franz Kuhn attributes to a certain Chinese encyclopedia entitled The Celestial
Emporium of Benevolent Knowledge. In its remote pages it is written that the animals
are divided into
a. belonging to the Emperor
b. embalmed
c. trained
d. piglets
e. sirens
f. fabulous
g. stray dogs
h. included in this classification
i. trembling like crazy
j. innumerables
k. drawn with a very fine camelhair brush
l. et cetera
m.just broke the vase
n. from a distance look like flies