既然環境已設置完畢,現在是時候編寫您自己的第一個腳本了!在本課中,我們將通過編寫一個簡單的計算器應用程序來學習一些編程基礎知識。該實踐過程將向您介紹:編譯源代碼、運行應用程序、聲明腳本變量、定義和調用腳本函數、向腳本函數傳遞參數以及訪問命令行參數。 |
- | 編寫一個簡單的計算器 |
- | 聲明腳本變量 |
- | 定義和調用腳本函數 |
- | 向腳本函數傳遞參數 |
- | 從腳本函數返回值 |
- | 訪問命令行參數 |
首先單擊 calculator.fx
並將顯示的內容保存到一個文件中。您的文件中應當包含以下代碼:
def numOne = 100; |
JavaFX Script 編程語言是編譯型語言,這意味着您編寫的任何源代碼都必須首先轉換爲 Java 字節碼(Java 虛擬機所採用的語言)才能在系統上運行。
以下命令將編譯計算器腳本:
javafxc calculator.fx |
在編譯之後,您將發現相應的 Java 字節碼已經生成並且放置在一個名爲 calculator.class
的文件中。您還會注意到創建了另一個文件:calculator$Intf.class
。該支持文件是運行此應用程序所必需的,您可以將其忽略,但不要刪除它。
現在您可以使用以下命令運行經過編譯的類(在 Java 虛擬機中):
javafx calculator |
輸出爲:
100 + 2 = 102 |
此應用程序可能很小,但它向您介紹了一些重要的編程語言結構。瞭解這些結構是掌握 JavaFX Script 編程語言的第一步。
注:JavaFX Script 編程語言學起來並不難,但是,由於這是您首次接觸它,因此我們將只在適合現有應用程序的詳細程度上討論每個新結構。目的是爲了清晰明瞭。必要時,我們將在剩下的課程中討論高級用法。
讓我們仔細看一下 calculator.fx
示例,稍後我們將擴展此示例。
代碼的第一部分定義一些腳本變量:
def numOne = 100; |
腳本變量是使用 var
或 def
關鍵字聲明的。二者之間的區別在於:在腳本的整個生命週期內都可以爲var
變量賦予新值,而 def
變量在被首次賦予新值後將保持不變。我們已經爲 numOne
和 numTwo
賦予了特定的值,但 result
卻未初始化,因爲此變量將用來存放計算結果。
變量名通常由字母和數字組成,但不能以數字開頭。約定使用小寫字母;如果名稱由多個詞組成,則將每個後續詞的第一個字母大寫,如上例中所示。
注:您可能還注意到,我們並沒有專門將這些變量指定爲存放數值型數據(而不是字符串或任何其他類型的數據)。編譯器非常智能,可以根據使用變量的上下文來弄清您的意圖。這稱爲類型推斷。類型推斷可以使腳本程序員的工作有所簡化,這是由於它省去了聲明變量與之兼容的數據類型的工作。
源代碼的其餘部分定義一些用來對這兩個數字執行加、減、乘和除操作的腳本函數:
function add() { |
函數是用來執行特殊任務的可執行代碼塊。在我們的示例中,每個函數都執行一種數學計算,然後輸出結果。將代碼組織成函數是一種常見的做法,這會使程序更易於閱讀、使用和調試。函數的主體通常進行縮進,這樣就便於查看函數的開始和結束位置。
只有被明確調用之後,函數代碼纔會實際執行。這樣就可以在腳本的任何位置運行函數。將函數調用放在函數定義之前還是之後無關緊要;在我們的示例源文件中,函數是在實際定義之前調用的。
函數調用如下所示:
add(); |
接下來,我們將更新計算器腳本函數以接受參數。參數是指在調用函數時所傳入的特定值。通過此方法,我們的計算器可以對任意兩個數字(而不只是硬編碼到 numOne
和 numTwo
變量中的值)進行計算。
var result; |
此腳本的輸出現在爲:
100 + 10 = 110 |
在該版本中,我們刪除了 numOne
和 numTwo
變量,因爲不再需要它們了。我們修改了函數定義,要求傳入兩個數字(作爲參數)。每個參數都指定其名稱,後跟一個冒號,冒號後跟其類型。當一個函數接受多個參數時,用逗號分隔每個參數。
可以選擇讓函數向調用它的代碼返回值。例如,可以對 add
函數進行修改以返回結果-粗體文本顯示了具體做法:
function add(argOne: Integer, argTwo: Integer) : Integer { |
現在,可以按如下方式調用 add
函數:
var total; |
如果未指定返回值,函數會默認返回 Void
。
我們可以進一步修改計算器腳本以接受命令行參數。這樣最終用戶就可以指定要在運行時計算的數字。
var result; |
此更改引入了幾個新的結構,其中最值得注意的是添加了 run()
函數。與其他函數不同,run()
是充當腳本主入口點的特殊函數。run()
函數會將所有命令行參數存儲在 args
(一個 String
對象序列)中。(序列是對象的有序列表,與其他編程語言中的數組相似;表達式和運算符中詳細介紹了序列。)
爲了運行此腳本,用戶現在必須在運行時指定第一個數字和第二個數字:
javafx calculator 100 50 |
輸出現在爲:
100 + 50 = 150 |
注:在所有以前版本的計算器腳本中,我們沒有明確提供run()
函數,我們只是在腳本級別鍵入了代碼,然後代碼按照預期方式運行。在這些情況下,編譯器會在無提示的情況下生成一個不帶參數的run()
函數,並將要執行的代碼放在該函數中。
我們還重新使用了 numOne
和 numTwo
變量,這次將它們的作用域限制在包含它們的 run()
方法。我們的計算器函數接受數字,但命令行參數是字符串;因此,我們必須首先將每個命令行參數從 String
轉換爲 Integer
,然後才能傳遞它們以進行處理。
// Convert Strings to Integers |
爲此,我們藉助於 Java 編程語言來執行實際的類型轉換。根據需要利用現有的 Java 生態系統會給這個原本簡單的腳本語言帶來強大的功能。