CoffeeScript的箭头为何重要


发布者 andrewleeson  发布时间 1396972122333
关键字 大话编程  JavaScript 

有一天在工作时,有人开玩笑说:“CoffeeScript的语法真烂”。我问他们是什么困扰着他们,他们的回答不同寻常:函数的定义。

//JS
var double = function (x) {
  return x * 2;
};

//Coffee
double = (x) -> x * 2

他们说很难理解函数定义的写法——主要还是它不同寻常。

然而,我并不赞同。

以下是我认为CoffeeScript函数很棒的一些观点。


CoffeeScript和函数式编程


在JavaScript中,一个函数可以做以下两件事中的一件:

 

1.将一组值转换成其它的值。也就是说通过转换,将参数映射到不同的结果中。

2.改变状态....有副作用!(副作用很大哦)。


我不打算细说为什么副作用对你有害。在这个问题上有很多现成的资源可查,或者一些不错的图书也能帮你解决这个问题。

 

我只想说,写函数时:

 

  • 不要改变任何参数
  • 不要改变作用域外的变量

 

能让你写出可维护、测试的代码。毕竟,当你的函数以不同参数运行时始终返回相同的结果时,测试显得并不那么重要。


箭头意味着映射


由于这个原因,我发现箭头为函数定义提供了一个非常明智的选择:它能帮助你以更多精确,更少命令式地看待函数。

 

函数不应该是由一连串改变数据的命令语句组成。

函数应该简单地将一个值映射到另一个值。

隐式返回就像圣代上的樱桃

隐式返回意味着CoffeeScript函数中的最后的语句已经返回值,你不必声明它。这与JavaScript的用法是相反的,除非另有说明,不然将返回未定义的值(null)。

ar wat = function (x) { x * 2; };
var wut = wat(2);
console.log(wut) // Logs "undefined"

当然,返回未定义的值通常都是没用的,因此隐式返回极大的鼓励你创建能明确返回值的短小函数。


附加提示:未命名的函数——并不混乱


CoffeeScript另一个被遗忘但非常重要的特性是未命名函数。这非常棒,因为命名函数不管声明顺序,对所有的代码都有效。

这非常容易让人写出相当难解的JS代码:

var importantThing = veryComplicatedFunction()

// (...) A thousand lines later

function veryComplicatedFunction () { ... }

这种组织方式对代码的可读性影响很大。

CoffeeScript需要你将函数存储在变量里——和其它的一样。

你觉得CoffeeScript语法怎么样呢?函数式编程在JavaScript中用得怎样呢?值得还是浪费时间?让我们通过评论来看看你的选择是什么。


谢谢!




回复 (8)
  • #
  • #1 ourjs 1397055562360
    站内评论系统测试……
  • #2 ourjs 1400074209440

    @王旭林zen

    多谢提醒,已经更正;

  • #3 OurJS 1397055620000
    站外评论测试
  • #4 軟體植物 1397095537000
    [/强]
  • #5 冰冰 1397101125000
    coffeeScript是和javascript差不多的语言么
  • #6 王旭林zen 1397691122000
    “或者一些不错的图书馆也能帮你解决这个问题。” --这句用的 http://translate.google.cn/ 吗?[/弱]
  • #7 Think2011s 1398404359000
    nice!
  • #8 成力丙 1433493567178

    ffff

微信扫码 立即评论