mofmof.js で日本語コメントの併記を始めました
uupaa.js の開発中に、
- 図形を交えたり、コードの由来を説明する外部リンクをソースコードに埋め込む オンラインコメントスタイル おすすめ
- 独自○○ より オレオレ○○ と呼べばいいよ。オレオレライブラリとか、オレオレスタイルとか
- オレオレコーディングスタイルを発明せず、JS特有の事情を考慮しつつ、既存のコーディングスタイルを流用するといいよ
- == ではなく === おすすめ
- typeof hoge == "undefind" より hoge === void 0 おすすめ
- ナビ子記法 おすすめ
など、2008年頃は存在しても注目されてなかったり、存在もしなかった用語や用法をこさえたりと、色々やったりしてました。
uupaa.js のベースライブラリとなる、現在開発中の mofmof.js でも
- 日本語コメントを併記 してみたり
- 短さよりも、最適化と可読性のバランスを考慮したコードや、対称性を重視したコードに してみたり
- 経験を踏まえて、prototype拡張として実装するのが自然なものは、prototypeの下に置くべき とか考えなおしてみたり
- Titanium, NGCore, Windows 8 で最適化されるように ビルドオプション追加してみたり
などをやり始めています。
日本語コメントはこんな感じ
http://code.google.com/p/mofmof-js/source/browse/trunk/0.1/src/mofmof.js
はてなダイアリーだと、横幅が厳しい感じですね。
// mm.factory - Class and Nodes instance factory function mm_factory(expr, // @param ClassNameString/NodeQueryExpressionString/ // 引数: クラス名, Node検索文字列, Nodesインスタンス, Node, Nodeの配列 // NodesInstance/Node/NodeArray: arg1, // @param Mix/Node/NodesInstance(= undefined): // 引数: クラスインスタンス生成時の第一引数 または Nodes に渡すコンテキスト(省略可能) // class arg1 or Nodes Context arg2, // @param Mix(= undefined): class arg2 // 引数: クラスインスタンス生成時の第二引数(省略可能) arg3, // @param Mix(= undefined): class arg3 // 引数: クラスインスタンス生成時の第三引数(省略可能) arg4) { // @param Mix(= undefined): class arg4 // 引数: クラスインスタンス生成時の第四引数(省略可能) // @return ClassInstance/NodesInstance: // 戻り値: クラスインスタンス または Nodes インスタンス if (typeof expr === "string" && Class[expr]) { // 文字列が指定され、それが mm.Class に登録済みならクラスインスタンスを生成する return new Class[expr](arg1, arg2, arg3, arg4); // クラスインスタンスを生成し返す。適用される引数は最大で4つ } return new Nodes(expr, arg1); // Nodesインスタンスを生成し返す。適用される引数は最大で1つ }
Prototype拡張はこんな感じに
http://code.google.com/p/mofmof-js/source/browse/trunk/0.1/src/object.js
上記のソースコードでは、Object, String, Number, Date, Array, Boolean, Function などに
- ECMAScript-262 5th 由来のもの
- Ruby 由来のもの
- JSON 由来のもの
を入れ込んでいます。
Prototype.js のように既存のネイティブコードを上書きするような事もありません。
// --- Object --- // Object.keys() // --- Array --- // Array.isArray() Array.toArray() Array.range() // Array#range() Array#f() Array#or() // Array#and() Array#fill() Array#clean() // Array#clear() Array#clone() Array#unique() // Array#toHash() Array#indexOf() Array#lastIndexOf() // Array#map() Array#some() Array#every() // Array#filter() Array#forEach() Array#flatten() // Array#reduce() Array#reduceRight() // --- Date --- // Date.now() Date#toJSON() // --- Boolean --- // Boolean#toJSON() // --- Number --- // Number.unique() Number#has() Number#pad() // Number#clip() Number#toJSON() Number#inRange() // Number#toHexString() // --- Function --- // Function#bind() Function#build() // --- String --- // String#f() String#has() String#trim() // String#trimTag() String#trimQuote() String#repeat() // String#toHash() String#toJSON() String#sprintf() // String#truncate() String#toByteArray() // --- JSON --- // JSON.parse() JSON.stringify()