<?xml version="1.0" encoding="utf-8"?> 
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="zh-tw"> 
<title>石頭閒語</title> 
<link rel="alternate" type="text/html" href="http://blog.roodo.com/rocksaying/" /> 
<modified>2009-12-02T01:45:18+08:00</modified> 
<tagline>[Licensed by GNU FDL]
Rock&#039;s Saying 
遊手好閒的石頭成的部落格 
Open Your Mind, Use the Source! 
//
</tagline> 
<id>tag:blog.roodo.com,2009://25223</id> 
<generator url="http://blog.yam.com/" version="1.0">Roodo Blog</generator> 
<copyright>Copyright (c) 2005, </copyright> 
 <entry> 
 <title>從 C++ Template 到 Java Generic，一步一步來</title> 
 <link rel="alternate" type="text/html" href="http://blog.roodo.com/rocksaying/archives/10890551.html" /> 
 <modified>2009-12-01T21:50:58+08:00</modified> 
 <issued>2009-12-01T21:50:58+08:00</issued> 
 <id>tag:blog.roodo.com,2009://25223.10890551</id> 
 <created>2009-12-01T20:35:05+08:00</created> 
  <author>
 <name></name> 
 <url>http://blog.roodo.com/rocksaying/</url> 
 
</author> 
<dc:subject>C/C++</dc:subject> 
<summary type="text/html" mode="escaped">
<![CDATA[

Java 實作了泛型(generic)機制以實現 C++ 樣板(template) 的一部份能力，兩者的語法乍看之下也有些相似。
雖然我覺得 C++ 樣板很難搞，而且兩者的語法有點像，但是相較於完全陌生的 Java 泛型，我用起 C++ 樣板來還是比較熟練的。很自然的，當我試圖要用 Java 的泛型重構程式碼時，我會先從 C++ 樣板的觀點來思考。


我將日前工作中碰到的一段我想用泛型重構的程式碼，取其大綱出來練習。本文紀錄了大致的改寫過程。
]]>
</summary> 
<content type="text/html" mode="escaped" xml:lang="zh-tw" xml:base="http://blog.roodo.com/rocksaying/archives/10890551.html">
<![CDATA[
	<p>
Java 實作了泛型(generic)機制以實現 C++ 樣板(template) 的一部份能力，兩者的語法乍看之下也有些相似。
雖然我覺得 <a href="http://blog.roodo.com/rocksaying/archives/2583288.html">C++ 樣板很難搞</a>，而且兩者的語法有點像，但是相較於完全陌生的 Java 泛型，我用起 C++ 樣板來還是比較熟練的。很自然的，當我試圖要用 Java 的泛型重構程式碼時，我會先從 C++ 樣板的觀點來思考。
</p>
<p>
我將日前工作中碰到的一段我想用泛型重構的程式碼，取其大綱出來練習。本文紀錄了大致的改寫過程。
</p>
	<a href="http://blog.roodo.com/rocksaying/archives/10890551.html">(繼續閱讀...)</a>]]>
</content>
</entry> 
 <entry> 
 <title>嘗試使用 Java 的 reflection 重構指派資料欄位值的程式碼</title> 
 <link rel="alternate" type="text/html" href="http://blog.roodo.com/rocksaying/archives/10867569.html" /> 
 <modified>2009-11-30T01:03:18+08:00</modified> 
 <issued>2009-11-30T01:03:18+08:00</issued> 
 <id>tag:blog.roodo.com,2009://25223.10867569</id> 
 <created>2009-11-30T00:33:07+08:00</created> 
  <author>
 <name></name> 
 <url>http://blog.roodo.com/rocksaying/</url> 
 
