"首次提交"

This commit is contained in:
2024-06-08 15:01:12 +08:00
parent 6e0f708d0a
commit 84349a2469
112 changed files with 3272 additions and 0 deletions

1
loop_while_for/.gitignore vendored Executable file
View File

@ -0,0 +1 @@
/target

8
loop_while_for/Cargo.toml Executable file
View File

@ -0,0 +1,8 @@
[package]
name = "loop_while_for"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

114
loop_while_for/src/main.rs Executable file
View File

@ -0,0 +1,114 @@
fn main() {
println!("Hello, world!");
loop_fun();
while_fun();
for_fun();
}
/* rust 提供了三种循环方式
loop、while、和for
*/
fn loop_fun(){
//loop 循环,一直循环直到主动退出
//loop 从功能上和while true 是一样的,
//但是为什么说要单独列出来我目前还不是很清楚
let mut num = 100;
loop {
// num --;// 不允许这样写
num -= 1;
if num > 10{
//提前结束本次循环
continue;
}
if num < 0 {
// 主动结束循环
break;
}
println!("{}", num)
} // 这里是不需要加上分号的,因为他不是一个语句
println!("go,go,go");
// loop也是表达式所以其可以产生值作为右值
let mut num = 100;
let cond = 3%num;
let ret = loop {
num -=1;
if cond == num{
//break;//这样主动退出之后ret的值将会是一个
//break //这样也是可以的和上面效果一致
break num; //case1 这样会把num作为整个loop表达式的值给到ret ret类型就是i32
//break num //case2 不加上分号也是可以的
/* case3 可以换行写,但是要加分号了,不然跨了行不会被认为是一个完整的语句,
但是还是不要写这变态的代码吧😅
break
num;
*/
break 123;//break语句后的代码不会被执行到。
}
};
println!("ret is {}", ret)
}
fn while_fun(){
// while 循环,
// 检查条件如果符合就进入循环并直到主动退出或者条件不满足
// 每轮循环都会检查条件
let mut num = 30;
// 循环条件的检查,满足才会开始&继续循环
while num > 0 {
if num > 10{
println!("{} is > 10, I cant process -_-!", num);
break; //提前终止循环
}
if num % 2 == 0 {
println!("{}!", num);
num -= 1;
continue;// 提前终止本轮循环
}
println!("{}", num);
num -= 1;//修改循环条件
} // 这里同样不用加分号因为while 是表达式不是语句
if num == 0{
println!("go,go,go");
}
let mut num = 30;
// while 表达式可作为右值但是在里面不能用break返回其值
// 因为while有可能是条件不满足而结束此时是没有值的如果break指定了返回值这样就会导致
// 编译器无法在编译期间确定ret的类型
// 这也引发了我对loop的思考是否就是while这种特性导致需要一种完全交给开发者可控的退出方式的循环才催生了loop👻
// 因为loop 的退出是完全开发者编写的退出时机,也就使得可以带有返回值
let ret = while num > 0 {
num = 0;
//break num;//不可以像loop那样带有值
break;
}; // 这里必须加分号因为while 表达式作为右值和let ret一起构成完整语句
}
fn for_fun(){
//for 循环 语法就是 for xxx in yyy {}
// yyy是一个可迭代的对象比如数组range等
// for 循环相比较while,loop可以安全的遍历迭代对象而不用担心越界的问题。
let ary = [0, 1, 2, 3, 4, 5];
//遍历整个数组并打印
for item in ary.iter() {
println!("{}", item);
}
//从100到-1遍历一遍 range: start..end
let rng = 100..1;
for item in 100..-1 {
if item > 10 {
continue;
}
if item <=0 {
break;// 和while 一样可以提前退出但是无法携带值
}
println!("{}", item);
}
}