- 时间:2021-05-27 09:26 编辑: 来源: 阅读:
- 扫一扫,手机访问
摘要:stream.js 一个很小、完全独立的Javascript类库
<script src='stream-min.js'></script>
[url=http://xiazai.jb51.net/201110/yuanma/stream-min.rar]下载 stream.js[/url]
2Kb minified
streams是什么?
Streams 是一个操作简单的数据结构,很像数组或链接表,但附加了一些非凡的能力。
它们有什么特别之处?
跟数组不一样,streams是一个有魔法的数据结构。它可以装载无穷多的元素。是的,你没听错。他的这种魔力来自于具有延后(lazily)执行的能力。这简单的术语完全能表明它们可以加载无穷多的元素。
入门
如果你愿意花10分钟的时间来阅读这篇文章,你对编程的认识有可能会被完全的改变(除非你有函数式编程的经验!)。请稍有耐心,让我来先介绍一下streams支持的跟数组或链接表很类似的基本功能操作。然后我会像你介绍一些它具有的非常有趣的特性。
Stream 是一种容器。它能容纳元素。你可以使用 Stream.make 来让一个stream加载一些元素。只需要把想要的元素当成参数传进去:
var s = Stream.make( 10, 20, 30 ); // s is now a stream containing 10, 20, and 30
足够简单吧,现在 s 是一个拥有3个元素的stream: 10, 20, and 30; 有顺序的。我们可以使用 s.length() 来查看这个stream的长度,用 s.item( i ) 通过索引取出里面的某个元素。你还可以通过调用 s.head() 来获得这个stream 的第一个元素。让我们实际操作一下:
[url=http://streamjs.org/sequence-challenge.js]这儿还有一些[/url]。
如果你真的想不出这段代码是做什么的,你就运行一下它,自己看一看!这样你就很容易理解它是怎么做的了。
致敬
Streams 实际上不是一个新的想法。很多的函数式的编程语言都支持这种特征。所谓‘stream'是Scheme语言里的叫法,Scheme是LISP语言的一种方言。Haskell语言也支持无限大列表(list)。这些'take', 'tail', 'head', 'map' 和 'filter' 名字都来自于Haskell语言。Python和其它很多中语言中也存在虽然不同但很相似的这种概念,它们都被称作"发生器(generators)"。
这些思想来函数式编程社区里已经流传了很久了。然而,对于大多数的Javascript程序员来说却是一个很新的概念,特别是那些没有函数式编程经验的人。
这里很多的例子和创意都是来自 [url=http://mitpress.mit.edu/sicp/full-text/book/book.html]Structure and Interpretation of Computer Programs [/url]这本书。如果你喜欢这些想法,我高度推荐你读一读它;这本书可以在网上免费获得。它也是我开发这个Javascript类库的创意来源。
如果你喜欢其它语法形式的stream,你可以试一下[url=http://neue.cc/reference.htm]linq.js[/url],或者,如果你使用 node.js, [url=https://github.com/pkrumins/node-lazy]node-lazy[/url] 也许更适合你。
如果你要是喜欢 CoffeeScript 的话, Michael Blume 正在把 stream.js 移植到 CoffeeScript 上,创造出 coffeestream。
感谢你的阅读!
我希望你能有所收获,并喜欢上 stream.js。这个类库是免费的,所以,如果你喜欢它,或它能在某方面提供了帮助,你可以考虑替我买一杯热巧克力饮料 (我不喝咖啡) 或者 写信给我。如果你打算这样做,请写清你是哪里人,做什么的。我很喜欢收集世界各地的图片,所以,信中请附上你在你的城市里拍的照片!