2009年11月15日

從中介編程與反射能力來談 Java 語言

公司這個月開始一件專案,我分配到用 Java 開發 web service 那一塊。 於是我親身體驗到一本書說的故事。

找一個很聰明,但是沒有 Java 經驗的開發者,讓他去學學 Java web 企業應用的那一堆技術,然後再問問他的想法。問題是兩方面的,首先,它很難;再者,失敗的後果很悲慘。

對我來說,或許這意味者程式碼應該在較高等級的抽象中,而我們無法在 Java 中做到這一點。

《超越 Java》(Beyond Java),Bruce Tate,O'Reilly出版

我不算聰明的開發者,但十幾年基本功練下來,功底還算紥實。OOP, ORM, Design pattern 這些概念都懂。Web 架構更是熟悉。儘管如此,當我試圖使用 Spring, Hibernate 等框架時,我完全無法理解為什麼 Java 語言可以把一件簡單的事搞成這麼複雜。這件事促成我寫出《不同程式語言的中介編程與反射能力系列文章》。

...繼續閱讀

Ruby的中介編程與反射能力示範

在系列文章的前幾篇,我已經說明了 JavaScript 與 PHP 中介編程與反射能力的方式。 本文則就同樣的需求功能,示範 Ruby 的實作方式。

本文所示範的輸出結果,與 JavaScript的中介編程與反射能力示範 PHP的中介編程與反射能力示範 相同。 該做什麼,前文都提過了,此處不再重談。

...繼續閱讀

2009年11月14日

擁抱變化,從函數指標到函數個體

我來說個關於函數指標(在 C 語言中,function 就是一個 function pointer)與函數個體(function object)的小故事。這個故事還有一個 Java 版的,在本文的最後一節。只對 Java 語言有興趣的,可以先看後面的 Java 版,再回頭看前面。

有一天,"偉大的"架構設計師交代甲和乙兩位程序員共同負責撰寫一個小程式。這個程式配置了兩個陣列,一個是傳統的整數陣列,一個是整數vector。這個程式要將這兩個陣列的內容傾印出來。

...繼續閱讀

2009年11月12日

JavaScript的類別定義擴充能力

我在試探不同程式語言的中介編程與反射能力系列文章的第三篇PHP的中介編程與反射能力示範中提到 JavaScript 也可以透過 prototype 的操作實現直接擴充類別定義的能力,這種能力在 Ruby 中稱為 open class。本文是為了示範 JavaScript 此能力所做的補充。

...繼續閱讀

Posted by shirock at 樂多Roodo!23:15回應(0)引用(2)JavaScript
標籤:javascript,繼承,prototype

PHP程序員開始寫Ruby程式的函數參考網站

工商服務時間。PHP程序員學了Ruby語言後,如果想開始動手寫程式,很快就會發現許多在PHP用慣了的函數,在 Ruby 中並沒有同名的函數。然後初學Ruby的滿腔熱血,就在翻找 Ruby 手冊的過程中降溫。這實在是令人遺憾的事。如何避免這種事情發生呢?

就讓我來介紹一個很好的參考網站,那就是「Rails for PHP Developers」。幾乎八成常用的PHP函數,都可以在那找到對應的Ruby API。你只要在該網站的搜尋欄中輸入你想查的 PHP 函數名稱,若該網站有整理,它就會告訴你這個 PHP 函數對應的 Ruby API 是什麼,還附帶程式範例。如下圖所示。

rails for php developers sample

我前陣子將我以前寫的一些PHP工具程式用Ruby改寫時,靠這個網站省下許多翻手冊的時間。我相信有了它之後,PHP程序員開始寫Ruby程式時,會感到相當愉快。

PS. 我仍然很喜歡PHP。只是身為一個程序員,擁抱三四種程式語言是很正常也很合理的。


Posted by shirock at 樂多Roodo!21:55回應(1)引用(0)Ruby
標籤:Ruby,PHP

2009年11月11日

PHP的中介編程與反射能力示範

本文是我試探不同程式語言的中介編程與反射能力系列文章中的第二部份,關於 PHP 的內容。 基本上,我指的是 PHP5 。

PHP 雖然被認為是動態語言,但語法上卻又具有許多靜態語言的性質,這使得它被認為「不那麼動態」。 尤其它在引入 OOP 能力時,學了不少 Java 語言的方式,因此限制了 PHP 的表達能力。 例如 PHP 也將型別分成原始型別(primitive types)與個體型別,套用 Java 的 class 與 interface 語法, 功能相似的反射類別等等。儘管如此,PHP 還是具有一些 Java 語言沒有的能力,故能達到比 Java 語言更高的靈活度。所以在實作本文所需範例時,仍比 Java 語言簡單。

...繼續閱讀

2009年11月10日

再探 JavaScript的中介編程 foreach

網友 WanCW 在 JavaScript的中介編程與反射能力示範 一文中回應 文章中的 foreach() 並未產生新的程式或是修改現有的程式,好像不太能算是 metaprogramming?

並非如此,其實 foreach 在中介編程(metaprogramming)的領域是經典樣式。只是我上文的例子太精簡,以至於看不出它的威力。嗯,如果不來個複雜點的程式碼,確實不容易看出 foreach 到底可以幫我們省下多少程式碼。我就來個複雜點的示範吧。

...繼續閱讀