2009年1月9日

Java輕鬆玩 - 初學Groovy的第一課

Java輕鬆玩(Java for Fun)」 系列文章,想要讓一些有電腦基礎、但不太會寫程式的朋友,也能夠在喝杯咖啡的午後時光,悠閒地利用Java創作電腦程式。寫程式是件有趣的事,就像小時候 玩的積木,能夠訓練邏輯思考及培養創造力,也純粹就是為了好玩而已。有趣的前提必須是「為自己的樂趣寫程式(Coding for Fun)」,自己能夠做出工具解決問題,將會有充滿成就感的快樂。我們假設你每天都能有30分鐘的時間可以"玩樂",先花個10分鐘把我們的教學短文看 完,跟著完成設定及範例程式碼,接著就能用20分鐘把它重新組合,用您獨特的想法創作出自己的程式。

寫在最前面

這篇文章開始告訴你Groovy如何使用,並假設你已經在電腦安裝JDK及Groovy,如果你還沒準備好,建議先從《Java輕鬆玩 - JDK與Groovy安裝篇》這篇開始。

我們未假設讀者需要熟悉任何一種程式語言,即使沒有任何寫程式的經驗,也可以照著文中所提供的指示進行。我們期望讀者能夠自行發揮想像力,將我們所提供的範例,隨意修改以遨遊天馬行空的想像空間。不用擔心程式寫錯會被處罰或當掉,電腦會告訴你錯在哪裡,同時我們也為您的電腦擔保,它不會因為你寫的程式錯誤太多次,而有爆炸毀損之類的疑慮。請放心,我們教你寫的程式碼,會以不去修改到系統為原則,讓你可以盡情地胡亂寫。

這是我們所希望能提供的「Play-and-Error」程式設計學習過程,請記住,一切都只為了盡情玩樂。

認識Groovy

如果你喜歡考古,或是打破沙鍋問到底是你做人的原則,一定要清楚地知道什麼是Groovy,你才願意用它的話,你可以參考《Groovy(programming language)(維基百科)》或是Groovy的官方網站

官方網站是這樣介紹Groovy:
  • is an agile and dynamic language for the Java Virtual Machine
  • builds upon the strengths of Java but has additional power features inspired by languages like Python, Ruby and Smalltalk
  • makes modern programming features available to Java developers with almost-zero learning curve
  • supports Domain-Specific Languages and other compact syntax so your code becomes easy to read and maintain
  • makes writing shell and build scripts easy with its powerful processing primitives, OO abilities and an Ant DSL
  • increases developer productivity by reducing scaffolding code when developing web, GUI, database or console applications
  • simplifies testing by supporting unit testing and mocking out-of-the-box
  • seamlessly integrates with all existing Java objects and libraries
  • compiles straight to Java bytecode so you can use it anywhere you can use Java
忘記一件重要的事,可別把上面這段文字看完。除了惱人的豆芽菜,它還有一堆無關緊要的術語,如果你想要全部弄懂,建議先去拿個Computer Science的學位,但根據我的經驗,很多拿到學位的朋友至今還是不求甚解。

如果你曾經學過Java,但跟它仍不是很熟,而你也聽說Groovy的語法跟Java很像,甚至有人說「Groovy Is Java」,雖然這些很可能是真的,但是在開始把寫程式當作玩樂時,調整心情和步調最好的方法,就是忘記你對Java曾經學過的一切。

使用GroovyConsole

若你正確安裝Groovy,在「開始」的應用程式選單中,會有Groovy這個目錄(如下圖)。


請點選執行「Start GroovyConsole」,GroovyConsole是Groovy內建的一個小工具,對於練習寫小片段的程式碼很管用。


在GroovyConsole的執行畫面中,白色底的「編輯區」就是用來輸入程式碼的地方,而下方淺色底的區域則是「訊息輸出區」,用來顯示程式執行結果或錯誤訊息。

請試著將下方的粗體字程式碼輸入,這是一個傳統Java用來輸出文字訊息的語法。

System.out.println("嗨!笨蛋");

