专栏简介:本专栏作为Rust语言的入门级的文章,目的是为了分享关于Rust语言的编程技巧和知识。对于Rust语言,虽然历史没有C++、和python历史悠远,但是它的优点可以说是非常的多,既继承了C++运行速度,还拥有了Java的内存管理,就我个人来说,还有一个优点就是集成化的编译工具cargo,语句风格和C++极其相似,所以说我本人还是比较喜欢这个语言,特此建立这个专栏,作为学习的记录分享。
日常分享:每天努力一点,不为别的,只是为了日后,能够多一些选择,选择舒心的日子,选择自己喜欢的人!
目录
函数
参数
控制流
if表达式
循环语句
loop循环语句
循环标签
while循环
for 遍历循环
总结
函数
函数的声明在多个编程语言中均有被提到,函数这个功能应该算是一门编程语言中举足轻重的功能。使用函数可以使功能更加规格化,更加具有逻辑条例。增加代码的可读性。
和C++不同的是,Rust语言所有的函数声明均是使用关键字fn来实现。和Python中的def关键字一样,这样为我们省去了很多的麻烦。
fn main() {pr_Hello();
}
fn pr_Hello()
{println!("Hello,world!");
}
上面的例子就是创建了一个无参的函数,如果我们要创建含参的函数又该如何?
参数
我们可以定义为拥有 参数(parameters)的函数,参数是特殊变量,是函数签名的一部分。当函数拥有参数(形参)时,可以为这些参数提供具体的值(实参)。技术上讲,这些具体值被称为参数(arguments),但是在日常交流中,人们倾向于不区分使用 parameter 和 argument 来表示函数定义中的变量或调用函数时传入的具体值。
fn main() {And(3,4);
}
fn And(x:i32, y:i32) ->i32
{let num:i32=(x+y);println!("x+y: {}",num);return num;
}
上面的例子中的一个函数的作用是将两个数加起来,函数中定义了两个参数,参数类型都是i32的,在定义行参的时候,一定要注明参数类型,同时,细心的小伙伴应该会发现,函数的后面存在一个箭头符号,并且指向了i32数据类型,这是代表函数的返回值是i32类型的,也就是函数是否有返回值的标志。
控制流
控制流,顾名思义就是控制程序语句执行情况的的语句,包括条件语句,循环语句等语句,这里就介绍一些常用的控制语句。
if表达式
if
表达式允许根据条件执行不同的代码分支。你提供一个条件并表示 “如果条件满足,运行这段代码;如果条件不满足,不运行这段代码。”
与if语句相匹配的是else或者else if。其实通过中文意思就可以知道他们的作用,无非就是判断是否满足条件,然后根据判断情况来执行代码。
fn main() {let num= And(5,6);println!("num: {:?}", num);
}
fn And(x:i32, y:i32) ->i32
{let mut number;if(x>y){println!("x bigger than y");number=x-y;}else if (x==y){println!("x equals y");number=x;}else{println!("x smaller than y");number=y+x;}return number;
}
上面给出的例子中,使用了if,else if,else语句,除此之外,每个判断语句都没有使用括号括起来。一定要注意这点,和C++有点区别。在Rust中,if语句还是有很多缺陷,比如说,他不能自动把非布尔值转换成布尔值,也就是判断条件只能是布尔值。而且if,else语句太过臃肿,代码结构不够美观,为了解决这种缺点,Rust中还有一种很好的分支判断结构叫做——模式匹配(match)。后面会介绍,这里就简单的了解一点。
循环语句
循环语句就是指将一段代码重复使用的一种方式,使用的很多,所以这里我们必须要详细的介绍一下。
loop循环语句
loop循环语句有点像MySQL中的用法有点相似,loop循环语句也叫无限循环语句,只有当你确定跳出循环的时候,才能跳出。
fn loops(mut i:i32, mut j:i32)->i32
{loop{if i==j{break i;}else if i<j{//i+=1;i=i+1;j=j-1;}else{i=i-1;j=j+1;}}
}
loop语句中,使用了break i;这种语句格式,这个和c++中的语句不同,他可以终止循环语句,同时返回后面的表达式的值。谈到返回值,在一个函数中,函数的返回值类型必须一样。除了break可以跳出循环外,还有一种语句——continue。可以结束此次迭代,进入下次迭代。
循环标签
如果存在嵌套循环,break
和 continue
应用于此时最内层的循环。你可以选择在一个循环上指定一个 循环标签(loop label),然后将标签与 break
或 continue
一起使用,使这些关键字应用于已标记的循环而不是最内层的循环。
fn main() {let mut count = 0;'counting_up: loop {println!("count = {count}");let mut remaining = 10;loop {println!("remaining = {remaining}");if remaining == 9 {break;}if count == 2 {break 'counting_up;}remaining -= 1;}count += 1;}println!("End count = {count}");
}
这里的标签可以理解为其实就是一种值为“counting_up”的变量,然后绑定到loop上,只要loop的返回值为变量的值,则这个表达式正确,开始执行。
while循环
while循环语句和其他语言中的一样,当判断条件为true时,执行循环,否则结束循环;
fn main()
{While();}
fn While()
{let mut i=0;while i!=100{println!("{}",i);i+=1;}
}
这种结构消除了很多使用 loop
、if
、else
和 break
时所必须的嵌套,这样更加清晰。当条件为 true
就执行,否则退出循环。个人比较推荐使用这种。
for 遍历循环
for循环作为最常见的循环,在c++,java等语言中均有使用,不过Rust语言中的书写格式和Python中的书写格式很相似。
fn main()
{let a:[i32;5]=[1,2,3,4,5];for i in a{println!("{}",i);}}
Rust还提供了一种简单的数据便利:
fn main()
{let a:[i32;5]=[1,2,3,4,5];for i in (0..5){println!("{}",a[i]);}}
这里使用的是一种类似于Python中的range的容器,可以很快的书写,同时也提供了 反转函数rev。
fn main() {for number in (1..4).rev() {println!("{number}!");}println!("LIFTOFF!!!");
}
总结
最后,再介绍一下函数的注释,Rust的注释分为单行注释(//)和多行注释(/* */)。这个语法和c++几乎一样。所以就没在主文中介绍了。对于本篇文章,主要是介绍了Rust中的一些简单的关键字以及用法,下一节进入“所有权”的学习。拜拜了你勒!!!