Rust修仙笔记下境地-炼气期

rust是一门静态类型言语,内存高效,速度快,在指令行webAssembly,网络服务,嵌入式,web3方向有广泛应用,以下是一篇rust入门笔记

开端学习rust的第一步

rust装置

  • 装置rust环境,详细参考官方install教程rust-lang
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • 装置完成后开端第一个hello rust
cargo new 01-hello-rust --name hello-rust

当咱们在终端履行以上指令后,就会生成下面几个文件

Rust修仙笔记下境地-炼气期

当咱们在项目根目录履行cargo run,此刻就运行了rust写的第一个项目了,并打印出了了main.rs文件

fn main() {
    println!("Hello, rust!");
}

咱们的终端运行指令后

Finished dev [unoptimized + debuginfo] target(s) in 0.03s
 hellRunning `target/debug/hello-rust`
Hello, rust!

咱们注意到在根底项目里有一个Cargo.toml的文件,这是在rust工程文件运用cargo创建项目后生成的文件,其中有默许的几个参数

  • name 该项意图称号
  • version 版本号
  • edition 为年份
  • [dependencies]依靠装置的包
[package]
name = "hello-rust"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

当你运用cargo run时,此刻src目录下除了原有的main.rs文件,也会多生成一个可履行main.exe文件

猜数游戏

首要咱们运用cargo创建一个项目

cargo new guess-game

咱们详细看下代码

use rand::Rng;
use std::io;
fn main() {
    println!("猜数字游戏");
    println!("请输入一个1到100之间的数字");
    // 用let界说了一个不行变的变量
    let secret_number = rand::thread_rng().gen_range(1..=100);
    // rust中的循环运用loop关键词
    loop {
        // 声明一个可变的变量,且为字符串类型存储输入值
        let mut input = String::new();
        // 运用io读取输入的值
        io::stdin()
            .read_line(&mut input) // 这里引证的上面同一个input的值
            .expect("failed to read line"); // 防止系统报错
         // 将输入的字符串变为数字
        let input: u32 = input.trim().parse().expect("Please type a number!");
        // 比较输入值与随机数的巨细,这里运用match 关键词,&secret_number是一个形参
        match input.cmp(&secret_number) {
            // 运用Ordering的枚举
            std::cmp::Ordering::Less => println!("太小了!"),
            std::cmp::Ordering::Greater => println!("太大了!"),
            std::cmp::Ordering::Equal => {
                println!("祝贺你,猜对了!");
                break; // 中指退出loop循环
            }
        }
    }
}

Rust修仙笔记下境地-炼气期

至此咱们一个猜数字的程序就已经写好了,看代码好像还有很多疑问。

  • 首要咱们在运用随机数时,首要是因为咱们引入了use rand::Rng,在咱们运用这个1-100随机数时,是直接运用界说了一个不行变量screct_number,rand::thread_rng().gen_range(1..=100)

在运用rand时,咱们必须在Cargo.toml[dependencies]写入rand = "0.8.5",当咱们初次运行时,就会装置rand相关的包

  • 咱们在读取用户输入值时,咱们运用了use std::io,在读取用户输入的值,咱们运用io::stdin().read_line(&mut input)

  • 咱们屡次运用的input这个变量,在rust中是允许同一个变量名被界说屡次的,最近的一次引证取最近的一次界说

比方下面

fn main() {
  let name = 'Web技能学苑';
  println!("{}", name); // Web技能学苑
  let name = "Maic";
   println!("{}", name); // Maic
}
  • 当咱们运用循环时,咱们运用了loop,运用{}代码块包裹

  • 在运用match时,match input.cmp($screct_number),而且接着代码块是十分奇怪的语法

match input.cmp($screct_number) {
  std::cmp::Ordering:Less => println!("太小了"),
  std::cmp::Ordering:Greater => println!("太大了"),
  std::cmp::Ordering:Equal => {
     println!("祝贺你,猜对了");
     break; // 中断loop循环
  }
}

Ordering:Less是引入的枚举,至于为啥这么写,还是需要慢慢适应 $screct_number是一个不行变的形参

println!

关于打印,咱们在项目中首要是为了便利调试的,在rust中打印俗称

  • {}是占位符,能够{a}中的a是最近界说的变量
  • {0}{1}表示获取参数的第一个值与而个值
  • 能够界说{name}中的参数名
fn main() {
 // 输出后会换行
  println!("Hello, world!");
  // 不会换行
  // print!("hello i is print");
  // {},{}会逐个占位hello world
  println!("{} {}", "hello", "world");
  // 0 hello 1 world
  println!("{0} {1} {0}", "a", "b");
  // 命名参数
  println!(
      "{name} likes to play {activity}",
      name = "John",
      activity = "Baseball"
  );
  // 输出的结果是:000001
  println!("{number:>0width$}", number = 1, width = 6);
}

总结

  • 怎么装置rust,以最根底的比如hello rust入门rust

  • 猜数字游戏了解rust,咱们运用stdrand这两个库实现了输入数字猜数游戏

  • 猜数字游戏中咱们学习了解到怎么界说可变变量与不行变量,以及怎么运用循环,字符串转数字,以及运用Ordering枚举,中断循环等

  • 了解println!通用的打印,一般{}是一个变量占位符

  • code example