</author> 
<dc:subject>C/C++</dc:subject> 
<summary type="text/html" mode="escaped">
<![CDATA[

如果你熟悉動態語言，你大概會嘗試使用 Java 的反射(reflection)來重構程式碼。我個人提供一個重構經驗，告訴你使用 Java 的反射時，你可能會感到失望。


這是一段透過 Hibernate 進行的資料更新動作。我從使用者端取得要更新的資料項，接著先向 Hibernate 查詢要更新的資料項目是否存在，存在的話再把新的資料內容更新進去。

]]>
</summary> 
<content type="text/html" mode="escaped" xml:lang="zh-tw" xml:base="http://blog.roodo.com/rocksaying/archives/10867569.html">
<![CDATA[
	<p>
如果你熟悉動態語言，你大概會嘗試使用 Java 的反射(reflection)來重構程式碼。我個人提供一個重構經驗，告訴你使用 Java 的反射時，你可能會感到失望。
</p>
<p>
這是一段透過 Hibernate 進行的資料更新動作。我從使用者端取得要更新的資料項，接著先向 Hibernate 查詢要更新的資料項目是否存在，存在的話再把新的資料內容更新進去。
</p>

	<a href="http://blog.roodo.com/rocksaying/archives/10867569.html">(繼續閱讀...)</a>]]>
</content>
</entry> 
 <entry> 
 <title>PHP 5.3/6 新增功能 - Closures, const, and others</title> 
 <link rel="alternate" type="text/html" href="http://blog.roodo.com/rocksaying/archives/10833753.html" /> 
 <modified>2009-11-26T00:53:59+08:00</modified> 
 <issued>2009-11-26T00:53:59+08:00</issued> 
 <id>tag:blog.roodo.com,2009://25223.10833753</id> 
 <created>2009-11-26T00:34:25+08:00</created> 
  <author>
 <name></name> 
 <url>http://blog.roodo.com/rocksaying/</url> 
 
</author> 
<dc:subject>PHP</dc:subject> 
<summary type="text/html" mode="escaped">
<![CDATA[

PHP 5.3 新增特性列表與本部落格的系列文章:


    
    名稱空間 (Namespace)
    

    
    延遲靜態繫結 (Late Static Bindings)
    

    
    新的魔術方法, __callStatic and __invoke.
    

    標記跳躍, Support for jump labels (limited goto) has been added.
    
    就是 goto ，忘了它吧。
    

    HTTP 串流轉接器(HTTP stream wrapper) 現在將狀態碼 200 到 399 視為成功執行。我不曉得為什麼這會列在新功能中。這看來是為了改善 RESTful service 的支援。
    

    
    支援巢狀的例外處理。
    

    
    加入一個垃圾收集器，預設開啟。嗯... PHP 沒有垃圾收集功能嗎？Ok, 原本的垃圾回收機制清潔力不夠。
目前大多數 PHP 程式架構是處於一次性消耗的無狀態環境下，基本上我們都假設程式跑完後行程就自動結束，而行程中配置的資源也會被作業系統回收。
在這種情形下設計出來的 PHP 程式碼，直接搬到 application container 架構執行時，會出現資源佔用不放的問題。
所以這功能應該是為了將來發展 PHP 的 application container 而強化的機制。
    

    閉包、匿名函數(native Closures)(Lambda/Anonymous functions)。
    

    新的即席文件語法(Nowdoc syntax)。
    

    
    關鍵字 const 現在可用於類別定義之外。
    

    
    三元運算子(?:)有縮寫形式。
    




關於 Closures (匿名函數), Const, Nowdoc 等新功能，將於本文中說明。

]]>
</summary> 
<content type="text/html" mode="escaped" xml:lang="zh-tw" xml:base="http://blog.roodo.com/rocksaying/archives/10833753.html">
<![CDATA[
	<p>
PHP 5.3 <a href="http://tw2.php.net/manual/en/migration53.new-features.php">新增特性</a>列表與本部落格的系列文章:
</p>
<ul>
    <li><a href="http://blog.roodo.com/rocksaying/archives/10814499.html">
    名稱空間 (Namespace)</a>
    </li>

    <li><a href="http://blog.roodo.com/rocksaying/archives/10796755.html">
    延遲靜態繫結 (Late Static Bindings)</a>
    </li>

    <li><a href="http://blog.roodo.com/rocksaying/archives/10796767.html">
    新的魔術方法, __callStatic and __invoke.</a>
    </li>

    <li>標記跳躍, Support for jump labels (limited goto) has been added.
    <br/>
    就是 goto ，忘了它吧。
    </li>

    <li>HTTP 串流轉接器(HTTP stream wrapper) 現在將狀態碼 200 到 399 視為成功執行。我不曉得為什麼這會列在新功能中。這看來是為了改善 RESTful service 的支援。
    </li>

    <li>
    支援巢狀的例外處理。
    </li>

    <li>
    加入一個垃圾收集器，預設開啟。嗯... PHP 沒有垃圾收集功能嗎？Ok, 原本的垃圾回收機制清潔力不夠。
目前大多數 PHP 程式架構是處於一次性消耗的無狀態環境下，基本上我們都假設程式跑完後行程就自動結束，而行程中配置的資源也會被作業系統回收。
在這種情形下設計出來的 PHP 程式碼，直接搬到 application container 架構執行時，會出現資源佔用不放的問題。
所以這功能應該是為了將來發展 PHP 的 application container 而強化的機制。
    </li>

    <li>閉包、匿名函數(native Closures)(Lambda/Anonymous functions)。
    </li>

    <li>新的即席文件語法(Nowdoc syntax)。
    </li>

    <li>
    關鍵字 const 現在可用於類別定義之外。
    </li>

    <li>
    三元運算子(?:)有縮寫形式。
    </li>

</ul>

<p>
關於 Closures (匿名函數), Const, Nowdoc 等新功能，將於本文中說明。
</p>

	<a href="http://blog.roodo.com/rocksaying/archives/10833753.html">(繼續閱讀...)</a>]]>
