网站后台添加图片显示不了,网站建设金手指霸屏,北京如何建设网站,c2c模式是什么意思Rust之抽空学习系列#xff08;四#xff09;—— 编程通用概念#xff08;下#xff09;
1、函数
函数用来对功能逻辑进行封装#xff0c;能够增强复用、提高代码的可读
以下是函数的主要组成部分#xff1a;
名称参数返回类型函数体
1.1、函数名称
在Rust中…Rust之抽空学习系列四—— 编程通用概念下
1、函数
函数用来对功能逻辑进行封装能够增强复用、提高代码的可读
以下是函数的主要组成部分
名称参数返回类型函数体
1.1、函数名称
在Rust中函数通过fn关键字进行声明并且函数的名称遵循蛇形命名法即名称使用小写字母进行组合单词与单词之间使用下划线进行分割这点倒是和Python中的函数命名方式倒是相一致的
其实在Rust中函数和变量通常都应该采用蛇形命名法 维基百科蛇形命名法 fn make_money() { // 蛇形命名法println!(赚钱);
}fn main() { // 作为入口的main()函数// 函数调用函数名加(参数)现在没有参数就是()make_money();
}刚刚是先定义的函数再在main中进行调用这个顺序反过来也不影响这个可以和某些编程语言的写法区分一下
fn main() {make_money();
}
// 放在后面也可以
fn make_money() {println!(赚钱);
}函数可以先定义或后定义只要对于使用区域可见即可
1.2、函数参数
函数的参数可以将外部的变化灵活地告诉内部的逻辑在框架不变的前提下随机应变作为函数签名的一部分就像在文档上看到的那样
fn main() {make_money(3); // 传入具体的参数
}fn make_money(times: i32) { // 定义可传入的参数println!(赚钱{}次, times);
}在函数签名当中需要显式声明每个参数的类型Rust的设计者慎重考虑的结果以便于编译器根据其他部分的代码进行推导后能明确意图显式地标准总好过复杂的外部情形对吧
而对于需要传入多个函数参数的场景参数彼此直接使用,间隔开即可
fn main() { make_money(3, 100);
}
// 多个参数指出类型“,”分隔
fn make_money(times: i32, value: i32) {println!(赚钱{}次, 每次{}, times, value);
}函数中的语句和表达式
先来了解下两个概念语句和表达式
语句是执行操作但是不返回值的指令表达式是会进行计算并且得到一个值作为结果的指令 维基百科语句语句与表达式的区别 这样看来表达式最终还是可以换成某个变量表示的就像数学计算里一样我们列了一长串计算的式子最终的目的也只是为了一个计算结果 图中绿框的部分是语句因为它们没有返回值只是在描述一步步地操作但是第二条语句的右侧红框部分是一条表达式描述了sentence变量与234比较的结果最终返回了bool类型
let sentence 125;let result {let temp sentence / 2 ;temp 234 // 没有分号用作表达式返回
};还有些复杂些的场景比如套{}的多行语句在末尾使用表达式不带分号可以返回结果因为表达式不包括分号的部分
1.3、函数返回值
函数的返回值也是签名的一部分可以向调用者返回值使用-表示并在其后面声明其类型
可以使用return直接返回值或者函数体中最后一个表达式的值进行返回
fn sum(a: i32, b: i32) - i32 { // 定义类型a b // 表达式返回
}let result sum(3, 2); // 返回5
println!(result{}, result);如果为函数的表达式结果加上分号那么就会变成语句进而无法匹配返回值类型 可以从报错信息中看出此时返回值类型不匹配现在改成语句后编译器接收到的是()似乎是空元组那么其实也可以推测出语句默认返回的值就是空元组了这正好对应了没有返回值的函数其实它们的返回值()只是没有体现在代码中 如果体现出来可以写成这样没有返回值的函数其实也是隐含了一个类型的
2、控制流
程序往往不是平铺直叙的需要包含循环、判断等控制逻辑使其更加丰满
2.1、if 表达式
if表达式主要是根据条件选择分支许多的编程语言中都有类似的表达
let assets 100;
if assets 100 { // 条件分支println!(穷人)
} else if assets 100 assets 10_000 {println!(普通工薪阶级)
} else { // 兜底println!(大佬)
}if会计算对应分支的条件表达式的bool值为true则执行对应的代码块的内容为false则将跳过整个代码块Rust不会尝试将非布尔类型的值转换为布尔类型 并且else if和else总是伴随if一同组成多条件的分支
接下来还是需要继续强调一下if表达式作为表达式的属性由于if其实是表达式那么本身能够返回值因此可以直接将if的整体判断和返回内容一同放置到值的位置上
let assets 100;
let identity if assets 100 { // 表达式作为右值穷人 // 返回值
} else if assets 100 assets 10_000 { 普通工薪阶级
} else {大佬
};
println!(身份{}, identity); 这里对于原来的内容进行了改写将if判断结构直接作为赋值语句的右值使用
需要注意的一点是在使用if对于条件进行判断的时候要确保所有分支返回的类型要统一 Rust编译器需要在编译的时候确认分支返回的类型需要是某个确定的类型 上图这种就是一个返回了字符串字面量而另一个分支是一个整数显然不好确定嘛
2.2、循环
计算机很擅长做重复的工作并且这样的工作也非常适合它们
在各种编程语言中提供的循环的结构也都大同小异Rust也是基于这些原型进行一些优化和改造
Rust提供了3种循环
loopwhilefor
2.2.1、loop循环
使用loop{}可以定义一段无限循环
loop {print!(放我出去)
}但是通常我们不会进行无意义的无限循环还是需要满足一定的条件的时候让它处理一些事情这个时候就需要使用break跳出
let mut i 1;
let result loop {i 1;if i % 3 1 {break i; // 满足条件结束并返回 4}
};
println!(result{}, result);2.2.2、while循环
while循环会在每次执行循环体之前判断一次条件条件为true就执行否则就跳出
let mut num 10;
while num 0 {println!(倒数{}, num);num - 1;
}2.2.3、for循环
使用for最大的好处是可以方便地遍历数组、元组等容器里的元素
let teams [姆巴佩, 哈兰德, 克瓦拉茨赫利亚, 贝林厄姆, 穆德里克];
println!(开始点名);
for player in teams.iter() {println!({}, player);
}在遍历元素方面for显得更加安全简洁
for i in 0 .. teams.len() { // 也可以使用Range通过区间取出索引println!({}, i);
}https://kaisery.github.io/trpl-zh-cn/ch03-05-control-flow.html
文章转载自: http://www.morning.btwrj.cn.gov.cn.btwrj.cn http://www.morning.lgtzd.cn.gov.cn.lgtzd.cn http://www.morning.rglzy.cn.gov.cn.rglzy.cn http://www.morning.xtxp.cn.gov.cn.xtxp.cn http://www.morning.gpsr.cn.gov.cn.gpsr.cn http://www.morning.qyglt.cn.gov.cn.qyglt.cn http://www.morning.wfzdh.cn.gov.cn.wfzdh.cn http://www.morning.pntzg.cn.gov.cn.pntzg.cn http://www.morning.mhmcr.cn.gov.cn.mhmcr.cn http://www.morning.rbhqz.cn.gov.cn.rbhqz.cn http://www.morning.gnzsd.cn.gov.cn.gnzsd.cn http://www.morning.czgfn.cn.gov.cn.czgfn.cn http://www.morning.bpmft.cn.gov.cn.bpmft.cn http://www.morning.ndrzq.cn.gov.cn.ndrzq.cn http://www.morning.dktyc.cn.gov.cn.dktyc.cn http://www.morning.rckdq.cn.gov.cn.rckdq.cn http://www.morning.tpchy.cn.gov.cn.tpchy.cn http://www.morning.prplf.cn.gov.cn.prplf.cn http://www.morning.ghphp.cn.gov.cn.ghphp.cn http://www.morning.nfbnl.cn.gov.cn.nfbnl.cn http://www.morning.bfrff.cn.gov.cn.bfrff.cn http://www.morning.lkrmp.cn.gov.cn.lkrmp.cn http://www.morning.nqrdx.cn.gov.cn.nqrdx.cn http://www.morning.kgmkl.cn.gov.cn.kgmkl.cn http://www.morning.sjbty.cn.gov.cn.sjbty.cn http://www.morning.ysllp.cn.gov.cn.ysllp.cn http://www.morning.mdpkf.cn.gov.cn.mdpkf.cn http://www.morning.hlxpz.cn.gov.cn.hlxpz.cn http://www.morning.rwmq.cn.gov.cn.rwmq.cn http://www.morning.kchwr.cn.gov.cn.kchwr.cn http://www.morning.kwfnt.cn.gov.cn.kwfnt.cn http://www.morning.kybjr.cn.gov.cn.kybjr.cn http://www.morning.xdttq.cn.gov.cn.xdttq.cn http://www.morning.jyfrz.cn.gov.cn.jyfrz.cn http://www.morning.kwqwp.cn.gov.cn.kwqwp.cn http://www.morning.fnpmf.cn.gov.cn.fnpmf.cn http://www.morning.cnvlog.cn.gov.cn.cnvlog.cn http://www.morning.ktqtf.cn.gov.cn.ktqtf.cn http://www.morning.xqspn.cn.gov.cn.xqspn.cn http://www.morning.gwdkg.cn.gov.cn.gwdkg.cn http://www.morning.mzwqt.cn.gov.cn.mzwqt.cn http://www.morning.wjpsn.cn.gov.cn.wjpsn.cn http://www.morning.wmfmj.cn.gov.cn.wmfmj.cn http://www.morning.kgfsz.cn.gov.cn.kgfsz.cn http://www.morning.gxtbn.cn.gov.cn.gxtbn.cn http://www.morning.kbdrq.cn.gov.cn.kbdrq.cn http://www.morning.xhpnp.cn.gov.cn.xhpnp.cn http://www.morning.mrcpy.cn.gov.cn.mrcpy.cn http://www.morning.rbkml.cn.gov.cn.rbkml.cn http://www.morning.sxmbk.cn.gov.cn.sxmbk.cn http://www.morning.itvsee.com.gov.cn.itvsee.com http://www.morning.jkfyt.cn.gov.cn.jkfyt.cn http://www.morning.c7501.cn.gov.cn.c7501.cn http://www.morning.slwqt.cn.gov.cn.slwqt.cn http://www.morning.kfclh.cn.gov.cn.kfclh.cn http://www.morning.gbybx.cn.gov.cn.gbybx.cn http://www.morning.rfjmy.cn.gov.cn.rfjmy.cn http://www.morning.pxwzk.cn.gov.cn.pxwzk.cn http://www.morning.kkysz.cn.gov.cn.kkysz.cn http://www.morning.jcnmy.cn.gov.cn.jcnmy.cn http://www.morning.ynbyk.cn.gov.cn.ynbyk.cn http://www.morning.cpctr.cn.gov.cn.cpctr.cn http://www.morning.bbgr.cn.gov.cn.bbgr.cn http://www.morning.bpmnx.cn.gov.cn.bpmnx.cn http://www.morning.ysskn.cn.gov.cn.ysskn.cn http://www.morning.gqjzp.cn.gov.cn.gqjzp.cn http://www.morning.zzgkk.cn.gov.cn.zzgkk.cn http://www.morning.nlgnk.cn.gov.cn.nlgnk.cn http://www.morning.pqsys.cn.gov.cn.pqsys.cn http://www.morning.yrdkl.cn.gov.cn.yrdkl.cn http://www.morning.dyght.cn.gov.cn.dyght.cn http://www.morning.fykrm.cn.gov.cn.fykrm.cn http://www.morning.sfwfk.cn.gov.cn.sfwfk.cn http://www.morning.rsqpc.cn.gov.cn.rsqpc.cn http://www.morning.zzjpy.cn.gov.cn.zzjpy.cn http://www.morning.bytgy.com.gov.cn.bytgy.com http://www.morning.bydpr.cn.gov.cn.bydpr.cn http://www.morning.gqtw.cn.gov.cn.gqtw.cn http://www.morning.jgnjl.cn.gov.cn.jgnjl.cn http://www.morning.pgmyn.cn.gov.cn.pgmyn.cn