Menu Close

CoffeeScript

CoffeeScript是一套JavaScript的转译语言。受到Ruby、Python与Haskell等语言的启发[3],CoffeeScript增强了JavaScript的简洁性与可读性。此外,CoffeeScript也新增了更复杂的功能,例如列表推导式、并行赋值等。一般来说,CoffeeScript可以在不影响执行性能的情况下,缩短约三分之一的代码长度[6]

CoffeeScript支持包含在了Ruby on Rails版本3.1[7]和Play Framework[8]之中。在2011年,JavaScript主要创造者布兰登·艾克声称CoffeeScript影响了他对JavaScript未来的思考[9][10]

CoffeeScript 是一种简洁、高效JavaScript 预处理语言(transpiled language),它提供了更优雅的语法,减少了 JavaScript 的冗余代码,使代码更易读和书写。

CoffeeScript 代码在运行前会被**转译(transpile)**为标准的 JavaScript,以便浏览器或 Node.js 执行。

coffeescript
coffeescript

特点:
更简洁的语法(去掉 varfunction 等冗余关键字)
强制缩进(类似 Python,避免使用 {}
支持箭头函数-> 替代 function
自动返回值(无需 return
更直观的类与继承(基于 JavaScriptclass 关键字)

CoffeeScript 历史

2009年12月3日,Jeremy Ashkenas在Git上对CoffeeScript做出了第一笔提交:“神秘语言最初的提交。(initial commit of the mystery language.)”[11]当时的编译器由Ruby语言所写成。在同年12月24日,Ashkenas做出了第一个上标签与归档的版本-0.1.0。2010年2月21日,他发布了0.5版,此版本将原先由Ruby撰写的编译器改写为纯CoffeeScript撰写。当时吸引了GitHub上的许多贡献者,每日约有300人次访问该项目的页面。2010年12月24日,Askenas发布了1.0.0稳定版本,并在Hacker News上发表。Hacker News也是当时此项目第一次发表的网站。[12][13]

CoffeeScript语法

许多JavaScript的陈述句皆可在CoffeeScript中视为表达式。例如,if, switchfor等。这些控制陈述句也有后缀的版本。

CoffeeScript的一般原则,是可以省略许多不必要的括号和大括号,可以使用缩进来取代。可以以隐喻方式调用函数(在JavaScript中调用函数所需的括号可以被省略),对象文字通常可以自动侦测。

CoffeeScript 语法

1. 变量声明(去掉 var 关键字)

name = "Alice"
age = 25

译后 JavaScript:

var name = "Alice";
var age = 25;

 


2. 函数声明(-> 替代 function

sayHello = (name) -> console.log "Hello, #{name}!"
sayHello "Alice"

译后 JavaScript:

var sayHello = function(name) {
  return console.log("Hello, " + name + "!");
};
sayHello("Alice");

3. 多行函数(无 {},依靠缩进)

square = (x) ->
  result = x * x
  console.log "Square of #{x} is #{result}"
  result

转译后 JavaScript

var square = function(x) {
  var result = x * x;
  console.log("Square of " + x + " is " + result);
  return result;
};

 


4. 数组 & 遍历

numbers = [1, 2, 3, 4, 5]

squares = numbers.map (x) -> x * x
console.log squares

 

转译后 JavaScript

var numbers = [1, 2, 3, 4, 5];

var squares = numbers.map(function(x) {
  return x * x;
});
console.log(squares);

 


5. 条件语句(简化 if 语法)

age = 18
console.log "Adult" if age >= 18

转译后 JavaScript

var age = 18;
if (age >= 18) {
  console.log("Adult");
}

 


6. 类 & 继承(基于 JavaScript class

class Animal
  constructor: (@name) ->

  speak: ->
    console.log "#{@name} makes a noise."

class Dog extends Animal
  speak: ->
    console.log "#{@name} barks."

dog = new Dog "Buddy"
dog.speak()

转译后 JavaScript

var Animal, Dog;

Animal = class Animal {
  constructor(name) {
    this.name = name;
  }
  speak() {
    return console.log(this.name + " makes a noise.");
  }
};

Dog = class Dog extends Animal {
  speak() {
    return console.log(this.name + " barks.");
  }
};

var dog = new Dog("Buddy");
dog.speak();

7. 解构赋值

{name, age} = {name: "Alice", age: 25}
console.log "#{name} is #{age} years old"

转译后 JavaScript

var name = "Alice", age = 25;
console.log(name + " is " + age + " years old");

CoffeeScript 的优势

更少的代码:减少 {};function 等冗余语法
可读性强:缩进结构类似 Python,代码更清晰
自动 return:函数最后一行代码会自动返回值
内置语法糖:如 if 语法、箭头函数、字符串插值等

但是,CoffeeScript 近几年使用较少,因为:
ES6(现代 JavaScript)已经提供了类似的简洁语法
需要编译步骤(不如直接写 ES6 方便)
生态系统较小,TypeScript 更受欢迎

尽管如此,CoffeeScript 仍然是一种有趣的语言,适用于喜欢简洁语法的开发者。

编译

CoffeeScript的编译器在0.5版本之后由CoffeeScript本身写成,为Node.js里的一个工具程序。但核心代码并不依赖Node.js,且可直接在任何支持JavaScript的环境中使用。[14]此外,可以使用Coffee Maven Plugin[15]作为Node.js之外的替代方案,这是Apache Maven建置工具的外挂,由Rhino JavaScript引擎并以Java语言写成。

在CoffeeScript.org官方网站的菜单上有“Try CoffeeScript”按钮,可以让用户直接输入CoffeeScript代码并直接在浏览器上编译成JavaScript。另外一个网站“jscoffee[16]”提供双向转译的功能。

引用资料

  1. ^ 跳转到:1.0 1.1 2.7.0. 2022年4月24日 [2022年8月9日].
  2. ^ https://registry.npmjs.com/coffeescript; 检索日期: 2023年3月1日.
  3. ^ 跳转到:3.0 3.1 3.2 3.3 The Changelog. Episode 0.2.9 – CoffeeScript with Jeremy Ashkenas (页面存档备份,存于互联网档案馆), July 23, 2010
  4. ^ Heller, Martin. Turn up your nose at Dart and smell the CoffeeScript. JavaWorld (InfoWorld). 18 October 2011 [2012-02-09]. (原始内容存档于2012-02-10).
  5. ^ MoonScript-A programmer friendly language that compiles to Lua. [2012-04-28]. (原始内容存档于2021-06-04).
  6. ^ Read Write Hack. Interview with Jeremy Ashkenas (页面存档备份,存于互联网档案馆), Jan 7, 2011
  7. ^ Josh Peek. Tweet by Rails Core Team Member. April 13, 2011 [2020-09-18]. (原始内容存档于2013-11-07).
  8. ^ AssetsCoffeeScript – 2.5.x. www.playframework.com. [2016-10-31]. (原始内容存档于2017-09-09).
  9. ^ Eich, Brendan. “Harmony of My Dreams (页面存档备份,存于互联网档案馆)”
  10. ^ Eich, Brendan. “My JSConf.US Presentation (页面存档备份,存于互联网档案馆)”
  11. ^ Github. ‘initial commit of the mystery language’ (页面存档备份,存于互联网档案馆)
  12. ^ Hacker News. CoffeeScript 1.0.0 announcement (页面存档备份,存于互联网档案馆) posted by Jeremy Ashkenas on Dec 24, 2010
  13. ^ Hacker News. Original CoffeeScript announcement (页面存档备份,存于互联网档案馆) posted by Jeremy Ashkenas on Dec 24, 2009
  14. ^ 存档副本. [2012-04-28]. (原始内容存档于2009-12-27).
  15. ^ Coffee Maven Plugin. [2012-04-28]. (原始内容存档于2016-01-31).
  16. ^ js2coffee/js2coffee: Compile JavaScript to CoffeeScript. GitHub. js2coffee. 2022-11-08 [2022-11-18]. (原始内容存档于2022-11-18).

 

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!