赞
踩
Rust 一门赋予每个人构建可靠且高效软件能力的语言https://hannyang.blog.csdn.net/article/details/130467813?spm=1001.2014.3001.5502关于Rust安装等内容请参考上文链接,写完上文就在考虑写点关于Rust的入门文章,本专辑将直接从Rust基础入门内容开始讲起。标题《快速入门60分》并不指60分钟,而是希望自己写完这个专辑后,可以得个60分,也能掌握Rust60%上下的内容,请看第一章《变量与常量》:
目录
变量名由字母、数字或下划线组成,应该具有描述性,能够清楚地表达变量的含义。命名的基本规则和大多数编程语言基本相同,有些细节上稍微有所不同。规则如下:
Rust 变量声明使用 let 关键字,有些早期版本的basic语言也用LET(现在通常是DIM)。
示例:
- fn main() {
- let x = 323;
- let y = 3.23;
- print!("x: {}, ", x);
- println!("y: {}", y);
- //输出 x: 323, y: 3.23
- }
上面示例中,fn 是函数 function 的缩写,表示 main() 是这个rust程序的主函数;
let 变量名 = 常数;就是一个变量声明、赋值语句;
print!() 和 println!() 是打印的“宏”,宏不是函数,但功能也就相近于Java中的System.out.print()函数和System.out.println()函数的功能,两者输出差一个换行符。
// 表示注释语句,注释与C++相同,行注释用 //,块注释用 /* */;Rust另外还有文档注释。
函数体中每一行都是一个语句(当然语句也可以跨多行表达),语句由各种表达式组成。第一条语句必须有标点符号分号作结尾,表达式一般没有符号作结尾的。关于Rust中的“宏”,它和C/C++中的“宏”还是不同的,更多函数相关内容,放到之后的函数章节再讲。
let 语句也可以分成两行,先声明再分配值(赋值绑定):
- fn main() {
- let x;
- x = 100;
- println!("x: {}", x);
- }
let 语句还可以一行赋值多个变量,但要加上括号(其实是复合数据类型之一的元组):
- fn main() {
- let (x, y) = (3, 4);
- let z = (x*x+y*y) as f64;
- let z = z.sqrt().round() as i32;
- println!("{},{},{}", x, y, z); // 3,4,5
- let (a, b, c) = (1, 2, 3);
- println!("{},{},{}", a, b, c); // 1,2,3
- }
其中,as 也是Rust关键字之一,在这里用于强制转换数据类型。
sqrt()、round() 分别为平方根、取整函数。
Snake case 是一种命名规范,它使用小写字母,单词之间用下划线 "_" 连接。
Rust不推荐在变量中有大写字母,示例如下:
- fn main() {
- let Int = 100;
- let My_Integer = 200;
- let my_integer = 300;
-
- println!("{} {} {}", Int, My_Integer, my_integer)
- }
以上代码可以编译执行,但会有警告出现:
···Rust
warning: variable `Int` should have a snake case name
--> D:\Rust\hello.rs:2:9
|
2 | let Int = 100;
| ^^^ help: convert the identifier to snake case (notice the capitalization): `int`
|
= note: `#[warn(non_snake_case)]` on by default
warning: variable `My_Integer` should have a snake case name
--> D:\Rust\hello.rs:3:9
|
3 | let My_Integer = 200;
| ^^^^^^^^^^ help: convert the identifier to snake case: `my_integer`
warning: 2 warnings emitted
100 200 300
···
变量命名使用关键字,报错通不过编译,所以是禁止使用;但与标准库中已有的函数、类型同名,只是容易混淆,但编译不警告不报错,所以只能说是避免使用。如:
- fn main() {
- //let fn = 10; //禁止使用
- //let let = 2; //禁止使用
- let u8 = 10u8; //避免使用
- let pow; //避免使用
- pow = u8.pow(2);
- println!("{} {}", u8, pow) //输出 10 100
- }
其中, u8 的变量类型是8位无符号整型,pow() 是标准库函数平方幂函数。
函数名、类型名称作变量名不会报错,而fn, let关键字作变量名则报错:
```Rust
expected identifier, found keyword
|
help: escape `fn` to use it as an identifier
```
下划线 _ 是一个特殊的变量名,更确切地说是变量名称的缺失,就称它为匿名变量。它的基本意思是舍弃,可以理解为废纸篓,这个变量扔掉不要了,不能被再次调用。(Go, Python里也有 _ 用作匿名变量,但细节各不相同,而且在python里 “_ = 5;print(_)” 是合法的)
- fn main() {
- let (a,_) = (6,2);
- println!("{}", a);
- //println!("{}", _); //报错^ `_` not allowed here
- }
Rust整型 分为有符号整型(signed,标记 in)和无符号整型(unsigned,标记 un),区别在于数字是否有负数。带符号整型的安全存储范围为 -2^(n-1) 到 2^(n-1) - 1,无符号整型的安全存储范围为 0 到 2^n,n 为数据位长度,见下表:
位长度 | 有符号 | 无符号 |
---|---|---|
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
128-bit | i128 | u128 |
arch 由系统构架而定 | isize | usize |
isize 和 usize 是根据系统架构决定的,例如带符号整型,如果系统是 64 位,类型为 i64,如果系统是 32 位,类型为 i32。(这和C++中的size_t类型相似)
指定类型和默认类型
变量声明时,可以先指定类型,再分配绑定数值,变量名后面使用冒号跟随类型来明确指定变量的类型,称为显式指定;Rust 是强类型语言,具有自动判断变量类型的能力,可理解为这是隐式指定。以下示例中声明的变量 z 并没有明确指定其具体类型,则默认为 i32 类型,这也是 Rust 的特性之一类型推断。
- fn main() {
- let x: u8;
- x = 123;
- let y = -1000i64;
- let z = -323; //不指定类型,默认为i32
- println!("x: {}, y: {}, z: {}", x, y, z);
- }
Rust浮点型 分为 32 位浮点数(f32)和 64 位浮点数(f64)。浮点型若不指定具体类型,则默认为 f64 浮点数,现在的高性能CPU对两种浮点数计算的速度几乎相同,但 64 位浮点数精度更高。
- fn main() {
- let x: f32;
- x = 1.23;
- let y: f64 = 3.23;
- let z = -3.23; //不指定类型,默认为f64
- println!("x: {}, y: {}, z: {}", x, y, z);
- }
Rust字符型 是一个4字节 Unicode 码,支持中文等非英文字符,使用单引号''包括。
- fn main() {
- let a = 'a';
- let b: char = '字';
- let c = '声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/82419推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。