「JavaScript の勉強」について個人的に ― 2008年05月23日 08時25分
「JavaScript の『本気』な勉強 - daily dayflower」での質問に横から勝手に答えちゃいます。
- 初学者の入り口として既存のライブラリを使うのは
- どちらかというと望ましい。ブラウザのイベント周りの非互換性など、JavaScript と関係ない部分で悩まずにすむのは便利だと思います。
- (初学者であれ) JavaScript の仕様に沿ったメカニズムについて
- 学習すべきである。いきなり ECMAScript 仕様を読めというつもりはありませんが、体系的な学習はしたほうがいいかと。
- DOM 構築後のスクリプト実行についてどう教える?
- ライブラリを使うならそのライブラリの機能を使って、使わないなら body 要素の内容の終端に script 要素をおくか、もしくは load イベントのイベントリスナで。
- 自分で書く場合
- 自家製ライブラリを利用している。今度このブログのレイアウトを変更するときには jQuery を使ってみようかなとも思っていますが。
書いていて思ったのですが、これはプログラミングとアプリケーション開発という軸からすれば、プログラミングよりの視点ですね。同じ視点からすれば、DOM/BOM は基礎というよりも応用であり、「W3C DOM等(基礎知識を)知りませーん」という人を「JavaScriptを本気で勉強した人」といえるか
と問われれば「いえる」と思います。
Perl ライブラリ jcode.pl は CGI での使用が最も多かったでしょうが、作者の歌代さんは (少なくとも CGI 普及期には) 一度も CGI を書いたことがなかったそうです。Web ブラウザでのクライアントサイドスクリプティングは、JavaScript の最大の利用箇所ではあっても唯一の利用箇所ではありません。「JavaScript の勉強」といった場合、ブラウザにとらわれることはないと私は考えています (dayflower さんの質問とだいぶずれていますが)。
行数の数え方 ― 2008年05月23日 11時56分
行数を数えているのですが、コメント欄他の
str.split(/\n/).length
はかっこいいけどoverkill
404 Blog Not Found:javascript - String.prototype.tr() released
本当でしょうか? 実際に試してみましょう。変数 s が対象文字列を指しているものとします。
// charAt
var lines = 1;
for (var i = 0, n = s.length; i < n; i++)
if (s.charAt(i) == "\n")
lines++;
// Array
var lines = 1;
var chars = s.split("");
for (var i = 0, n = chars.length; i < n; i++)
if (chars[i] == "\n")
lines++;
// split
var lines = s.split("\n").length;
// match
var lines = (s.match(/\n/g) || []).length + 1;
// match (番兵)
var lines = (s + "\n").match(/\n/g).length;
// indexOf
var lines = 1;
var i = -1;
while ((i = s.indexOf("\n", i + 1)) >= 0)
lines++;
// replace
var lines = s.length - s.replace(/\n/g, "").length + 1;
改行を含む文字列 | 改行を含まない文字列 | |||
---|---|---|---|---|
SpiderMonkey 1.8 | JScript 5.7 | SpiderMonkey 1.8 | JScript 5.7 | |
charAt | 468 | 1656 | 389 | 1360 |
Array | 463 | 1047 | 382 | 859 |
split | 108 | 172 | 78 | 63 |
match | 502 | 203 | 73 | 78 |
match (番兵) | 543 | 250 | 185 | 110 |
indexOf | 95 | 250 | 13 | 31 |
replace | 446 | 94 | 82 | 62 |
見ての通り、charAt メソッドで一文字ずつチェックしていくよりも、split メソッドを使ったほうが実行速度は速くなります。特に JScript ではその差が顕著です。
ところで、JavaScript は高級言語であり、一般の JavaScript 処理系ではソースコードの解釈・実行時に多くの最適化がなされます。最適化技術は日々進歩しており、今日一番速かった書き方が明日もそうである保証はどこにもありません。アルゴリズムから変えるとかならともかく、下手に速度を求めて変な書き方をするよりは簡潔な書き方を心がけたほうがいいと思います。
最近のコメント