Rust学习之旅——基础语法

变量

变量使用let来赋值,且大多数情况下可以自动推断变量类型,如果不行则需要手动添加变量声明。(变量命名遵循蛇形命名法)

fn main() {
    // rust 推断出x的类型
    let x = 13;
    println!("{}", x);

    // rust也可以显式声明类型
    let x: f64 = 3.14159;
    println!("{}", x);

    // rust 也支持先声明后初始化,但很少这样做
    let x;
    x = 0;
    println!("{}", x);
}

修改变量

Rust中变量分为可变的和不可变的,变量值用mut关键字表示

  • 可变的 - 编译器允许对变量进行读取和写入
  • 不可变的 - 编译器只允许对变量进行读取
fn main() {
	let mut x = 42;
	println!("{}", x);
	x = 13;
	println!("{}", x);
}

基本类型

Rust有多种常见类型:

  • 布尔型 - bool 表示 true 或者 false
  • 无符号整型 - u8 u32 u64 u128 表示正整数
  • 有符号整型 - i8 i32 i64 i128 表示正负整数
  • 指针大小的整数 - usize isize 表示内存中内容的索引和大小
  • 浮点数 - f32 f64
  • 元组(tuple) - (value, value, …) 用于在栈上传递固定序列(不能变)的值
  • 数组 - 在编译时已知具有固定长度相同元素的集合
  • 切片(slice) - 在运行时已知长度相同元素的集合
  • 字符串(str or string slice) - 在运行时已知长度的文本

可以通过将类型附加到数字的末尾来明确指定数字类型(如 13u32 和 2u8)
Rust是一种系统编程语言,更为关心内存问题

fn main() {
	let x = 12;		// 默认情况下是 i32
	let a = 12u8;
	let b = 4.3;	// 默认情况下是 f64
	let c = 4.3f32;
	let bv = true;
	let t = (13, false);
	let sentence = "hello world";
	println!(
		"{} {} {} {} {} {} {}",
		x, a, b, c, bv, t.0, t.1, sentence
	);
}

基本类型转换

当涉及到数字类型时,Rust要求明确,不应当出现把 “u8” 用在 “u32” 上。
不过Rust给出了 as 关键字,使得数字类型转换很容易

fn main() {
	let a = 13u8;
	let b = 7u32;
	let c = a as u32 + b;
	println!("{}", c);			// 20

	let t = true;
	println!("{}", t as u8);	// 1
}

常量

常量允许我们高效地指定一个在代码中会被多次使用的公共值。不同于像变量一样在使用的时候会被复制,常量会在编译期间直接用它们的值来替换变量的文本标识符。

不同于变量,常量必须始终具有显式的类型。常量名总是遵循 全大写蛇形命名法**(SCREAMING_SNAKE_CASE)**。

const PI: f32 = 3.1415926

fn main() {
	println!(
		"To make an apple {} from scratch, you must first create a universe.",
		PI
	);
}

数组

数组是所有相同类型数据元素的固定长度集合。
一个数组的数据类型是 [T;N],其中 T 是元素的类型,N 是编译时已知的固定长度。

可以使用 [x] 运算符提取单个元素,其中 x 是所需元素的 usize 索引(从 0 开始)。

fn main() {
	let nums: [i32; 3] = [1, 2, 3];
	println!("{:?}", nums);
	println!("{}", nums[1]);
}

函数

函数可以有 0 个或者多个参数。

fn add(x: i32, y: i32) -> i32 {
	return x + y;
}

fn main() {
	println!("{}", add(42, 133));
}

在这个例子中,add 接受类型为 i32(32 位长度的整数)的两个参数。

函数名总是遵循 蛇形命名法 (snake_case)。

多个返回值

函数可以通过元组来返回多个值。

元组元素可以通过他们的索引来获取。

Rust 允许我们将后续会看到的各种形式的解构,也允许我们以符合逻辑的方式提取数据结构的子片段。

fn swap(x: i32, y: i32) -> (i32, i32) {
	return (y, x);
}

fn main() {
	// 返回一个元组
	let result = swap(123, 312);
	println!("{} {}", result.0, result.1);

	// 将元组解构成两个变量
	let (a, b) = swap(result.0, result.1);
	println!("{} {}", a, b);
}

返回空值

如果没有为函数指定返回类型,它将返回一个空的元组,也称为单元。

一个空的元组用 () 表示。

直接使用 () 的情况相当不常见。但它经常会出现(比如作为函数返回值)。

fn make_nothing() -> () {
	return  ();
}

// 返回类型隐含为 ()
fn make_nothing2() {
	// 如果没有指定返回值,默认返回 ()
}

fn main() {
	let a = make_nothing();
	let b = make_nothing2();
	
	// 打印a和b的debug字符串
	println!("The value of a: {:?}", a);
	println!("The value of b: {:?}", b);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值