Rust - 函数

  • 简述

    函数是可读、可维护和可重用代码的构建块。函数是一组执行特定任务的语句。函数将程序组织成逻辑代码块。一旦定义,就可以调用函数来访问代码。这使得代码可重用。此外,函数使程序代码的阅读和维护变得容易。
    函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。
    序号 函数 & 描述
    1
    定义一个函数
    TA 功能定义指定了特定任务将完成的内容和方式。
    2
    调用函数
    必须调用一个函数才能执行它。
    3
    返回值
    函数还可以将值连同控制一起返回给调用者。
    4
    参数
    参数是一种将值传递给函数的机制。
  • 定义函数

    函数定义指定了特定任务将完成的内容和方式。在使用函数之前,必须先定义它。函数体包含应该由函数执行的代码。函数的命名规则与变量的命名规则类似。函数定义使用fn关键词。下面给出了定义标准函数的语法

    句法

    
    
    fn function_name(param1,param2..paramN) {
    
       // function body
    
    }
    
    
    函数声明可以选择包含参数/参数。参数用于将值传递给函数。

    示例 - 简单的函数定义

    
    
    //Defining a function
    
    fn fn_hello(){
    
       println!("hello from function fn_hello ");
    
    }
    
    
  • 调用函数

    必须调用一个函数才能执行它。这个过程被称为function invocation. 调用函数时应传递参数值。调用另一个函数的函数称为caller function.

    句法

    
    
    function_name(val1,val2,valN)
    
    

    示例:调用函数

    
    
    fn main(){
    
       //calling a function
    
       fn_hello();
    
    }
    
    
    这里,main()是调用函数。

    lllustration

    下面的例子定义了一个函数 fn_hello(). 该函数向控制台打印一条消息。这main()函数调用fn_hello()函数。
    
    
    fn main(){
    
       //calling a function
    
       fn_hello();
    
    }
    
    //Defining a function
    
    fn fn_hello(){
    
       println!("hello from function fn_hello ");
    
    }
    
    

    输出

    
    
    hello from function fn_hello
    
    
  • 从函数返回值

    函数还可以将一个值连同控制一起返回给调用者。这样的函数称为返回函数。

    句法

    以下任一语法均可用于定义具有返回类型的函数。

    带返回语句

    
    
    // Syntax1
    
    fn function_name() -> return_type {
    
       //statements
    
       return value;
    
    }
    
    

    没有 return 语句的速记语法

    
    
    //Syntax2
    
    fn function_name() -> return_type {
    
       value //no semicolon means this value is returned
    
    }
    
    

    lllustration

    
    
    fn main(){
    
       println!("pi value is {}",get_pi());
    
    }
    
    fn get_pi()->f64 {
    
       22.0/7.0
    
    }
    
    

    输出

    
    
    pi value is 3.142857142857143
    
    
  • 带参数的函数

    参数是一种将值传递给函数的机制。参数构成函数签名的一部分。参数值在调用期间传递给函数。除非明确指定,否则传递给函数的值数量必须与定义的参数数量相匹配。
    可以使用以下技术之一将参数传递给函数 -

    按值传递

    调用方法时,会为每个值参数创建一个新的存储位置。实际参数的值被复制到其中。因此,对调用方法内的参数所做的更改对参数没有影响。
    下面的示例声明了一个变量 no,它最初是 5。该变量作为参数(按值)传递给 mutate_no_to_zero()functionnction,它将值更改为零。在控制返回到 main 方法的函数调用之后,值将是相同的。
    
    
    fn main(){
    
       let no:i32 = 5;
    
       mutate_no_to_zero(no);
    
       println!("The value of no is:{}",no);
    
    }
    
    
    
    fn mutate_no_to_zero(mut param_no: i32) {
    
       param_no = param_no*0;
    
       println!("param_no value is :{}",param_no);
    
    }
    
    
    输出
    
    
    param_no value is :0
    
    The value of no is:5
    
    

    通过引用传递

    当您通过引用传递参数时,与值参数不同,不会为这些参数创建新的存储位置。引用参数表示与提供给方法的实际参数相同的内存位置。参数值可以通过引用传递,方法是在变量名前加上前缀& .
    在下面给出的示例中,我们有一个变量no,它最初是 5。对变量 no 的引用被传递给mutate_no_to_zero()功能。该函数对原始变量进行操作。函数调用后,当控制权返回main方法时,原变量的值将为零。
    
    
    fn main() {
    
       let mut no:i32 = 5;
    
       mutate_no_to_zero(&mut no);
    
       println!("The value of no is:{}",no);
    
    }
    
    fn mutate_no_to_zero(param_no:&mut i32){
    
       *param_no = 0; //de reference
    
    }
    
    
    * 运算符用于访问存储在变量的内存位置中的值 param_no指着。这也称为取消引用。
    输出将是 -
    
    
    The value of no is 0.
    
    

    将字符串传递给函数

    主()函数传递一个字符串对象到显示()函数。
    
    
    fn main(){
    
       let name:String = String::from("Jc2182");
    
       display(name); 
    
       //cannot access name after display
    
    }
    
    fn display(param_name:String){
    
       println!("param_name value is :{}",param_name);
    
    }
    
    

    输出

    
    
    param_name value is :Jc2182