</content>
</entry> 
 <entry> 
 <title>PHP 5.3/6 新增功能 - Namespace</title> 
 <link rel="alternate" type="text/html" href="http://blog.roodo.com/rocksaying/archives/10814499.html" /> 
 <modified>2009-11-24T01:21:27+08:00</modified> 
 <issued>2009-11-24T01:21:27+08:00</issued> 
 <id>tag:blog.roodo.com,2009://25223.10814499</id> 
 <created>2009-11-24T00:20:30+08:00</created> 
  <author>
 <name></name> 
 <url>http://blog.roodo.com/rocksaying/</url> 
 
</author> 
<dc:subject>PHP</dc:subject> 
<summary type="text/html" mode="escaped">
<![CDATA[

Namespace 是 PHP5.3 面向大型專案開發所新增的一項重要功能。並不是說有了 Namespace 就萬事大吉，但至少在結合來自各路好漢的函數庫與功能框架時，不必太擔心名稱衝突的問題了。


PHP 以 namespace 關鍵字指示名稱空間，此指令兼具定義與切換空間的意義。名稱空間的命令方式與一般符號相同，並以 \ (斜線) 作為名稱空間(namespace)的分節符號。它借用檔案系統的目錄樹觀念劃分常數(const)、函數(function)與類別(class)等定義的存在空間 (注意，名稱空間並不支援變數。所有的變數都存在於同一個空間)。
]]>
</summary> 
<content type="text/html" mode="escaped" xml:lang="zh-tw" xml:base="http://blog.roodo.com/rocksaying/archives/10814499.html">
<![CDATA[
	<p>
Namespace 是 PHP5.3 面向大型專案開發所新增的一項重要功能。並不是說有了 Namespace 就萬事大吉，但至少在結合來自各路好漢的函數庫與功能框架時，不必太擔心名稱衝突的問題了。
</p>
<p>
PHP 以 <dfn>namespace</dfn> 關鍵字指示名稱空間，此指令兼具定義與切換空間的意義。名稱空間的命令方式與一般符號相同，並以 <code>\</code> (斜線) 作為<a href="http://www.php.net/manual/en/language.namespaces.php">名稱空間(namespace)</a>的分節符號。它借用檔案系統的目錄樹觀念劃分常數(const)、函數(function)與類別(class)等定義的存在空間 (<span class="Onote">注意，名稱空間並不支援變數。所有的變數都存在於同一個空間</span>)。
</p>
	<a href="http://blog.roodo.com/rocksaying/archives/10814499.html">(繼續閱讀...)</a>]]>
