感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

JavaScriptのデザインパターン

スポンサーリンク

昨日AmazonでポチしたJavaScriptデザインパターン本が早速届いた。
すごく勉強になるし、他の言語でも活かせる知識が得られる気がする。面白い。
昔はオライリー苦手だったんだけど、今は本当にオライリーばっかり読んでるなぁ。

デザインパターンって

デザインパターンってずっと昔からあるものだったことを今日初めて知った。
GoFの本、すなわち『オブジェクト指向における再利用のtまえのデザインパターン』が出版されたのは、なんと1994年。
俺が小学校低学年くらいのときにもうデザインパターンという概念は誕生していたのだ。
Java1.0αが誕生したのも1994年らしい。
スーパーファミコンが出たか出ないかの時期にもう誕生していたのか・・・。

JavaScriptオブジェクト指向言語

モダンJavaScriptでも強調されているが、JavaScriptオブジェクト指向言語で、オブジェクトでないのは
・数値
・文字列
・ブール値
・null
・undefined
の5つのプリミティブだけ。

オブジェクトとは、名前のついたプロパティの集まりである。
つまり、キーと値の組み合わせのリストにすぎない。
プロパティのうち、関数にしたものはメソッドと呼ばれる。

JavaScriptに「ない」もの

JavaScriptはクラスというものを持たない。
JavaScriptは継承がない。しかしプロトタイプを使って実現できる。

JSLint

http://www.jslint.com/
JSLintはコードの品質をチェックしてくれるツール。
開発者はDouglas Crockford.

コードを書くときに覚えておくこと

・ソフトウェアのバグは修正にコストがかかる。そして、時間が経てば経つほどそのコストは高くなる。
なぜか?
①コードを理解するのに時間がかかるようになる
②解決できそうなコードを理解するのにも時間がかかるようになる

・コードは書くよりも読む方が時間がかかる。

上記のような理由から、「保守しやすいコード」を作ることがアプリケーションの成功に極めて重要になる。

保守しやすいコードに大切なこと

グローバル変数の使用は最小限にする
→変数はvarを使って宣言すること
→宣言していない変数はグローバルオブジェクトのプロパティになってしまう
→varを使った宣言で代入の連鎖は避ける

var a = b = 0;

forループの性能改善

読んでいて目から鱗が落ちた。
パーフェクトJavaか何かでも
「for文を書く時は一般的な構文に従いましょう」
ということはよく言われていた。
一般的な構文というのは、

for (var i = 0; i < myarray.length; i++) {
	//hoge
}

というように、for文を回る時はiは0からじゃないと、なんか他の意味があるんじゃないの?と勘ぐられてしまう、ということだ。
(拡張for文を否定しているわけではない。念のため)

しかしJavaScriptパターンでは、このmyarray.lengthの部分は性能が悪くなる原因のひとつだという。
というのも、ループの繰り返しごとに配列の長さにアクセスされるからだ。
myarray.length
myarrayの長さは?とループするたびにアクセスされて、HTMLCollectionオブジェクトの配列の場合はコードの処理の遅れは顕著になるという。

なので、for文は

for (var i = 0, max = myarray.length; i < max; i++) {
	//hoge
}

と書いて、配列の長さをキャッシュしておくことが推奨される。
これって他の言語(Javaとか)にも言えるんじゃないだろうか。

読んだ本

JavaScriptパターン ―優れたアプリケーションのための作法

JavaScriptパターン ―優れたアプリケーションのための作法

感謝のプログラミング

今回で感謝のプログラミングは【281時間目】
10000時間まで、あと【9719時間】