You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
# Rust基本概念
从现在开始, 你已经正式踏入了Rust大陆, 这篇广袤而神秘的世界, 在这个世界中, 你将接触到很多之前你都没有听过的概念:
- 所有权、借用、生命周期
- 宏编程
- 模式匹配
类似的还有很多,不过不用怕,一方面,这本书会带你彻底探索这个神秘的大陆,另一方面,我们也有一个非常友善的社区,在里面你可以提问也可以分享自己的所学所思: [社区网址 ](https://community.college.rs ).
本章主要介绍Rust的基础语法、数据类型、项目结构等, 学完本章, 你将对Rust代码有一个清晰、完整的认识。
在基本概念方面, Rust和其它语言并没有大的区别, 它拥有变量、数据、函数等等。
通过下面的代码我们来简单浏览下Rust的语法:
```rust
// rust程序入口函数, 跟其它语言一样, 都是main, 该函数目前无返回值
fn main () {
// 使用let来声明变量, 进行绑定, a是不可变的
// 此处没有指定a的类型, 编译器会默认根据a的值为a推断类型: i32, 有符号32位整数
// 语句的末尾必须以分号结尾
let a = 10 ;
// 主动指定b的类型为i32
let b : i32 = 20 ;
// 这里有两点值得注意:
// 1. 可以在数值中带上类型:30i32表示数值是30, 类型是i32
// 2. c是可变的, mut是mutable的缩写
let mut c = 30 i32 ;
// 还能在数值和类型中间添加一个下划线,让可读性更好
let d = 30_ i32 ;
// 跟其它语言一样,可以使用一个函数的返回值来作为另一个函数的参数
let e = add ( add ( a , b ), add ( c , d ));
// println!是宏调用,看起来像是函数但是它返回的是宏定义的代码块
// 该函数将指定的格式化字符串输出到标准输出中(控制台)
// {}是占位符, 在具体执行过程中, 会把a的值代入进来
println! ( "( a + b ) + ( c + d ) = {}" , e );
}
// 定义一个函数, 输入两个i32类型的32位有符号整数, 返回它们的和
fn add ( i : i32 , j : i32 ) -> i32 {
// 返回相加值, 这里可以省略return
i + j
}
```
> 注意
在上面的`add`函数中,不要为`i+j`添加`;`,这会改变语法导致函数返回`()`而不是`i32`,具体参见[语句和表达式](./statement-expression.md)
还有几点可以留意下:
- 字符串使用双引号`""`而不是单引号`''`.Rust中单引号是留给单个字符类型(`char`)使用的
- Rust使用`{}`来作为占位符,其它语言可能使用的是`%s`, `%d`,`%p`等,因为`println!`会自动推导出具体的类型, 无需手动指定