知识点:定义和调用函数
rust
fn main() {
// 调用无参数无返回值的函数
say_hello();
// 调用有参数有返回值的函数
let result = add(3, 5);
println!("3 + 5 = {}", result);
// 调用有多个参数的函数
greet("小明", 18);
}
// 无参数无返回值
fn say_hello() {
println!("Hello!");
}
// 有参数,有返回值(-> 后面写返回类型)
fn add(a: i32, b: i32) -> i32 {
a + b // 最后一个表达式不加 ; 就是返回值
}
// 多个不同类型的参数
fn greet(name: &str, age: i32) {
println!("你好 {},你 {} 岁了", name, age);
}
核心规则
规则 说明
参数必须写类型 fn add(a: i32, b: i32)
返回值用 -> 声明 fn add(...) -> i32
返回值不加 ; a + b 是返回值,a + b; 不是
字符串参数用 &str fn greet(name: &str)
动手试试
补全下面的代码:
fn main() {
// 补全:调用 max 函数,传入 42 和 17,结果赋给 bigger
// 然后打印 "较大的数是: {bigger}"
// 补全:调用 is_adult 函数,传入 20,结果赋给 adult
// 然后打印 "是否成年: {adult}"
// 补全:调用 introduce 函数,传入 "小红" 和 25
}
// 补全:定义函数 max,接收两个 i32 参数 a 和 b,返回较大的那个
// 提示:用 if/else 表达式作为返回值
// 补全:定义函数 is_adult,接收一个 i32 参数 age,返回 bool
// 提示:age >= 18
// 补全:定义函数 introduce,接收 &str 类型的 name 和 i32 类型的 age
// 打印 "大家好,我叫{name},今年{age}岁"
期望输出:
较大的数是: 42
是否成年: true
大家好,我叫小红,今年25岁
写好了贴过来,没问题就进入第6课:循环(for / while / loop) 👋
贴代码
rust
fn main() {
// 补全:调用 max 函数,传入 42 和 17,结果赋给 bigger
// 然后打印 "较大的数是: {bigger}"
let bigger = max(42, 17);
println!("较大的数是: {}", bigger);
// 补全:调用 is_adult 函数,传入 20,结果赋给 adult
// 然后打印 "是否成年: {adult}"
let adult = is_adult(20);
println!("是否成年: {}", adult);
// 补全:调用 introduce 函数,传入 "小红" 和 25
introduce("小红", 25);
}
// 补全:定义函数 max,接收两个 i32 参数 a 和 b,返回较大的那个
// 提示:用 if/else 表达式作为返回值
fn max(a: i32, b: i32) -> i32 {
if a > b {
a
} else {
b
}
}
// 补全:定义函数 is_adult,接收一个 i32 参数 age,返回 bool
// 提示:age >= 18
fn is_adult(age: i32) -> bool {
age >= 18
}
// 补全:定义函数 introduce,接收 &str 类型的 name 和 i32 类型的 age
// 打印 "大家好,我叫{name},今年{age}岁"
fn introduce(name: &str, age: i32) {
println!("大家好,我叫{},今年{}岁", name, age);
}
评语
完全正确!👏
你掌握了:
函数的定义和调用
参数类型声明和返回值
if/else 表达式作为返回值(不加 ; )
重点知识点
- 函数定义格式: fn 函数名(参数名: 类型, 参数名: 类型) -> 返回类型 { 函数体 }
- 没有返回值的函数,省略 -> ,相当于返回 () 单元类型。
- if 表达式可以直接作为函数返回值,不需要写 return 。
- 布尔判断可以直接写 age >= 18 ,表达式结果就是 bool 。
- 调用函数: 函数名(实参1, 实参2) 。