結果のCoffeeScriptコードは非常に読みやすくなりました。
JavaScriptにコンパイルして戻したので、ナビゲートとデバッグが非常に簡単でした。このモジュールを移植しているときに、チームの別の開発者がバグを発見しました。これら2人の開発者は、古いJavaScriptコードとCSコンパイラーから出た新しいJavaScriptコードのバグを修正しました。彼らは独立して働き、ほぼ同じ時間(15-20分)かかりました。
それがポートであるという事実のために、結果のコードは適切または望ましいコーヒー固有の機能を使用していませんでした。CoffeeScriptをゼロから記述する場合、コードはより慣用的です。そのため、後で既存のコードを移植しないことにしました。
一般的に、より短い機能とより小さなオブジェクトの可読性はある程度向上しました。ただし、長いメソッドの場合はまったくそうではありませんでした。最大の肥大化による節約は->
明示的return
でしたが、それ以外の点ではコードが大幅に短縮または単純化されていません。構文の一部、特にオブジェクトリテラルは非常に混乱しているように見えました。CSは、メンバー定義を囲む中括弧を省略し、「everything-is-an-expression」および暗黙return
のコードと組み合わせて、コードの一部を読みにくくしました。
JavaScriptは次のとおりです。
var rabbitGenerator = {
makeRabbit: function(rabbitName, growCarrots) {
if (growCarrots) {
carrots.growMore(10);
} else {
carrots.ensureSupply();
}
return {
name: rabbitName,
height: 0,
actions: {
jump: function (height) {
this.height += height;
},
eatCarrot: function () {
// etc
}
}
};
},
// more members
}
そして、対応するCoffeeScriptコードは次のようになります。
rabbitGenerator =
makeRabbit: (rabbitName, growCarrots) ->
if growCarrots
carrots.growMore 10
else
carrots.ensureSupply()
name: rabbitName // (*)
height: 0
actions:
jump: (height) ->
@height += height
eatCarrot: ->
現在では、returnステートメントが(*)
行で始まることを理解するのはかなり困難です。このプロジェクトでは、オブジェクトリテラルに大きく依存しています。これらを関数パラメーターとして渡し、他の関数から返します。多くの場合、これらのオブジェクトは非常に複雑になる傾向があります:異なるタイプのメンバーといくつかのレベルのネスト。私たちのケースでは、CoffeeScriptコードは実際にはプレーンなJavaScriptコードよりも読みにくいと感じていました。
CoffeeScriptのデバッグは、予想よりも簡単であることが判明しましたが、編集エクスペリエンスはかなり低下しました。この言語に適したエディター/ IDEが見つかりませんでした。私たちは、プロジェクトのクライアント側コードのエディター/ IDEを標準化しておらず、実際、すべて異なるツールを使用しています。実際、チームの全員がCoffeeScriptに切り替えると、ツールからかなり貧弱なサポートを受けることに同意します。IDEおよびエディターのプラグインは非常に初期の形であり、場合によっては適切な構文の強調表示またはインデントのサポートを提供することさえできません。コードスニペットやリファクタリングについて話していない。WebStorm、Eclipse、NetBeans、VisualStudio、Notepad ++、SublimeText2を使用します。
ツールといえば、CoffeScriptコンパイラー自体がNode JSパッケージとして提供されることに言及する必要があります。私たちは主にJava / .NETショップであるため、誰もがWindowsボックスで開発しています。最近まで、WindowsのサポートはNodeにはほとんど存在していませんでした。CoffeeScriptコンパイラをWindowsで実行することはできなかったため、当面は<script type="text/coffeescript">
タグとブラウザベースのオンザフライコンパイラを使用することにしました。
コンパイラーは非常に高速であり、起動時間をあまり長くしません。欠点は、結果のJavaScriptがeval
編集され、ブラウザーの開発者ツール(特にIE8)でブレークポイントを設定するのが少し難しいことです。デバッグに苦労する場合は、上にリストしたものと同じ移行ツールを使用してCoffeeScriptコードをプリコンパイルしますが、それでもまだあまり便利ではありません。
自動var
挿入やthis
太い矢印演算子(=>
)の半透明管理など、CoffeeScriptの他の約束は、期待したほどの利益をもたらさないことが判明しました。ビルドプロセスの一部としてすでにJSLintを使用しておりES3 x ES5-Strict
、言語のサブセットでコードを記述しています。とにかく、Coffeeが同じ種類の「きれいな」コードを生成するという事実は良いことです。すべてのサーバー側フレームワークが有効なHTML5およびCSS3マークアップも生成することを願っています!
つまり、CoffeeScriptがvar
キーワードを入力して時間を大幅に節約するとは言いません。不足しているvar
sはJSLintによって簡単に捕捉され、簡単に修正できます。さらに、しばらくの間修正されると、とにかく良いJavaScriptを自動的に書き始めます。したがって、私はコーヒーが本当に言わないだろうというこの点で役に立ちます。
CoffeeScriptを約1週間評価しました。すべてのチームメンバーがコードを記述しており、お互いの経験を共有しました。それを使って新しいコードを書き、既存のコードを適切に移植した。言語に対する私たちの気持ちはまちまちでした。
一般的に言って、それは私たちの開発を加速しなかったと言いますが、それは私たちを遅くしませんでした。タイピングの減少とエラーサーフェスの減少による速度の向上は、他の領域の速度低下、主にツールのサポートによって相殺されました。一週間後、CoffeeScriptの使用を義務付けないと決めましたが、それも禁止しません。自由な選択が与えられると、実際には誰もそれを使用しません。少なくとも今のところは。時々、新しい機能のプロトタイプを作成し、プロジェクトの残りの部分と統合する前にコードをJavaScriptに変換して、より迅速に開始することを考えていますが、そのアプローチはまだ試していません。