輸入完成之後,有三種方式可以執行程式,例如下圖中位於「Script」選單或工具列上的「Run」按鈕,可以用滑鼠點選,第三種方法則是按下「Ctrl」+「R」的組合鍵。

執行後將會在「訊息輸出區」看見執行結果,很簡單地將程式碼中設定的文字給印出來。


恭喜你!到此為止,你已經正式開始寫程式。

若你曾經寫過Java程式,可能會發現一些差別,以往你想要印出一段文字,例如「Hello World」,至少必須要寫出下列的程式碼。

public class Hello {
  public static
void main(String[] args) {
    System.out.println("Hello World");
  }
}


更麻煩的事情是,你還必須將檔案儲存成「Hello.java」,甚至你還要執行「javac Hello.java」及「java Hello」的指令,才能看到相同的結果。

用Groovy寫程式,帶給你的第一個便利之處,就是你不用再委屈自己使用「記事本+命令提示字元」,也不用再委屈電腦使用Eclipse、NetBeans之類速度慢又耗資源的開發工具,你只要使用這個簡單的GroovyConsole。

化繁為簡的Groovy

你可以試著吧上面public class…的四行程式碼複製到GroovyConsole,將會發現一樣能夠執行,這是一段很標準的Java程式碼,但Groovy卻同樣能夠直接執行,這代表著「Groovy Is Java」可以成立。

But…「Groovy Is Not Java」

可以將複雜的事情變簡單,這讓Groovy又不等同於Java,請試著在GroovyConsole只輸入以下的一行程式碼,夠簡單的吧。

println "Hello World"


你可以看到執行的結果,和那個落落長的Java五行程式碼,作用是一模一樣的,但是卻有不少差異:
  • 不用宣告public類別
  • 不用宣告main函式
  • 不用每一行後面的分號「;」
  • 不用System.out.的套件指定
  • 不用println函式的括號「(…)」
如果你曾經學過Java,將很容易看懂上述的說明;如果不是也沒關係,這並不影響學習的進度,你只要學會在GroovyConsole輸入程式碼並執行,就已經相當足夠。

在你開始寫Groovy程式之前,請記住一些原則:
  • 能夠複製貼上就解決的事情,千萬別笨到自己從頭做到尾
  • 能夠偷懶的地方,就別裝勤勞假認真
  • 簡潔至上!盡量省略那些沒用的語法,結果能夠達到最重要;除非你目的不是寫程式,而是想練打字或打發時間
  • 總之,能夠只寫一行,就別去寫三行或更多,沒人會因此付你更多酬勞
  • 更重要的一點是,若你不幸地從事程式設計工作,而你學會用Groovy在更短的時間寫完程式,千萬別讓你的老闆知道
很快地,又結束了這次的教學,你只學到一行「println "Hello World"」的Groovy程式碼,如果你真的開始喜歡寫程式,那你可以考慮寫多行一點的程式碼:

println "Hello World"
println "Hello World, again"
println "Hello World, again, again"


其實想讓你瞭解的事情是,當你學會寫以下這段的時候,你可能覺得自己很厲害、有點成就感。

public class Hello {
  public static
void main(String[] args) {
    System.out.println("Hello World");
  }
}

但是當你學會下面這樣寫的時候,你將發現勤勞跟愚蠢之間隱匿的等號。

println "Hello World"

別以為會一直這麼簡單下去,接下來的教學,將會有一百八十度的大轉變,讓你有如坐雲霄飛車到頂端開始墜落的感覺,若你開始感到那麼一點受不了的時候,千萬別忘記這一切都只是在玩樂。

* 本文發表於玩物尚誌,《Java輕鬆玩》系列文章的網址為「http://blog.lyhdev.com/search/label/JavaForFun」。版權所有,採用「創用CC授權」條款,歡迎非商業用途之分享與引用,並請保留作者或出處之標示。

4 則留言:

  1. println "好簡單喔,我學會囉!"
    println "文筆清楚又風趣,多寫幾篇就可以出書囉!"

    回覆刪除
  2. 很好的教學,喜歡你筆風,加油!

    回覆刪除

lyhcode by lyhcode
歡迎轉載,請務必註明出處!