新聞中心
你可以嘗試以多種語(yǔ)言編程一個(gè)簡(jiǎn)單的游戲來(lái)開(kāi)始編程之路。
龍湖ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
當(dāng)你想學(xué)習(xí)一門新的編程語(yǔ)言時(shí),不妨關(guān)注一下編程語(yǔ)言的共同點(diǎn)。
- 變量
- 表達(dá)式
- 語(yǔ)句
這些概念是大多數(shù)編程語(yǔ)言的基礎(chǔ)。一旦你理解了它們,你就可以開(kāi)始弄清楚其余的東西。
因?yàn)榫幊陶Z(yǔ)言通常具有相似性,一旦你懂了一種語(yǔ)言,你就可以通過(guò)理解其差異來(lái)學(xué)習(xí)另一種語(yǔ)言的基礎(chǔ)知識(shí)。
學(xué)習(xí)新語(yǔ)言的一個(gè)好方法是使用一個(gè)你可以用來(lái)練習(xí)的標(biāo)準(zhǔn)程序。這可以讓你專注于語(yǔ)言,而不是程序的邏輯。我在這一系列文章中使用了一個(gè)“猜數(shù)字”的程序,在這個(gè)程序中,電腦會(huì)在 1 到 100 之間選一個(gè)數(shù)字讓你猜。程序一直循環(huán),直到你猜對(duì)數(shù)字為止。
這個(gè)程序鍛煉了編程語(yǔ)言的幾個(gè)概念:
- 變量
- 輸入
- 輸出
- 條件評(píng)估
- 循環(huán)
這是學(xué)習(xí)一門新編程語(yǔ)言的很好的實(shí)踐實(shí)驗(yàn)。
安裝 Rust
你可以使用 Rustup 安裝一個(gè) Rust 工具鏈,或者你可以在線嘗試 Rust 而不在本地安裝它。
如果你在本地安裝,你應(yīng)該定期用 rustup update 來(lái)更新它,以保持你的工具鏈的新鮮,并使用 cargo update 來(lái)保持你的庫(kù)的最新版本。
Rust 語(yǔ)言版本的猜數(shù)字
Rust 是一門賦予任何人構(gòu)建可靠和高效的軟件能力的語(yǔ)言。你可以通過(guò)編寫一個(gè) Rust 版本的“猜數(shù)字”游戲來(lái)探索 Rust。
第一步是編寫一個(gè) Cargo.toml 文件。你可以使用 cargo new 命令生成一個(gè)骨架 Cargo.toml。這幾乎是開(kāi)始一個(gè) Rust 項(xiàng)目的最佳方式。
$ cargo new guess$ cd guess$ ls -1Cargo.tomlsrc/
Cargo.toml 文件為你的包命名,并給它一些元數(shù)據(jù),最重要的是,指明了它依賴于 rand crate。
[package]name = "guess"version = "2020.11.0"authors = ["Moshe Zadka"] edition = "2018"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]rand = "*"
Rust 中的許多東西不是由語(yǔ)言或標(biāo)準(zhǔn)庫(kù)提供的。取而代之的是,你可以從某個(gè)外部 crate 得到它們,這些 crate 可以做許多事情。
程序邏輯在 src/main.rs 中:
use rand::Rng;use std::io::BufRead;fn main() {let mut rng = rand::thread_rng();let random = rng.gen_range(1..101);println!("Guess a number between 1 and 100");for line in std::io::stdin().lock().lines() {let parsed = line.ok().as_deref().map(str::parse::); if let Some(Ok(guess)) = parsed {match guess {_ if guess < random => println!("Too low"),_ if guess > random => println!("Too high"),_ => {println!("That's right");break;}}}}}
代碼的前兩行聲明你要做什么。在本例中,rand::Rng 生成一個(gè)猜測(cè)值,而 trait std::io::BufRead 使得可以從標(biāo)準(zhǔn)輸入中讀取。
Rust 代碼的入口在 main() 函數(shù)中,所以下一步就是定義 main()。
要給一個(gè)變量賦值,先放 let,再放變量的名字,后面放 = 號(hào)。這樣就創(chuàng)建了一個(gè)不可變變量。
Rust 中大多數(shù)變量都是不可變的,但是 rng 對(duì)象必須是可變的(mut)。例如,語(yǔ)句 let random = 0 給random 變量分配一個(gè)零值。
函數(shù)的第一行創(chuàng)建了一個(gè)線程安全的 Rng 對(duì)象,并將其分配給變量 rng。Rust 是建立在線程和內(nèi)存安全的基礎(chǔ)上的,所以你必須在開(kāi)始寫代碼時(shí)就考慮到這些事情。
程序的下一行讀取函數(shù) gen_range() 的結(jié)果,并將其分配給名為 random 的變量。該函數(shù)取一個(gè)最小值(包含)和一個(gè)上界(不包含)。為了也包含上界,你可以用一個(gè)等號(hào)來(lái)標(biāo)記較大的數(shù)字(例如,1...=100),或者你也可以像我在代碼中做的那樣,將上界設(shè)置為比你的預(yù)期最大值大 1。在這種情況下,該范圍是 1 到 100,使得游戲剛好有足夠的挑戰(zhàn)性。
中央循環(huán)在 std::io::stdin() 中迭代行。由于有各種可能導(dǎo)致行不能讀取的例外情況,Rust 要求你用一個(gè) Result 來(lái)包裹一行。有時(shí)候可能無(wú)法將一行解析為一個(gè)整數(shù)。
這段代碼使用條件模式匹配來(lái)忽略所有會(huì)導(dǎo)致錯(cuò)誤的行:
let parsed = line.ok().as_deref().map(str::parse::); if let Some(Ok(guess)) = parsed {// ...}
第一行創(chuàng)建了一個(gè) Result 對(duì)象,因?yàn)樗赡茉谧x取或解析步驟中失敗。由于下一行只在 Some(Ok(guess)) 上匹配,每當(dāng)一行的結(jié)果是一個(gè)不匹配的值時(shí),它就會(huì)跳過(guò) if 語(yǔ)句。這是一種強(qiáng)大的忽略錯(cuò)誤的方法。
Rust 支持條件表達(dá)式和流程控制,比如循環(huán)。在“猜數(shù)字”游戲中,只要猜中的值不等于 random,Rust 就會(huì)繼續(xù)循環(huán)。
if 語(yǔ)句的主體包含一個(gè) Rust 的 match 語(yǔ)句的三向分支。雖然 match 最常用于模式匹配,但它也可以檢查任意條件。在這種情況下是打印一個(gè)適當(dāng)?shù)男畔?,如果猜測(cè)是正確的,則中斷(break)循環(huán)。
示例輸出
現(xiàn)在你已經(jīng)寫好了你的 Rust 程序,你可以運(yùn)行它來(lái)玩“猜數(shù)字”游戲。每次運(yùn)行程序時(shí),Rust 都會(huì)選擇一個(gè)不同的隨機(jī)數(shù),所以繼續(xù)猜,直到找到正確的數(shù)字。
$ cargo runCompiling guess v2020.11.0 (/Users/mzadka/src/guess)Finished dev [unoptimized + debuginfo] target(s) in 0.70sRunning `target/debug/guess`Guess a number between 1 and 10050Too high25Too high12Too low18Too high15Too high13Too low14That's right
典型的做法是用 cargo run 來(lái)測(cè)試程序。最終,你可能會(huì)使用 cargo build 分成兩個(gè)獨(dú)立的步驟構(gòu)建一個(gè)可執(zhí)行文件并運(yùn)行它。
學(xué)習(xí) Rust
這個(gè)“猜數(shù)字”游戲是學(xué)習(xí)一門新的編程語(yǔ)言的一個(gè)很好的入門程序,因?yàn)樗砸环N相當(dāng)直接的方式鍛煉了幾個(gè)常見(jiàn)的編程概念。通過(guò)在不同的編程語(yǔ)言中實(shí)現(xiàn)這個(gè)簡(jiǎn)單的游戲,你可以展示語(yǔ)言的一些核心概念,并比較它們的細(xì)節(jié)。
你有喜歡的編程語(yǔ)言嗎?你會(huì)如何用它來(lái)寫“猜數(shù)字”游戲呢?請(qǐng)關(guān)注本系列文章,看看你可能感興趣的其他編程語(yǔ)言的例子吧!
當(dāng)前標(biāo)題:通過(guò)編寫一個(gè)簡(jiǎn)單的游戲來(lái)學(xué)習(xí)Rust
網(wǎng)站網(wǎng)址:http://m.5511xx.com/article/dphcooh.html


咨詢
建站咨詢

