最近在网上看到了一个新的Javascript小程序——Streams,起初以为是一个普通的Javascript类库,但读了关于它的介绍后,我发现,这不是一个简单的类库,而且作者的重点也不是这个类库的功能,而是——借用文中的一段话:
如果你愿意花10分钟的时间来阅读这篇文章,你对编程的认识有可能会被完全的改变(除非你有函数式编程的经验!)。
还有:
Streams 实际上不是一个新的想法。很多的函数式的编程语言都支持这种特征。所谓‘stream’是Scheme语言里的叫法,Scheme是LISP语言的一种方言。Haskell语言也支持无限大列表(list)。这些’take’,’tail’, ‘head’, ‘map’ 和 ‘filter’ 名字都来自于Haskell语言。Python和其它很多中语言中也存在虽然不同但很相似的这种概念,它们都被称作”发生器(generators)”。
这些思想来函数式编程社区里已经流传了很久了。然而,对于大多数的Javascript程序员来说却是一个很新的概念,特别是那些没有函数式编程经验的人。
有兴趣的读者可以查看本站提供的它官方文档的中文翻译。
很喜欢函数式编程的思想,虽然现在写程序用得不多,不过也是扩展了自己了知识范围,蛮好的。
这对我来说是一种新的思想,见识了,谢谢!
这里很多的例子和创意都是来自Structure and Interpretation of Computer Programs“这本数”有别字…
谢谢提醒,已改正
用过LINQ的C#开发者不会陌生,对JavaScript,它很棒,推荐Linq.js
用Underscore也可以实现,这个相比Underscore有什么优势?
如果您有时间可以看下http://jsinq.codeplex.com/,可以说是Stream类库的一个超集,功能函数命名可以参照微软 LINQ ,参数也类似。
对于熟悉 LINQ 的开发者来说,或许 JSINQ 这个类型可以零时间上手。
rxjs好像比这个强大啊
var s2 = new Stream();
s2.append(1).append(2).append(3);
console.log(s2.length());
在github上搞了一个官方例子,放到浏览器一跑,报错了。
难道是我姿势不对吗?