一份可搜尋的參考資料,列出十二個經來源查證的 Hello World 程式,涵蓋 JavaScript、Python、Java、C、C++、C#、Go、Rust、Ruby、PHP、Swift 和 Kotlin——可依語言、執行環境、檔名或簡短程式碼片段進行篩選——這是對於不想在部落格文章、Stack Overflow 解答和各語言說明文件分頁之間來回切換的開發者來說,最簡潔的「不同程式語言 Hello World 替代方案」。該參考頁面將這十二個程式碼片段並列呈現,每個都附有典型的來源檔名以及廣泛的執行環境分類,讓每一列都能對應到你本機安裝的官方編譯器或直譯器。頁面上不會執行、上傳或儲存任何內容;它是唯讀、用戶端運作且無相依套件的,這使得它適合作為一份可以安心複製的靜態速查表,不必擔心遙測、廣告腳本或貼上程式碼時的跳脫字元問題。由於每一列都展示了傳統的命令列進入點——直譯器呼叫、編譯後執行,或 .NET 專案建置——同一份參考資料既能作為安裝新工具鏈後的首次執行健全性檢查,也能在比較十多種生態系如何表達同一行訊息時,作為教學輔助工具。這份參考資料也標明了一個明確的範圍:Hello World 是一條狹窄的路徑,用以證明工具鏈可用,而這個頁面並不假裝要教套件管理、輸入處理、錯誤、測試、專案結構或部署。

hello world in different programming languages alternative
不同程式語言 Hello World 替代方案

為何 Hello World 範例會散落在網路各處

典型的 Hello World 搜尋問題在於,排名最前面的結果會互相矛盾。某篇教學預設使用 Visual Studio 的圖形應用程式範本;另一篇預設使用 Jupyter cell;第三篇則預設在完全沒有檔案的情境下使用互動式殼層;第四篇自從該語言更改了標準建置命令後就再也沒有更新過。為某個編譯器的上一個主要版本所撰寫的程式碼片段,今天仍可能可以建置、產生未使用變數的警告,或因為標準程式庫已經變動而直接失敗。當學習者複製了第一個看起來合理的範例時,無可避免的第一個診斷訊息看起來就像雜訊——「expected ';'」、「unresolved reference」、「module not found」——而錯誤訊息與該範例本應展示的語法規則之間的關聯也就消失了。

那種散落的體驗,正是整合式的「不同程式語言 Hello World」參考資料有其存在價值的原因。每個語言一列、一個慣用的檔名、一個目前適用的命令列進入點,以及一個不會借用無關建置系統範本的程式碼片段。這份參考資料縮小了跨工具鏈混用範例的可能性,讓讀者能挑選與實際安裝的編譯器或直譯器相符的那一列,而不必反向推測某篇舊部落格文章用的是哪一種建置系統。

這十二種語言及其進入點

這份參考資料呈現了十二個簡潔的程式,各自使用該語言的標準進入點來輸出同一個慣用訊息。每一列都標示了典型的來源檔名與廣泛的執行環境,使該程式碼片段可以直接放進工具鏈能識別的檔案中,而無須混用來自無關建置系統或圖形應用程式範本的內容。

語言典型檔名執行環境分類慣用進入點
JavaScripthello.jsNode.js 或瀏覽器頂層腳本;瀏覽器輸出會送至開發者控制台
Pythonhello.pyCPython 直譯器頂層腳本搭配 print();不需要進入函式
JavaHelloWorld.javaJDK / JVMpublic class 搭配 public static void main(String[] args)
Chello.c原生執行檔int main(void) 回傳 int
C++hello.cpp原生執行檔int main() 回傳 int
C#Program.cs.NET 專案.NET 專案檔內,static class 搭配 static Main
Gohello.go原生執行檔package main 搭配 func main()
Rustmain.rs原生執行檔fn main()
Rubyhello.rbCRuby 直譯器頂層腳本搭配 puts
PHPhello.phpPHP 直譯器頂層腳本包裹於 <?php … ?> 之中
Swiftmain.swiftSwift 工具鏈 / 原生Swift 腳本中的頂層程式碼,或型別上的 @main
KotlinMain.ktJVM 或 Kotlin/Native頂層 fun main(),或 class 內的 fun main

