私はCoffeeScriptについて読んでいますが、まだ言語の配置を試みています。何ができるか、ベストプラクティスなどです。私はより多くのように私の二つの質問は、あなたが少し笑顔にすることを強く型付けされた言語(AS3、ジャワ、スカラ座)を使用してい:)Coffeescriptのカスタムコレクションと変更可能性
質問1:カスタムコレクション
カスタムコレクションについてどう思いますか? JS/CSは、この側面で最も弱い言語の1つです。たとえば、Array.removeはありません。代わりに面倒なsplice()メソッドを使用する必要があります。 (アンダースコアのように)いくつかの関数ライブラリは、最初の引数として配列/オブジェクトを取ったが、私は書くことを好むだろう選択肢を与えられた機能を提供することで、APIを強化:
list fancyFunction 3, 4
ではなく
fancyFunction list 3, 4
をの私を言ってみましょうListクラスを作成します。それが可能かどうか、そしてもしそうなら、このクラスがCSの理解構文を使用するために必要なことは何ですか?最悪のシナリオでは、ListにtoArray()メソッドを持たせることができ、代わりにその戻り値に対して通常のCS操作を実行できますが、より良い解決策があることを願っています。
理想的には、私が内包を失うことのコストで豊富な、カスタムコレクションを定義できるようにしたいが、ないだろう、など
質問2:可変性
非常に慎重であることについて、人々の感情は何ですか一般的にCS/JSでの可変性はありますか?
私は様々なコードをオンラインで読むとき、私はすべてが変更可能であるという印象を持っています。人々は一般的に、気にしないでコードの行を少なくする方が良いと一般的に思っています。
不変の基本的なPointクラス対可変たとえば、(うまくいけば、私は何か間違ったことをやっていないよ)
変更可能な
class Point
constructor: (@x, @y) ->
不変
class Point
constructor: (x, y) ->
@x = -> x
@y = -> y
ないようにはるかに複雑けどやや奇妙な構文。もう一つの考慮すべき点は、JSは人間にとって最も速いものではなく、純粋主義者のためにループ内にたくさんのオブジェクトを作成しなければならないということは、パフォーマンスが犠牲になる可能性があるということです。私は、新しいPointオブジェクトを作成するコストとベンチマークのメンバを変更するコストをベンチマークしませんでした。
薄いAPIで通信するモジュールがたくさんある大きなアプリを想像してみてください。不変のオブジェクトを渡す必要はありませんか?あるいは代わりに防御的なコピーを実行しますか?
注:私は知っている言語にCSを試してみようとしていません。むしろ、他の言語で認められている概念の一部を再利用することが理にかなっているかどうかを知りたいと思っています。
おかげ
"JSは人間にとって最も速いものではありません">あなたは驚くかもしれません。 JSは、ブラウザ戦争のおかげで、最も速い言語の1つになっています。 http://shootout.alioth.debian.org/u32/which-programming-languages-are-fastest.php、http://attractivechaos.github.com/plb/。オブジェクト/関数を作成する際のオーバーヘッドもごくわずかです。http://jsperf.com/object-and-function-creation –