2008年03月4日

Ruby/Prototype.js 風格的 Array

自從用過Ruby之後,對它的Array唸唸不忘,Array#each是好物啊,有了它,幾乎可以把迴圈for/foreach給丟掉了。看了《Bring some Ruby/Prototype flavour in your PHP array》之後,心想PHP5也能這樣玩,真是讚,不用在PHP/Ruby之間的抉擇天人交戰了,把Ruby的語法移植到PHP來,這樣不就可以同時擁有PHP的廣大群眾,又擁有寫Ruby語法的簡潔/美麗/爽度了嗎?Prototype.js也是這樣做的,雖然《Learning Javascript》書中嚴厲反對Prototype.js破壞了javascript當中Array和for..in的組合技,但是Prototype.js的作者們顯然不在乎這點,照樣蠻幹。另還有《JavaScript “Associative Arrays” Considered Harmful》一文認為JavaScript當中的Array本來就不該當作associative array(hash)來用,所以組合技被破壞不算Prototype.js的錯。我個人的看法:說真的,有了Array.each,誰還需要for..in/foreach呢?

但是現實是殘酷的,由於PHP沒有anonymous function(幹,PHP根本什麼都沒有嘛!),所以callback無法像JavaScript或Ruby寫得那麼漂亮。或許應該說,雖然PHP語言特性貧乏,原本的目的是內嵌在HTML裡,卻能長到這麼大,也代表著PHP切合了初級web開發的需求,打入了一個很大的市場。《Bring》文中class的名稱是ExtendedArrayObject,只實作了部分method,但是我想乾脆把整個Ruby Array class實作好了。為了符合PHP的習慣,可以再定義一個xarray() function,x代表extended,用法類似array()(PHP的array()是language construct,不是function),只是回傳ExtendedArrayObject(factory pattern!?)。

神奇的是,我用Google搜尋xarray,居然找到我想做的東西,已經有人做過了!它是模仿Prototype.js的,也叫做xarray,而且是BSD license。但是不幸的是,事情總是沒有那麼順利,這個phpclasses.org要註冊才能下載東西,我又不想註冊。所以……我想我還是有空的時候來自己實作看看好了,當作練功!


Posted by fauzty at 樂多Roodo! │19:31 │回應(0)引用(0)資訊思考
樂多分類:網路/3C 工具:加入樂多書籤編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/5635803