各列之間的差異並非風格差異。引號、分號、大括號、縮排、include 或 import 陳述式,以及換行跳脫字元,都是語言語法,而這份參考資料如實保留這些差異。Python 使用縮排來表示區塊;C 系列的範例在被貼上會把直引號替換為花式引號的所見即所得編輯器時可能會失敗。某些語言允許省略分號,而其他語言則要求必須有分號,這就是為什麼每個程式碼片段都必須以完整區塊的方式複製,而不能逐行拼湊。

這份參考資料也標示了每種語言的慣用命令列進入點,使讀者不會混淆例如 Node.js 腳本和瀏覽器腳本這兩種情況。JavaScript 可以在瀏覽器控制台或 Node.js 中執行,但兩者的全域物件與模組規則不同;同一個 console.log 呼叫在一個環境中會寫入開發者控制台,在另一個環境中則會寫入標準輸出。除此之外,標準輸出可能會被緩衝或重新導向,因此這份參考資料所記載的只是一般慣用通道,並非對你本機終端機行為的保證。

尋找並複製 Hello World 程式碼片段

這份參考資料圍繞著四個簡短的步驟所設計。

  1. 在瀏覽器中開啟 不同程式語言 Hello World 參考頁面。
  2. 在搜尋欄位中輸入語言名稱、執行環境關鍵字、典型檔名或簡短程式碼片段;表格會即時篩選至符合的列。
  3. 從符合的列中複製完整的程式碼片段,包括任何前導的指令行、import 或 include,以及結尾的大括號或標籤。
  4. 將該區塊貼入一個新檔案,檔名必須與「典型檔名」欄所顯示的完全一致,並以工具鏈可接受的文字編碼儲存——多數現代語言使用 UTF-8,較舊的 C 編譯器使用 ASCII。

檔案儲存完成後,下一步就是使用官方工具鏈。這份參考資料刻意在檔案邊界停下:複製來的程式碼片段本身無法解決 PATH、編譯器、SDK 或版本衝突,而同一行範例在互動式殼層中可能有效,但儲存為應用程式後卻可能需要進入函式、class、package 宣告、編譯器呼叫或專案檔。

使用官方工具鏈執行程式碼片段

當程式碼片段以慣用檔名存放在磁碟後,從原始碼到輸出之間的路徑會分成四個實用的類別。請挑選與上方「執行環境分類」欄相符的類別,並且務必與該語言目前的官方說明進行交叉核對,因為工具鏈會持續演進。

直譯式語言

對於 Python、Ruby、PHP 和 Node.js,沒有獨立的編譯步驟。明確地將檔案傳遞給直譯器,以確保執行的是正確的版本——python hello.py、ruby hello.rb、php hello.php,或 node hello.js。直譯器導向的範例仍然依賴已安裝的執行環境,以及一個能選取指定版本的指令,所以在假設該程式碼片段在互動式殼層中能執行的情況下,從檔案啟動時行為也會相同之前,請先用 python --version 或 node --version 進行確認。

原生編譯式語言

對於 C、C++、Go、Rust 和 Swift,在程式執行之前需要額外的步驟來產生執行檔。使用該語言目前官方的編譯器驅動程式(C 與 C++ 使用 gcc 或 clang、Go 使用 go build、Rust 使用 rustc、Swift 使用 swiftc),然後執行所產生的二進位檔。當發生問題時,每個編譯器會輸出不同的第一行診斷訊息;原則是閱讀診斷訊息的第一行,並在修改原始碼之前先與檔名及版本進行比對。

JVM 語言

Java 與 Kotlin 編譯為 JVM 位元碼,然後在 Java Virtual Machine 上執行。慣用流程是 Java 使用 javac 接著 java;Kotlin 則使用 Kotlin 編譯器(或建置工具的包裝指令)接著 JVM。這兩種語言都要求原始檔中的類別名稱必須與內部宣告的 public class 相符,而且 Java 範例特別需要外層的 class,即使 Python 並不需要——這是進入點模型上的差異,而不是訊息含義上的差異。

.NET 與瀏覽器 JavaScript

