成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過(guò)編寫(xiě)一個(gè)簡(jiǎn)單的游戲來(lái)學(xué)習(xí) Rust

開(kāi)發(fā) 后端
Rust 是一門(mén)賦予任何人構(gòu)建可靠和高效的軟件能力的語(yǔ)言。你可以通過(guò)編寫(xiě)一個(gè) Rust 版本的“猜數(shù)字”游戲來(lái)探索 Rust。

[[373303]]

你可以嘗試以多種語(yǔ)言編程一個(gè)簡(jiǎn)單的游戲來(lái)開(kāi)始編程之路。

當(dāng)你想學(xué)習(xí)一門(mén)新的編程語(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í)一門(mén)新編程語(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 是一門(mén)賦予任何人構(gòu)建可靠和高效的軟件能力的語(yǔ)言。你可以通過(guò)編寫(xiě)一個(gè) Rust 版本的“猜數(shù)字”游戲來(lái)探索 Rust。

第一步是編寫(xiě)一個(gè) Cargo.toml 文件。你可以使用 cargo new 命令生成一個(gè)骨架 Cargo.toml。這幾乎是開(kāi)始一個(gè) Rust 項(xiàng)目的最佳方式。

  1. $ cargo new guess
  2. $ cd guess
  3. $ ls -1
  4. Cargo.toml
  5. src/

Cargo.toml 文件為你的包命名,并給它一些元數(shù)據(jù),最重要的是,指明了它依賴于 rand crate。

  1. [package]
  2. name = "guess"
  3. version = "2020.11.0"
  4. authors = ["Moshe Zadka <moshez@opensource.com>"]
  5. edition = "2018"
  6.  
  7. # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
  8.  
  9. [dependencies]
  10. rand = "*"

Rust 中的許多東西不是由語(yǔ)言或標(biāo)準(zhǔn)庫(kù)提供的。取而代之的是,你可以從某個(gè)外部 crate 得到它們,這些 crate 可以做許多事情。

程序邏輯在 src/main.rs 中:

  1. use rand::Rng;
  2. use std::io::BufRead;
  3.  
  4. fn main() {
  5. let mut rng = rand::thread_rng();
  6. let random = rng.gen_range(1..101);
  7. println!("Guess a number between 1 and 100");
  8. for line in std::io::stdin().lock().lines() {
  9. let parsed = line.ok().as_deref().map(str::parse::<i64>);
  10. if let Some(Ok(guess)) = parsed {
  11. match guess {
  12. _ if guess < random => println!("Too low"),
  13. _ if guess > random => println!("Too high"),
  14. _ => {
  15. println!("That's right");
  16. break;
  17. }
  18. }
  19. }
  20. }
  21. }

代碼的前兩行聲明你要做什么。在本例中,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)始寫(xiě)代碼時(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ò)誤的行:

  1. let parsed = line.ok().as_deref().map(str::parse::<i64>);
  2. if let Some(Ok(guess)) = parsed {
  3. // ...
  4. }

第一行創(chuàng)建了一個(gè) Result<Option<i64>, ...> 對(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)寫(xiě)好了你的 Rust 程序,你可以運(yùn)行它來(lái)玩“猜數(shù)字”游戲。每次運(yùn)行程序時(shí),Rust 都會(huì)選擇一個(gè)不同的隨機(jī)數(shù),所以繼續(xù)猜,直到找到正確的數(shù)字。

  1. $ cargo run
  2.    Compiling guess v2020.11.0 (/Users/mzadka/src/guess)
  3.     Finished dev [unoptimized + debuginfo] target(s) in 0.70s
  4.      Running `target/debug/guess`
  5. Guess a number between 1 and 100
  6. 50
  7. Too high
  8. 25
  9. Too high
  10. 12
  11. Too low
  12. 18
  13. Too high
  14. 15
  15. Too high
  16. 13
  17. Too low
  18. 14
  19. That'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í)一門(mén)新的編程語(yǔ)言的一個(gè)很好的入門(mén)程序,因?yàn)樗砸环N相當(dāng)直接的方式鍛煉了幾個(gè)常見(jiàn)的編程概念。通過(guò)在不同的編程語(yǔ)言中實(shí)現(xiàn)這個(gè)簡(jiǎn)單的游戲,你可以展示語(yǔ)言的一些核心概念,并比較它們的細(xì)節(jié)。

你有喜歡的編程語(yǔ)言嗎?你會(huì)如何用它來(lái)寫(xiě)“猜數(shù)字”游戲呢?請(qǐng)關(guān)注本系列文章,看看你可能感興趣的其他編程語(yǔ)言的例子吧! 

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2021-01-01 19:30:21

Python編程語(yǔ)言

2021-01-05 12:38:53

C++編程語(yǔ)言軟件開(kāi)發(fā)

2021-01-14 08:55:20

C語(yǔ)言編程

2022-06-03 16:59:13

編程語(yǔ)言Awk

2023-01-13 18:55:09

游戲Ada編程語(yǔ)言

2021-02-05 16:03:48

JavaScript游戲?qū)W習(xí)前端

2021-01-19 09:35:36

Python視頻游戲編程語(yǔ)言

2024-06-10 23:07:05

2017-11-23 08:30:26

編程Python擲骰子游戲

2020-11-30 13:16:29

Python編程語(yǔ)言

2020-12-28 06:29:31

Bash互動(dòng)游戲Linux

2021-01-12 06:42:50

Lua腳本語(yǔ)言編程語(yǔ)言

2021-04-13 06:35:13

Elixir語(yǔ)言編程語(yǔ)言軟件開(kāi)發(fā)

2021-07-06 14:36:05

RustLinux內(nèi)核模塊

2018-03-29 08:30:48

Linux命令BASH

2009-09-11 09:11:09

2019-09-23 09:11:02

Python文本編輯器操作系統(tǒng)

2015-03-24 19:48:24

2023-09-08 10:50:24

Tcl/TkWish

2023-07-11 13:34:19

Rust開(kāi)發(fā)軟件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 一区二区三区在线免费观看视频 | 天天色天天色 | 久久久久久国产 | 国产一级久久久久 | 高清一区二区 | 亚洲欧美中文日韩在线v日本 | 国产精品资源在线观看 | 一区二区三区亚洲 | 日韩视频在线免费观看 | 亚洲网在线| 黄网免费| 99久久久久久99国产精品免 | 国产91网址 | 亚洲国产欧美在线 | 伊人久久综合影院 | 精品视频一区二区三区在线观看 | av官网在线| 久久久久久久国产精品 | 国产婷婷色综合av蜜臀av | 亚洲二区在线 | 亚洲欧美日韩中文在线 | 亚洲在线高清 | 成人在线中文字幕 | 在线观看欧美一区 | 久久a久久 | 国产在线一区二区三区 | 国产99精品 | 97精品超碰一区二区三区 | 91精品久久久久久久久久入口 | 久久精品a级毛片 | 亚洲毛片在线观看 | 96国产精品久久久久aⅴ四区 | 午夜在线视频 | 欧美国产一区二区 | 91九色在线观看 | 手机在线一区二区三区 | 亚洲精品在线免费播放 | av一级毛片| 青青草视频免费观看 | 欧美日韩综合视频 | 嫩草视频入口 |