</content>
</entry> 
 <entry> 
 <title>PHP 5.3/6 新增功能 - New magic methods</title> 
 <link rel="alternate" type="text/html" href="http://blog.roodo.com/rocksaying/archives/10796767.html" /> 
 <modified>2009-11-26T19:47:17+08:00</modified> 
 <issued>2009-11-26T19:47:17+08:00</issued> 
 <id>tag:blog.roodo.com,2009://25223.10796767</id> 
 <created>2009-11-22T23:42:36+08:00</created> 
  <author>
 <name></name> 
 <url>http://blog.roodo.com/rocksaying/</url> 
 
</author> 
<dc:subject>PHP</dc:subject> 
<summary type="text/html" mode="escaped">
<![CDATA[

There are two new magic methods, __callStatic and __invoke.



PHP5.3 起新增了魔術方法 __invoke()。
簡單說，就是 C++/C# 中的 operator() 運算子重載。
還新增了魔術方法 __callStatic()，專門負責調用靜態方法。
]]>
</summary> 
<content type="text/html" mode="escaped" xml:lang="zh-tw" xml:base="http://blog.roodo.com/rocksaying/archives/10796767.html">
<![CDATA[
	<blockquote>
There are two new magic methods, __callStatic and __invoke.
</blockquote>

<p>
PHP5.3 起新增了魔術方法 <a href="http://tw2.php.net/manual/en/language.oop5.overloading.php">__invoke()</a>。
簡單說，就是 C++/C# 中的 <code>operator()</code> 運算子重載。
還新增了魔術方法 <a href="http://tw2.php.net/manual/en/language.oop5.overloading.php">__callStatic()</a>，專門負責調用靜態方法。
</p>
	<a href="http://blog.roodo.com/rocksaying/archives/10796767.html">(繼續閱讀...)</a>]]>
</content>
</entry> 
 <entry> 
 <title>PHP 5.3/6 新增功能 - Late Static Bindings</title> 
 <link rel="alternate" type="text/html" href="http://blog.roodo.com/rocksaying/archives/10796755.html" /> 
 <modified>2009-11-26T19:47:25+08:00</modified> 
 <issued>2009-11-26T19:47:25+08:00</issued> 
 <id>tag:blog.roodo.com,2009://25223.10796755</id> 
 <created>2009-11-22T23:31:25+08:00</created> 
  <author>
 <name></name> 
 <url>http://blog.roodo.com/rocksaying/</url> 
 
</author> 
<dc:subject>PHP</dc:subject> 
<summary type="text/html" mode="escaped">
<![CDATA[

PHP5.3/6.0 新增延後靜態繫結(late static bindings)功能。
此功能由關鍵字 static 實現，係對照 self 之功能而出現。


self 關鍵字採用儘早靜態繫結策略，PHP 在解譯語法時，就直接將 self 繫結到它所在的類別。static 關鍵字採用延後靜態繫結(late static bindings)策略，要等到執行到那一段敘述時， PHP 才會根據調用者所屬類別來設定 static 所代表的類別。

]]>
</summary> 
<content type="text/html" mode="escaped" xml:lang="zh-tw" xml:base="http://blog.roodo.com/rocksaying/archives/10796755.html">
<![CDATA[
	<p>
PHP5.3/6.0 新增<a href="http://tw2.php.net/manual/en/language.oop5.late-static-bindings.php">延後靜態繫結(late static bindings)</a>功能。
此功能由關鍵字 <dfn>static</dfn> 實現，係對照 <dfn>self</dfn> 之功能而出現。
</p>
<p>
<dfn>self</dfn> 關鍵字採用儘早靜態繫結策略，PHP 在解譯語法時，就直接將 <code>self</code> 繫結到它所在的類別。<dfn>static</dfn> 關鍵字採用延後靜態繫結(late static bindings)策略，要等到執行到那一段敘述時， PHP 才會根據調用者所屬類別來設定 <code>static</code> 所代表的類別。
</p>

	<a href="http://blog.roodo.com/rocksaying/archives/10796755.html">(繼續閱讀...)</a>]]>