C# 通常是在 .NET 專案內建置,其中 Program.cs 是較大 csproj 結構中的一個檔案;在專案目錄內執行 dotnet run 即會建置並執行程式。瀏覽器 JavaScript 則是另一條路徑:該程式碼片段是寫入開發者控制台,而不是可見頁面,因此預期的輸出會出現在 DevTools 中,而不是呈現的 DOM 上。

這份參考資料刻意不涵蓋的內容

這份參考資料刻意維持狹窄的範圍。它只展示原始碼文字到達標準輸出(或者對於瀏覽器 JavaScript 而言,是開發者控制台)的路徑。它並不教授套件管理、輸入處理、錯誤、測試、專案結構、部署或慣用架構。下一張表格將這個範圍明確列出,使讀者不會因為那些屬於該語言官方生態系的缺口而責怪這份參考資料。

面向由這份參考資料涵蓋由官方工具鏈處理,而非由這份參考資料處理
首次執行的「能不能跑?」檢查是——複製、儲存、執行、觀察輸出
慣用檔名與進入點是——每個語言一列
編譯器或直譯器呼叫有標示,但未執行使用本機安裝的工具鏈執行
標準輸出與開發者控制台輸出是——唯一的輸出通道
輸入、錯誤、日誌、可觀測性語言標準程式庫與生態系工具
測試語言測試執行器(pytest、go test、cargo test 等)
套件管理與相依套件pip、npm、cargo、go mod、Maven、NuGet 等
專案結構、設定、建置檔官方建置工具(Make、CMake、Gradle、MSBuild 等)
部署語言與平台的部署指南
慣用架構與設計模式風格指南、語言導覽、實際專案

正式環境的應用程式應使用正規的日誌機制,而不是在效能敏感或隱私敏感的程式碼中散落教學式的 print 陳述式。絕對不要僅為了證明某段程式路徑有執行,就將密碼、權杖、cookie、個人資料或機密的商業輸入記錄下來;這個習慣從 Hello World 開始養成,如果不及早修正,就會一路延續到正式環境。

驗證程式碼片段與官方文件

由於工具鏈會持續演進,建議在複製任何程式碼片段後,與現行官方文件進行簡短的比對。工作時有兩個參考連結值得保持開啟,兩者皆引用如下。

  • 位於 docs.python.org 的 Python 內建 print 參考資料,確認了簽章、預設結尾分隔符,以及檔案參數,正是該參考資料中 Python 程式碼片段所依賴的部分。
  • 位於 doc.rust-lang.org 的 Rust 書籍「Hello World」章節,確認了 fn main() 進入點以及 println! 巨集,正是該 Rust 程式碼片段所使用的部分。

若編譯失敗,處理原則相當明確:閱讀第一行診斷訊息,確認檔名與版本與上方表格相符,接著逐字元比對程式碼片段與官方文件。參考資料中的十二個範例中,有八個是依據相關官方語言文件所固定,其餘則使用跨語言比對來源,但當指令或檔名有變動時,官方來源永遠是最終裁決依據。

引號、分號、大括號、縮排,以及 import 或 include 陳述式都屬於語法的一部分,並非裝飾性的差異,因此請複製整個區塊、保留 ASCII 標點,並以工具鏈支援的編碼儲存。參考資料亦透過表格大小與唯一性測試來保護這十二筆紀錄,但實際編譯或解譯程式碼片段的本地工具鏈,仍由使用者自行負責。

Hello World 之後——下一步

能運作的 Hello World 只是入門票,並非目的地。一旦訊息成功列印,參考資料建議採取以下三個小步驟:

  1. 新增一個微型測試來驗證進入點——一個單純的斷言,檢查程式輸出是否包含預期字串,並透過該語言的原生存測試執行器執行。
  2. 將來源檔案納入版本控制,並以一個空白的初始提交 (commit) 開始,以便未來的迭代能進行差異比對與還原。
  3. 學習該語言的官方建置與相依套件流程——Python 使用 pip 與虛擬環境,Node.js 使用 npm 或 pnpm,Rust 使用 cargo,Go 使用 go mod,.NET 使用 dotnet CLI,JVM 語言使用 Maven 或 Gradle,以及清單上其他任何語言對應的等效工具。

請刻意將第一個實驗保持小巧且可重現。一旦它能在某個 shell 中建置成功並通過測試,該語言的其餘部分——其標準函式庫、生態系、慣用語法與工具——便任你探索。