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

通過編寫一個簡單的游戲來學習 Rust

開發 后端
Rust 是一門賦予任何人構建可靠和高效的軟件能力的語言。你可以通過編寫一個 Rust 版本的“猜數字”游戲來探索 Rust。

[[373303]]

你可以嘗試以多種語言編程一個簡單的游戲來開始編程之路。

當你想學習一門新的編程語言時,不妨關注一下編程語言的共同點。

  • 變量
  • 表達式
  • 語句

這些概念是大多數編程語言的基礎。一旦你理解了它們,你就可以開始弄清楚其余的東西。

因為編程語言通常具有相似性,一旦你懂了一種語言,你就可以通過理解其差異來學習另一種語言的基礎知識。

學習新語言的一個好方法是使用一個你可以用來練習的標準程序。這可以讓你專注于語言,而不是程序的邏輯。我在這一系列文章中使用了一個“猜數字”的程序,在這個程序中,電腦會在 1 到 100 之間選一個數字讓你猜。程序一直循環,直到你猜對數字為止。

這個程序鍛煉了編程語言的幾個概念:

  • 變量
  • 輸入
  • 輸出
  • 條件評估
  • 循環

這是學習一門新編程語言的很好的實踐實驗。

安裝 Rust

你可以使用 Rustup 安裝一個 Rust 工具鏈,或者你可以在線嘗試 Rust 而不在本地安裝它。

如果你在本地安裝,你應該定期用 rustup update 來更新它,以保持你的工具鏈的新鮮,并使用 cargo update 來保持你的庫的最新版本。

Rust 語言版本的猜數字

Rust 是一門賦予任何人構建可靠和高效的軟件能力的語言。你可以通過編寫一個 Rust 版本的“猜數字”游戲來探索 Rust。

第一步是編寫一個 Cargo.toml 文件。你可以使用 cargo new 命令生成一個骨架 Cargo.toml。這幾乎是開始一個 Rust 項目的最佳方式。

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

Cargo.toml 文件為你的包命名,并給它一些元數據,最重要的是,指明了它依賴于 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 中的許多東西不是由語言或標準庫提供的。取而代之的是,你可以從某個外部 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 生成一個猜測值,而 trait std::io::BufRead 使得可以從標準輸入中讀取。

Rust 代碼的入口在 main() 函數中,所以下一步就是定義 main()

要給一個變量賦值,先放 let,再放變量的名字,后面放 = 號。這樣就創建了一個不可變變量。

Rust 中大多數變量都是不可變的,但是 rng 對象必須是可變的(mut)。例如,語句 let random = 0 給random 變量分配一個零值。

函數的第一行創建了一個線程安全的 Rng 對象,并將其分配給變量 rng。Rust 是建立在線程和內存安全的基礎上的,所以你必須在開始寫代碼時就考慮到這些事情。

程序的下一行讀取函數 gen_range() 的結果,并將其分配給名為 random 的變量。該函數取一個最小值(包含)和一個上界(不包含)。為了也包含上界,你可以用一個等號來標記較大的數字(例如,1...=100),或者你也可以像我在代碼中做的那樣,將上界設置為比你的預期最大值大 1。在這種情況下,該范圍是 1 到 100,使得游戲剛好有足夠的挑戰性。

中央循環在 std::io::stdin() 中迭代行。由于有各種可能導致行不能讀取的例外情況,Rust 要求你用一個 Result 來包裹一行。有時候可能無法將一行解析為一個整數。

這段代碼使用條件模式匹配來忽略所有會導致錯誤的行:

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

第一行創建了一個 Result<Option<i64>, ...> 對象,因為它可能在讀取或解析步驟中失敗。由于下一行只在 Some(Ok(guess)) 上匹配,每當一行的結果是一個不匹配的值時,它就會跳過 if 語句。這是一種強大的忽略錯誤的方法。

Rust 支持條件表達式和流程控制,比如循環。在“猜數字”游戲中,只要猜中的值不等于 random,Rust 就會繼續循環。

if 語句的主體包含一個 Rust 的 match 語句的三向分支。雖然 match 最常用于模式匹配,但它也可以檢查任意條件。在這種情況下是打印一個適當的信息,如果猜測是正確的,則中斷(break)循環。

示例輸出

現在你已經寫好了你的 Rust 程序,你可以運行它來玩“猜數字”游戲。每次運行程序時,Rust 都會選擇一個不同的隨機數,所以繼續猜,直到找到正確的數字。

  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 來測試程序。最終,你可能會使用 cargo build 分成兩個獨立的步驟構建一個可執行文件并運行它

學習 Rust

這個“猜數字”游戲是學習一門新的編程語言的一個很好的入門程序,因為它以一種相當直接的方式鍛煉了幾個常見的編程概念。通過在不同的編程語言中實現這個簡單的游戲,你可以展示語言的一些核心概念,并比較它們的細節。

你有喜歡的編程語言嗎?你會如何用它來寫“猜數字”游戲呢?請關注本系列文章,看看你可能感興趣的其他編程語言的例子吧! 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-01-01 19:30:21

Python編程語言

2021-01-05 12:38:53

C++編程語言軟件開發

2021-01-14 08:55:20

C語言編程

2022-06-03 16:59:13

編程語言Awk

2023-01-13 18:55:09

游戲Ada編程語言

2021-02-05 16:03:48

JavaScript游戲學習前端

2021-01-19 09:35:36

Python視頻游戲編程語言

2024-06-10 23:07:05

2020-11-30 13:16:29

Python編程語言

2017-11-23 08:30:26

編程Python擲骰子游戲

2020-12-28 06:29:31

Bash互動游戲Linux

2021-01-12 06:42:50

Lua腳本語言編程語言

2021-04-13 06:35:13

Elixir語言編程語言軟件開發

2021-07-06 14:36:05

RustLinux內核模塊

2018-03-29 08:30:48

Linux命令BASH

2009-09-11 09:11:09

2019-09-23 09:11:02

Python文本編輯器操作系統

2015-03-24 19:48:24

2023-09-08 10:50:24

Tcl/TkWish

2023-07-11 13:34:19

Rust開發軟件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区高清 | 国产精品免费视频一区 | 久在线视频 | 久久午夜国产精品www忘忧草 | 久久精品91久久久久久再现 | 99久久久久国产精品免费 | 国产精品国产成人国产三级 | 一级高清免费毛片 | 国产h在线 | 欧美成人aaa级毛片在线视频 | www四虎影视 | 亚洲欧洲日本国产 | 日本精品视频在线 | 日韩爱爱网站 | 高清av电影 | 天天夜夜操 | 亚洲人成在线播放 | 精品欧美乱码久久久久久 | 亚洲精品中文在线 | 日本久久网 | 视频1区 | 日韩一区二区三区视频 | 日韩在线中文字幕 | 国产精品久久久乱弄 | 日韩午夜影院 | 国产一区久久 | 国产精品国产a级 | 亚洲精品视频一区 | 国产精品综合网 | 久久黄网 | 自拍偷拍精品 | 天天操网| 国产精品日本一区二区不卡视频 | 亚洲一区二区三区免费视频 | 国产久| www亚洲免费国内精品 | 毛片网站免费观看 | 91原创视频在线观看 | 夜夜夜夜夜夜曰天天天 | 亚洲精品丝袜日韩 | 成人综合在线视频 |