前言
在本文中,我們介紹 Deno 程式設計的基本概念。
Deno 程式的副檔名
Deno 程式的副檔名有兩種,使用 TypeScript 撰寫時,副檔名為 .ts ,使用 JavaScript 撰寫時,副檔名為 .js 。應用程式 (application) 和模組 (module) 都使用相同的副檔名。
由於 TypeScript 即可涵蓋 JavaScript 的特性,而 Deno 對 TypeScript 有原生支援。實務上,幾乎所有的 Deno 程式都會以 TypeScript 來撰寫,保留 JavaScript 僅是相容性考量。
第一個 Deno 程式
以下是 Deno 版本的 Hello World 程式:
console.log('Hello World');
執行 Deno 程式
現階段 Deno 是以直譯的方式來執行程式,Deno 程式會以原始碼的形態來保存和散佈。可參考以下虛擬指令:
$ deno run path/to/source.ts
大小寫敏感性 (Case Sensitivity)
如同 JavaScript 和 TypeScript,Deno 程式碼會區分大小寫。
空白 (Space)、縮進 (Indention)、換行 (End of Line)
在大部分情形下,Deno 程式不嚴格區分空白、縮進、換行,這些排版元素僅是為了讓程式碼更美觀。既然 JavaScript 程式碼在發佈到瀏覽器端時可以縮小,Deno 程式碼不嚴格區分空白是可理解的。
註解 (Comment)
註解是用來說明程式的自由文字 (free text),本身不是程式碼 (code)。Deno 有兩種註解:
- 一對
/*
和*/
,用於多行註解 //
,用於單行註解
由於程式碼本身即可說明該程式的行為,註解並不是用來重覆說明這些已知的事情。相對來說,註解是用來說明撰寫程式時的想法及意圖,或是用來說明相對少見的演算法。有時候註解會用來撰寫 API 文件,但要開發工具有支援才行。
主函式 (Main Function)
Deno 沒有主函式的概念,可以把指令直接寫在命令稿頂層。但 Deno 有一種類主程式的語法:
if (import.meta.main) {
/* Implement your main program here. */
}
這種程式碼區塊用在混合模組和應用程式時的情境。對於單純的應用程式,不需要刻意用這種寫法。
離開狀態 (Exit Status)
程式在結束時,會回傳整數給系統,這個回傳值即為程式的離開狀態。電腦程式利用離開狀態來表示程式為正常結束或是異常結束,這是跨語言的特性。
在離開狀態的慣例中,0
代表正常結束,1
代表異常結束,這是從 C 就留下來的慣例。有些電腦程式會回傳其他值,但離開狀態除了 0
和 1
兩種情境外,並不具有可攜性。不建議在電腦程式中設計複雜的離開狀態。
離開 Deno 程式並回傳值的函式為 Deno.exit。當省略回傳值時,即視為回傳 0
:
Deno.exit();
若要回傳非零值,則要明確設置回傳值:
Deno.exit(1);
Deno 程式的專案架構
Deno 沒有規範專案的架構,也不需要 package.json 或其他專案設定檔。但我們可藉由觀察現存的 Deno 專案,來看開發者如何實作 Deno 專案。
按照 Deno 社群目前的慣例,會在專案中放入 mod.ts 命令稿,在該命令稿中輸出專案的函式和類別。函式庫使用者要引入該函式庫時,就載入 mod.ts 所在的 URL 即可。 mod.ts 命令稿本身可放在專案根目錄或特定子目錄下,只要有正確地在 mod.ts 引入其他函式和類別即可。
但在專案中使用 mod.ts 命令稿只是慣例而非規定,仍然有一些 Deno 專案未在專案中加入 mod.ts 命令稿,而使用其他的名稱來命名函式庫的進入點。
此外,Deno 也沒有規範專案要用巢狀架構或扁平架構。這是因為要相容於 TypeScript,不能像 Golang 在一開始就把專案架構的規範寫進主程式中。或許在過一陣子,Deno 官方團隊會以準則 (guide) 或最佳實務 (best practice) 的方式告訴 Deno 程式設計者最合乎 Deno 社群慣例的專案架構。
Deno 的撰碼風格 (Coding Style)
撰碼風格不是編譯器/直譯器所設置的規則,而是一種對撰碼的建議事項。藉由一致的撰碼風格,可以讓程式碼更容易閱讀。在採用撰碼風格時,首重於在開發團隊內一致,之後才是和社群一致。但撰碼風格並不是宗教,不用信奉某種撰碼風格。
雖然 Deno 沒有官方的撰碼風格,但可以從 Deno 貢獻者的撰碼風格略知 Deno 官方團隊對撰寫 Deno 程式碼的想法。
由於 Deno 使用 TypeScript 做為其語言,參考 TypeScript 社群的做法也是不錯的。雖然 TypeScript 也沒有官方的撰碼風格,可參考 TypeScript 貢獻者的建議事項來撰寫 TypeScript 程式碼。
繼續學習 Deno
本來筆者想要繼續寫 Deno 程式的教學文章,但 Deno 和 TypeScript 是雷同的,差別只在於 API 相異。所以,建議讀者可以找一下 TypeScript 相關的教學資料,但是用 Deno 執行範例程式。或許我們日後會再加上一些 Deno 相關的內容,但不會介紹語法。