每個軌道上的第一個練習,都是非常簡單的「Hello, World!」練習。
這個練習的重點,在於快速確認所有環節是否正確接在一起。它會確認使用者是否正確安裝了程式設計環境、知道怎麼執行測試,並且能讓測試通過。除此之外,對於 Exercism 命令列客戶端(CLI)來說,它也能確保使用者已安裝並正確設定 CLI,並且網站能為這個練習提供正確的檔案,不會附帶任何不必要的產物。最後,它確保使用者熟悉整個循環:用 CLI 下載練習、在自己的本機開發環境中解題,再把解答提交回網站。
換句話說,這其實還不是要學語言本身的什麼東西。我們的目標就是做到極度簡單。
這大概也會是把軌道儲存庫設定正確的過程中,最困難的一部分,因為實作一個練習牽涉到許多互相牽動的環節。
「Hello, World!」練習有一些特別的規則:
prerequisites
practices
「Hello, World!」練習(其實 Exercism 上的所有練習都一樣)需要一組特定的檔案:
在建立「Hello, World!」練習之前,你需要先決定一些依軌道而定的檔名與檔案路徑(測試套件、虛設實作、範例實作,以及任何其他檔案)。
經驗法則是使用對該語言而言道地的名稱。如果沒有特別強烈的偏好,就優先選擇較淺的目錄結構。範例實作必須能被 CI 腳本辨識,因此建議挑一個所有練習都能使用的通用基底名稱,例如example、sample或reference-solution。
決定好依軌道而定的檔案路徑後,你應該在根目錄的config.json檔案中的files鍵設定它們。files鍵會作為所有練習的範本,讓任何工具(等一下我們會用到一些)知道要到哪裡找檔案。你可以使用各種佔位符,輕鬆設定練習的 slug(這裡是hello-world)。
如果你的軌道檔案使用 PascalCase,files鍵可能長這樣:
"files": {
"solution": [
"%{pascal_slug}.cs"
],
"test": [
"%{pascal_slug}Tests.cs"
],
"example": [
".meta/Example.cs"
]
}
範例檔案應該存放在.meta目錄中。
更多資訊請參閱 files 鍵的文件。
指定好檔案路徑範本後,你就可以在軌道的根目錄執行以下命令,快速產生「Hello, World!」練習的檔案:
bin/fetch-configlet
bin/configlet create --practice-exercise hello-world
想讓網站把你列為這個練習的作者,請依照以下步驟:
在練習的.meta/config.json檔案中:
authors鍵要做到這點,你需要把 Exercism 帳號連結到 GitHub。你可以在網站上的設定頁面的整合區塊這麼做。
練習作者也會獲得聲譽。
較新的軌道儲存庫可以使用bin/add-practice-exercise腳本(原始碼)來新增練習:
bin/add-exercise -a <github_username> two-fer
如果你正在處理的軌道儲存庫沒有這個檔案,歡迎透過上面的原始碼連結把它複製到你的儲存庫。
樣板檔案建立好之後,接著你必須:
新增練習的關鍵之一就是加入測試。大致說來,實作上述練習時有兩個選擇:
canonical-data.json 中的測試案例,從零開始實作測試https://exercism.org/exercises/hello-world就能概覽哪些軌道實作了某個特定練習)。對於「Hello, World!」練習,只會有一個測試案例,所以兩種做法應該都可以。
範例實作檔案應該包含通過測試所需的程式碼。
虛設檔案裡的解答應該幾乎能通過測試,但要把「Hello, World!」這段文字換成「Goodbye, Mars!」。小提示:你可以直接複製、貼上再修改範例解答。
完成練習後,請把你的 GitHub 使用者名稱加到練習的.meta/config.json檔案裡的"authors"陣列。這樣我們才能正確標註你是這個練習的建立者。
要驗證練習是否設定正確,你可以使用 configlet 工具內建的 lint 功能。
第一步是取得configlet工具,我們為此建立了兩個腳本:
bin/fetch-configlet:在 *nix 或 macOS 上執行這個bin/fetch-configlet.ps1:在 Windows 上執行這個從軌道儲存庫的根目錄執行其中一個腳本,就會下載bin/configlet或bin/configlet.exe執行檔。
接著你可以執行 bin/configlet lint 來檢查練習是否正確。
configlet很可能會回報以下錯誤:
The `tags` array is empty:
/path/to/track/config.json
這個錯誤會在準備上線步驟中修正,所以你可以:
每當有東西被推送到main或開啟 pull request 時,configlet工作流都會自動執行configlet lint。