</content>
</entry> 
 <entry> 
 <title>從中介編程與反射能力來談 Java 語言</title> 
 <link rel="alternate" type="text/html" href="http://blog.roodo.com/rocksaying/archives/10717609.html" /> 
 <modified>2009-11-16T02:27:11+08:00</modified> 
 <issued>2009-11-16T02:27:11+08:00</issued> 
 <id>tag:blog.roodo.com,2009://25223.10717609</id> 
 <created>2009-11-15T23:41:17+08:00</created> 
  <author>
 <name></name> 
 <url>http://blog.roodo.com/rocksaying/</url> 
 
</author> 
<dc:subject>C/C++</dc:subject> 
<summary type="text/html" mode="escaped">
<![CDATA[

公司這個月開始一件專案，我分配到用 Java 開發 web service 那一塊。
於是我親身體驗到一本書說的故事。




找一個很聰明，但是沒有 Java 經驗的開發者，讓他去學學 Java web 企業應用的那一堆技術，然後再問問他的想法。問題是兩方面的，首先，它很難；再者，失敗的後果很悲慘。


對我來說，或許這意味者程式碼應該在較高等級的抽象中，而我們無法在 Java 中做到這一點。


《超越 Java》(Beyond Java)，Bruce Tate，O'Reilly出版



我不算聰明的開發者，但十幾年基本功練下來，功底還算紥實。OOP, ORM, Design pattern 這些概念都懂。Web 架構更是熟悉。儘管如此，當我試圖使用 Spring, Hibernate 等框架時，我完全無法理解為什麼 Java 語言可以把一件簡單的事搞成這麼複雜。這件事促成我寫出《不同程式語言的中介編程與反射能力系列文章》。

]]>
</summary> 
<content type="text/html" mode="escaped" xml:lang="zh-tw" xml:base="http://blog.roodo.com/rocksaying/archives/10717609.html">
<![CDATA[
	<p>
公司這個月開始一件專案，我分配到用 Java 開發 web service 那一塊。
於是我親身體驗到一本書說的故事。
</p>

<blockquote>
<p>
找一個很聰明，但是沒有 Java 經驗的開發者，讓他去學學 Java web 企業應用的那一堆技術，然後再問問他的想法。問題是兩方面的，首先，它很難；再者，失敗的後果很悲慘。
</p>
<p>
對我來說，或許這意味者程式碼應該在較高等級的抽象中，而我們無法在 Java 中做到這一點。
</p>
<cite>
《超越 Java》(Beyond Java)，Bruce Tate，O'Reilly出版
</cite>
</blockquote>
<p>
我不算聰明的開發者，但十幾年基本功練下來，功底還算紥實。OOP, ORM, Design pattern 這些概念都懂。Web 架構更是熟悉。儘管如此，當我試圖使用 Spring, Hibernate 等框架時，我完全無法理解為什麼 Java 語言可以把一件簡單的事搞成這麼複雜。這件事促成我寫出《不同程式語言的中介編程與反射能力系列文章》。
</p>

	<a href="http://blog.roodo.com/rocksaying/archives/10717609.html">(繼續閱讀...)</a>]]>
</content>
</entry> 
</feed>