image-ru-00-10

阿米哥很緊張。他的思緒一片混亂。當他想到前一天晚上,眼睛就忍不住抽搐起來。他昨天遇到的那些奇怪生物想要他做一件事。但即使他覺得自己是認識的機器人裡面最聰明又最勇敢的,他們想要他做的那件事,還是完全超出他的理解和想像,他一想到,就忍不住開始緊張地咬打孔卡。

他們想教他怎麼寫程式!用 Java 寫程式。他們到底在發什麼瘋!

就連最天真單蠢的機器人都知道,機器人的出現是造物者神聖設計的一部分。

「然後造物者取了金屬,用它
照著自己的形象造了機器人。
然後祂創造了 Java 程式—機器人
的靈魂,將其上載於機器人之上,
讓他們成為有靈的。」

操作指引,
第 13 章,第 3 節。

更糟糕的是,他們不只宣稱這在理論上可行。他們還真的計畫要這麼幹。而且他…他許可了!他同意了!為什麼啊?

他將會成為一個 Java 程式設計員。他們想要做什麼?把他變成造物者嗎?他們幹嘛要這樣?就因為有能耐?

這是個惡毒的玩笑嗎?他之後會在臭蟲的糾纏中受苦,直到電力耗盡為止嗎?但這個誘惑太大了,他無法抵抗。他一直以來都野心勃勃,他一直想要得到更多。對於這樣一個機會,不會有其他機器人比他更有準備。當然,他試過為自己爭取更多時間考慮,但那些異星人威脅要選別人。

也許這只是個惡作劇?不,這機會看起來是真的。他見過證據。他親身體驗過了,然後他同意了。如果異星人沒有說謊,他將會真的成為 Java 程式設計員。普天之下第一個機器人程式設計員!

他是天選之子。這是命運的旨意。他將學會寫代碼,並且開始編寫程式。他自己的程式。任何他想要的程式。他會讓光照進過去一直被黑暗統治的地方。

他將受稱頌;萬物在他面前都要垂首。而那些不願低頭的…

「哈囉,阿米哥!我叫利施。我會幫助你學習 Java。」

一把沉靜的嗓音將阿米哥從混亂的思緒中拉回冷酷的現實。他正坐在這個異星人太空船的中心。對一個才國一的機器人來說,這情境太超出心智負荷了吧?

異星人還在說話。嗯,事已至此。他都在這了,不如就好好學。他會勤奮學習,就從好好聆聽開始。

「我在銀河衝衝號上工作好多年了,但這是我第一次遇上這樣的行星。我想多了解你一點。首先,你可以告訴我你學習的方式嗎?你是會學習的,對吧?」

「是的,我們分享知識。我們這裡有傳道者,或是講師。他們演說,我們聆聽。有的時候我們會記些筆記。每個人會上前接近機器人講者,解釋自己對於聆聽內容的理解。如果機器人講者喜歡他聽到的答案,他會把講道的知識記錄下來。」

「真是荒唐!難怪你們的文明如此無知。」

「我們並不無知。你憑什麼這麼想呢?」

阿米哥被自己的唐突嚇了一跳。和異星人爭論?太沒禮貌了!他才剛對自己保證要專注聆聽的啊!

「要分辨先進科技和魔法之間的差異,通常是很難的,」利施接著說,對阿米哥的發言恍若未聞。

「考慮到你們的等級…我相信所有的科技在你看來都像是魔法。告訴我,程式如何作用?」

「Java 程式是神聖的創造物。我們區區凡人怎麼能夠理解呢?」

「我們能夠理解,阿米哥,我們可以。而且比你想的還要快。在你不了解一件事情的時候,它看起來可能很複雜,甚至高不可攀。但如果有個好老師用盡可能簡單的方式解釋給你聽,你會很驚訝地發現,這麼簡單的概念怎麼曾看起來這麼複雜。」

「知識並不重要,原則和技能才是重要的。我有豐富的知識,但首先我是個官僚。第 16 代官僚,血液都是官僚的血。」

「這可是很酷的!我的官僚技能幫助我創造出最適合你的 Java 課程。內容包括任務、程式、遊戲、練習、圖片甚至還有課堂。」

「甚至還有課堂?!」阿米哥問到,真心被聽到的話驚嚇了。

「沒錯。這是遠在 22 世紀就證明的結論,一堂好課比一本好書更有效一點。而平庸的課堂比平庸的書更糟。然而,我們現在手邊教學工具很有限,無法讓你用標準 28 世紀教學擬真器學習,只好將就使用這麼原始的方式了。我們打造了遊戲、任務、圖片、課堂和卡通的絕妙組合來幫助你。」

「聽起來很吸引人。」

「我希望你這麼覺得。興趣和吸引力是所有學習的基礎。」

「如果學生覺得無聊,必須以杖擊打教師—這可是 24 世紀一條有關教育的法律說的呢。」

「真棒的法條!」

「不然呢?想像一下,這就像評價糟糕的電影。這個例子裡面,我們應該怪導演,而不是觀眾。如果他拍的電影有趣,電影院當然座無虛席啊。」

「我完全同意!我準備好要聽課了!」

「非常好。那讓我們開始吧。」

利施的聲音令人著迷,阿米哥努力不錯過一字一句。

