CoffeeScriptはJavaScriptにコンパイルされるプログラミング言語です。JavaScriptの簡潔さと読みやすさを向上させるために、Ruby、Python、Haskellに触発されたシンタックスシュガーが追加されています。 [ 4 ] [ 5 ]追加された機能には、リスト内包表記や分割代入などがあります。
CoffeeScript のサポートは、 Ruby on Railsバージョン 3.1 [ 6 ]およびPlay Framework [ 7 ]に含まれています。2011年に、Brendan Eich は、JavaScript の将来についての考えに影響を与えたものとして CoffeeScript に言及しました。[ 8 ] [ 9 ]
2009 年 12 月 13 日、ジェレミー・アシュケナスは「謎の言語の最初のコミット」というコメントとともに CoffeeScript の最初のGitコミットを行いました。 [ 10 ]コンパイラは Ruby で書かれていました。12 月 24 日、彼は最初のタグ付けされドキュメント化されたリリースである 0.1.0 を作成しました。2010 年 2 月 21 日、彼はバージョン 0.5 をコミットし、Ruby コンパイラを純粋な CoffeeScript でセルフホスティングされたバージョンに置き換えました。その時点で、プロジェクトはGitHubで他の複数の貢献者を引き付け、1 日あたり 300 を超えるページ アクセスを受けていました。
2010年12月24日、アシュケナスは、プロジェクトが最初に発表されたサイトであるHacker Newsで、安定版1.0.0のリリースを発表した。 [ 11 ] [ 12 ]
2017年9月18日、バージョン2.0.0が導入されました[ 13 ]。これは「CoffeeScriptを現代のJavaScript時代に適合させ、JavaScriptとの互換性のギャップを解消しつつ、CoffeeScriptの特徴であるクリーンな構文を維持すること」を目的としています。
CoffeeScriptでは、ほとんどすべてのものが式です。たとえばif、switchforif consequent if condition
不要な括弧や中括弧の多くは省略できます。例えば、コードブロックは中括弧の代わりにインデントで示すことができ、関数呼び出しは暗黙的に行われ、オブジェクトリテラルは多くの場合自動的に検出されます。
JavaScriptで体格指数(BMI)を計算するには、次のように記述できます。
let mass = 72 ; let height = 1.78 ; let BMI = mass / height ** 2 ; if ( 18.5 <= BMI && BMI < 25 ) alert ( 'あなたは健康です!' );CoffeeScriptでは、間隔は直接記述されます。
体重= 72身長= 1.78 BMI =体重/身長** 2 18.5 <= BMI < 25の場合、「健康です!」と警告しますJavaScriptでユークリッドの互除法を用いて2つの整数の最大公約数を計算するには、通常whileループが必要です。
let gcd = ( x , y ) => { do { [ x , y ] = [ y , x % y ]; } while ( y !== 0 ) return x ; }CoffeeScriptでは代わりにuntil[ 14 ]を使用できます。
gcd = (x, y) -> [ x , y ] = [ y , x % y ] yが0になるまでxこの?キーワードは、変数がnullまたは であるかどうかを素早くチェックしますundefined 。
personCheck = -> if not person ? then alert ( "No person" ) else alert ( "Have person" ) person = null personCheck () person = "Ivan" personCheck ()変数がnullまたはの場合は「人物なし」と警告しundefined、そこに何かがある場合は「人物あり」と警告します。
jQueryライブラリを使用したES6以前のJavaScriptの一般的なコードスニペットは次のとおりです。
$ ( document ) .ready ( function () { // 初期化コードはここに記述します});あるいは単に:
$ ( function () { // 初期化コードはここに記述します});CoffeeScriptでは、functionキーワードはシンボルに置き換えられ->、PythonやHaskellなどの他のオフサイドルール言語と同様に、波括弧の代わりにインデントが使用されます。また、関数やブロックを示すために、通常は括弧を省略し、代わりにインデントレベルを使用できます。したがって、上記のコードスニペットに相当するCoffeeScriptのコードは次のようになります。
$ ( document ). ready -> # 初期化コードはここに記述しますまたは単に:
$ -> # 初期化コードはここに記述しますCoffeeScriptにはRubyスタイルの文字列補間機能が含まれています。二重引用符で囲まれた文字列では#{ ... }を使用して補間値を指定でき、一重引用符で囲まれた文字列はリテラルです。[ 15 ]
著者= "ウィトゲンシュタイン"引用= "絵は事実である。 -- #{著者} "文= " #{ 22/7 }はπの適切な近似値です"任意のforループはリスト内包表記に置き換えることができます。したがって、10 より小さい正の奇数 (つまり、2 で割った余りが 1 になる数) の二乗を計算するには、次のようにします。
n * nをn in [ 1 .. 10 ]でn % 2が1の場合に警告するあるいは、次のようなものもあります。
n * nをn in [ 1 .. 10 ]に2 ずつ警告する線形探索は、 whenキーワードを使用して1行のコードで実装できます。
names = [ "Ivan" , "Joanna" , "Nikolay" , "Mihaela" ] linearSearch = (searchName) -> alert ( name ) for name in names when name is searchNameこのfor ... in構文では配列をループ処理できますが、このfor ... of構文ではオブジェクトをループ処理できます。
CoffeeScriptは、その独特なスコープ規則で批判されてきた。 [ 16 ] [ 17 ]特に、変数シャドウイングを完全に禁止しているため、手続き型プログラミングの原則が定義されて以来確立され、当然のこととされてきた基本的なプログラミングパターンにおいて、コードの推論が難しくなり、エラーが発生しやすくなる。
例えば、JavaScript の以下のコードスニペットでは、外側のスコープ内の変数が意図せず上書きされること{}がないことを確実に知るために、ブロックの外を見る必要はありません。foo
// ... function baz () { var foo = "bar" ; console . log ( `foo = ${ foo } ` ); } // ... }CoffeeScriptでは、ブロックの外側を見ない限り、変数のスコープがブロック内に限定されているかどうかを判断する方法はありません。
CoffeeScriptコンパイラはバージョン0.5以降セルフホスティングされており、 Node.jsユーティリティとして利用可能ですが、コアコンパイラはNode.jsに依存しておらず、任意のJavaScript環境で実行できます。[ 18 ] Node.jsユーティリティの代替として、 Apache MavenビルドシステムのプラグインであるCoffee Mavenプラグインがあります。このプラグインはJavaで書かれたRhino JavaScriptエンジンを使用します。
CoffeeScript.org の公式サイトには、メニューバーに「Try CoffeeScript」ボタンがあります。このボタンをクリックすると、モーダルウィンドウが開き、ユーザーは CoffeeScript を入力して JavaScript の出力を確認し、ブラウザで直接実行できます。js2coffee [ 19 ]サイトは双方向の翻訳を提供します。
.coffee.md.litcoffeeIced CoffeeScript は CoffeeScript の上位互換であり、2 つの新しいキーワード と が追加されていますawait。deferこれらの追加により非同期制御フローが簡素化され、コードが手続き型プログラミング言語のように見え、コールバックチェーンが不要になります。サーバー側とブラウザの両方で使用できます。[ 20 ]
2012年9月13日、Dropboxはブラウザ側のコードベースをJavaScriptからCoffeeScriptに書き換えたと発表したが[ 21 ] 、 2017年にはTypeScriptに移行した[ 22 ]。
GitHubの内部スタイルガイドにはかつて「新しい JS は CoffeeScript で記述する」と書かれていましたが、現在はそうではありません。[ 23 ]また、同社のテキストエディタ Atomもこの言語で書かれており、設定はJSONの派生であるCSON (「CoffeeScript Object Notation」) で記述されていました。[ 24 ] [ 25 ]
Pixel Game Maker MVは、ゲーム開発環境の一部としてCoffeeScriptを使用しています。[ 26 ]