107.04.21 rust 之路 02 Hello World

就來第一個程式啦 OuO

之後講解的環境應該都是 win10 (作業系統) + cygwin (shell) + vim (編輯器)
Hello World
Photo by NASA on Unsplash


首先用編輯器打開檔案
.rs 是 Rust 原始碼的副檔名喔
$ vim hello.rs
輸入以下程式碼
fn main() {
    println!("Hello Rust!!!!");
}

簡單說明一下:
fn 就是定義一個函式 (function) 的關鍵字
而 main() 這個函式就是整個程式的進入點
println!() 這個不是函式而是巨集 (因為有 ! 結尾),功能就有點像是 printf() 可以輸出字串

儲存後離開
使用 rustc 這個 Rust 的編譯器編譯程式碼
$ rustc hello.rs
執行,會發現明明沒有指定輸出檔名 (-o XXX) 但就會自動用原始碼的檔名
$ ./hello

沒意外就長下面這樣囉 OuO
這樣就完成第一個 Rust 程式啦 OuO

原本要介紹 Crago 但是因為好像差頗多的所以就留到下一次

所以就來繼續介紹輸出到螢幕的方式
因為 debug 最需要就是 print 大法
題外話:然後發現很多大師都是這樣用而不用 debug 工具 OAO
e.g. Python之父Guido van RossumLinux之父Linus Torvalds

恩....然後就不先說明巨集 (macro) 是什麼,可以暫時先把它當成函式用

首先是 println!() 它會輸出中間的字串再加上一個換行
也可以使用 {} 來代表參數,就很像 printf()
println!("Hello {}", "OuO");
// Hello OuO

也可以指定參數的位置
println!("Hello {1} {0}", "OuO", "QuQ");
// Hello QuQ OuO

有輸出換行的當然也有沒有換行的,就是 print!()
但是注意 stdout 是以行為 buffer 的單位,所以若要使用 print!()
要在後方加上 flush() 以保證會輸出
use std::io::{self, Write};
fn main() {
    print!("Hello {}!!!!", "OuO");
    io::stdout().flush().unwrap();
}
// Hello OuO

再來還有一個常看到的是斷言 (assert)
不過若是錯的它就會直接 panic 也就是程式強制中斷
像以下兩行都會使得程式中斷
當然 true、false 都可以換成任意變數或字串
不過 assert!() 內部要放 boolean
assert_eq!() 會比較兩個參數是否相同
assert!(false);          // 因為不為 true,所以 panic
assert_eq!(true, false); // 因為 true != false,所以 panic

下面是上面兩句斷言的執行結果
注意執行到第一句就會跳出程式了,因為第一句就 panic
若要追蹤整個 panic 的發生位置 (call stack) 可以在執行前使用 RUST_BACKTRACE
注意在 fish shell 不可用,請換到 bash
$ RUST_BACKTRACE=1 ./hello

沒有留言:

張貼留言

^ Top