有一天在工作时,有人开玩笑说:“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中用得怎样呢?值得还是浪费时间?让我们通过评论来看看你的选择是什么。
@王旭林zen
多谢提醒,已经更正;
ffff