本文为Java程序员视角,用Rust列举出最常用的一些操作,作为记录。作为有Java经验的程序员,应该对项目、src、main这些都耳熟能详,看到关键字自己试一下,那么就都很明显了,所有这里内容都不细说。
强调:这里是个人笔记,不是教学篇。
强调:细节不提的意思是,自个儿如果感兴趣,就深入试一下。
代码块中没有Rust选项,将就着看吧。
参考文献:Rust程序设计语言
1.安装
https://blog.youkuaiyun.com/nietzsche0/article/details/112560716
2.创建项目
命令行下,任意目录
cargo new [项目名]
3.HelloWorld
cargo会自动创建一个HelloWorld代码,在src目录下,main.rs。
fn main() {
println!("Hello, world!");
}
4.构建并运行
cd [项目名]
cargo run
5.包引入(Java import)
use std::io;
调用包的方法
io::stdin().read_line(&mut guess).expect("Failed to read line");
&mut guess为其他参数,之后再解释,这里知道引入和调用就行了。
同时,和Java一样,也可以直接写成这样,后面直接跟方法调用。
std::io::stdin
6.创建变量
let foo = 5; // immutable
let mut bar = 5; // mutable
开始和Java不一样了,mut代表可变,没有let表示默认不可变。
创建一个String,如下。和上述代码相映,就是创建了一个String类型的变量。
let mut guess = String::new();
这里有一点细节概念,但是这里不提,这里的guess正好就是第5节中的参数。
顺便这里说明,&指引用,具体细节暂时不提,因为第5节代码是为了接收一个控制台输入值,是可变的,所以加上mut。
其他细节暂时不说,到时候可能和第1节一样,在这里补一份链接。
7.异常处理
和Java一样,io包下的操作,定义了不少异常,Rust中有一个类型是Result,和Java的区别是,Result是枚举。
其他细节暂时不说,到时候可能和第1节一样,在这里补一份链接。
8.打印格式
println!("You guessed: {}", guess);
通过大括号进行占位。
let x = 5;
let y = 10;
println!("x = {} and y = {}", x, y);
9.扩展包
回到第2节的步骤,这里说明一下,rust中rustc类似javac,而cargo则类似Maven、Gradle。
cargo创建的项目,会自动生成Cargo.toml,类似Maven的pom.xml。
通过配置Cargo.toml,可以从中心库中自动下载扩展包。如:
[dependencies]
rand = "0.3.14"
这是一个用于生成随机数的二进制包。
注意这里有一个cargo.lock,具体细节这里不细说,但用的时候要注意。以后可能会补充链接。
这里还有一个命令
cargo doc --open
用来构建所有本地依赖(比如上面的rand包)提供的文档,并在浏览器中打开。细节不提。
使用rand的时候
extern crate rand;
use rand::Rng;
10.枚举匹配
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => println!("You win!"),
}
guess是之前创建的String字符串变量,std::cmp::Ordering是一个枚举,三个成员常量是比较数值的三种结果(Less 、Greater和 Equal)。
cmp 方法用来比较两个值并可以在任何可比较的值上调用。它获取一个被比较值的引用:这里是把 guess 与secret_number 做比较。
这里有一个和Java很不同的地方,所以就用这种方式描述了
不过这里要注意,既然guess是一个字符串,那么怎么比较值的大小呢?
需要进行转换
let guess: u32 = guess.trim().parse().expect("Please type a number!");
expect表示异常处理,是第7节暂未提到的内容。
let guess表示创建了一个名为guess的(不可变的)变量,但之前我们已经有一个String类型的可变变量了。
这是Rust的一个特性,名称为shadow:用一个新值来隐藏 guess 之前的值。这个功能常用在需要转换值类型之类的场景,它允许我们复用 guess 变量的名字,而不是被迫创建两个不同变量,诸如 guess_str 和 guess 之类。
细节暂时不提。
11.循环
loop {
//用break退出
break;
}
退出的方式和Java类似:break和continue。
小结
本篇在结构上基本上就结束了,持续维护的,主要是以链接的方式加入。
其他所有权等概念,不一定会从本文链接,毕竟编程应该有的最基本的内容,本篇都已经有了。
有一些像if else,基本所有程序都一样,目前就先不考虑了,以后看能完成到什么地步吧。