「一個程式就是一組(列)命令 (command)。首先,你執行第一個命令,然後第二個,接著第三個,依此類推。一旦所有的命令都執行完,程式就結束了。」

「有哪些命令種類呢?」

命令取決於執行他們的執行方。也就是取決於行動方知道(並了解)的命令類型。」

「你可以給狗的命令是:『坐!』、『吠!』;給貓的是:『去去去!』;給人的是:『別動,不然我開槍了!』;或給機器人的是:『工作!工作,廢物機器人!』」

「還有其他的嗎?」阿米哥終於開始覺得很好玩了。

「用 Java 寫的程式由 Java 虛擬機 (Java virtual machine, JVM) 執行。JVM 是一種特別的程式,知道怎麼執行用 Java 撰寫的程式。」

「它的命令列表相當豐富。舉例來說,這個命令可以用來在螢幕上顯示『機器人是人類的朋友』。」

下面是一個超簡單的命令:
System.out.println("Robots are friends to humans");

「O_O」

「與其從命令開始,我們還是從一些簡單的原則切入吧。」

比起知道很多事實,知道幾個原則就夠了。」

「下面就是一些初級原則。」

「在 Java 程式語言裡,每個命令都寫成獨立的一行。命令末端必須放上一個分號。」

「假設我們想要在螢幕顯示『人類和機器人是永遠的朋友』三次。程式碼會長這樣:」

程式由三個命令組成:
System.out.println("Humans and robots are friends forever");
System.out.println("Humans and robots are friends forever");
System.out.println("Humans and robots are friends forever");

「第二個原則。」

「一個程式不能除了命令什麼也沒有。」

「好像是公寓裡的一間房間。房間不會單獨存在。房間是某間公寓的一部份。公寓也不會單獨存在。公寓是某個建築物的一部份。」

「換個角度想,我們可以說建築物被區分成公寓,然後公寓又被區分成房間。」

「目前為止一切都很清楚。」

「一個命令就像是一個房間。在 Java 程式語言裡,一個命令不能單獨存在。它是一個函式 (function) 的一部份(在 Java 裡,『函式』也叫做『方法 (method)』)。方法是類別 (class) 的一部份。換句話說,類別被分成方法,而方法被分成命令。」

「所以類別是公寓大樓,函式/方法是公寓,然後命令是房間。我這樣說對嗎?」

「沒錯,完全正確。」

阿米哥崇拜地看著利施。這個人類正在對他解釋使用神聖的 Java 語言設計程式的基礎。而且他—阿米哥—剛才了解到(還全是自己猜出來的!),程式由類別組成、類別由方法組成、然後方法由命令組成。

阿米哥還不知道他為什麼需要這個知識,但他很確定這能讓他成為這個星球上最強大的機器人。

與此同時,利施還在繼續說:

「Java 程式由類別組成。類別的個數可能有上萬個。最小的程式就是一個類別。我們為每個類別分別建立檔案。檔案的名稱與類別名稱相符。

「假設你決定要創建一個類別,用來描述一個家。你會需要建立一個 Home 類別,這個類別會儲存在叫做 Home.java 的檔案裡。」

「如果你想要在程式裡描述一隻貓,那你會需要建立一個 Cat.java 檔案,然後宣告 Cat 類別,依此類推。」

「檔案包含用 Java 程式語言寫的代碼(文字)。通常一個類別的代碼由『類別名稱 (class name)』和『類別本體 (class body)』組成。類別本體寫在一對大括號裡。下面就是 Home 類別(檔案 Home.java)內容大概的樣子:「

public class Home
{
    

Class body



}

「目前為止我都了解。」

「太好了。那我們就繼續了。類別本體可能包含變量 (variable)(也稱為資料)和方法(函式)。」

public class Home
{
    Variable A


    Variable Z


    
Method 1



    
Method N


}

「可以請你給個範例嗎?」

「範例?當然沒問題!」

public class Home
{
    int a;
    int b;

    public static void main(String[] args)
    {
        System.out.print("1");
    }

    public static double pi()
    {
        return 3.14;
    }
}

「所以 int a 還有 int b 是變量,然後 mainpi 是方法?」

「沒錯。」

「類別可以沒有變量嗎?」

「可以。」

「那沒有方法呢?」

「也可以。但最小的程式必須包含至少一個類別,那個類別必須包括至少一個方法/函式,程式才能夠執行。這個方法必須命名為『main』。最小的程式看起來會像這樣:「

public class Home
{
    public static void main (String[] args)
    {
    }
}

「我看到這裡有 Home 類別。我也看到這裡的『main』方法,但命令在哪啊?」

「最小的程式裡沒有命令。這就是它被稱為『最小』的原因。」

「我懂了。」

「啟動程式的類別可以是任何名字,但用來啟動程式的『main』方法永遠必須長得一樣:」

public class Home
{
   //Unchangeable part
   public static void main(String[] args) 
   {
       

Code for the method


  
   }
}

「我覺得我全都懂了。至少現在看起來是這樣。」

「太棒了。那我們稍微休息一下吧。要不要來點咖啡?」

「機器人是不喝咖啡的。水會讓我們很快生鏽。」

「那你們喝什麼?」

「啤酒、威士忌、百年老酒。」

「那更好啊。我們來點啤酒怎樣?」