Flutter - Dart基础(函数、必选参数、可选参数)

3,504 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

函数的定义

  • Dart 是一种面向对象的语言,所以即使函数也是对象,类型就是 Function

  • 函数的定义方式:

    返回值 函数的名称(参数列表) {
      函数体
      return 返回值
    }
    
    int sum(int num1, int num2) {
        return num1 + num2;
    }
    
    
    var value = sum(2, 3);
    
  • 如果函数中只有一个表达式, 那么可以使用箭头语法,也称箭头函数

    num sum(num num1, num num2) => num1 + num2;
    
    var value = sum(2, 3);
    

函数的参数

函数重载:方法名字相同,但是参数不同

在 Dart 中,不支持函数重载

必选参数

方法的参数必须传

void sayHI(String name) {
    print(name);
}

void main(List<String> args) {
    sayHI("dart");
}

log:
dart

可选参数

可选参数分为位置可选参数和命名可选参数

  • 位置可选参数

    参数形式为 [param1, param2, ...]。函数调用时,参数的类型和位置要一一对应

    void sayHI1(String name, [int? age, double? height]) {
        print("name:$name, age:$age, height:$height");
    }
    
    void main(List<String> args) {
        sayHI1("dart", 18, 180.0);
        sayHI1("dart", 18);
    }
    
    log:
    name:dart, age:18, height:180.0
    name:dart, age:18, height:null
    
  • 命名可选参数

    参数形式为 {param1, param2, ...}。函数调用时,必须把外部形参写上,但是顺序不需要一一对应

    void sayHI2(String name, {int? age, double? height}) {
        print("name:$name, age:$age, height:$height");
    }
    
    void main(List<String> args) {
        sayHI2("dart", age: 18, height: 180.0);
        sayHI2("dart", height: 180.0, age: 18);
        sayHI2("dart", age: 18);
    }
    
    log:
    name:dart, age:18, height:180.0
    name:dart, age:18, height:180.0
    name:dart, age:18, height:null
    
  • 可选参数中可以设置参数默认值,在不传的情况下,使用默认值,必传参数不能有默认值

    void sayHI3(String name, {int age = 12, double? height}) {
        print("name:$name, age:$age, height:$height");
    }
    
    void main(List<String> args) {    
        sayHI3("dart");
        sayHI3("dart", height: 180.0);
        sayHI3("dart", age: 18, height: 180.0);
    }
    
    log:
    name:dart, age:12, height:null
    name:dart, age:12, height:180.0
    name:dart, age:18, height:180.0
    
  • 可选参数中可以指定某个参数是必传的(使用 @required)

    void sayHI4(String name, {int age = 12, required double? height}) {
        print("name:$name, age:$age, height:$height");
    }
    
    void main(List<String> args) {    
        sayHI4("dart", height: 180.0);
        sayHI4("dart", age: 18, height: 180.0);
    }
    
    log:
    name:dart, age:12, height:180.0
    name:dart, age:18, height:180.0
    

函数是一等公民

  • 函数是一等公民

    在面向对象的语言中,类(对象)是一等公民,因为类或对象可以作为参数、返回值,各种传递。在 Dart 中,函数就是一等公民,有如下功能:

    • 将一个函数赋值给一个变量
    • 将函数作为另一个函数的参数
    • 将函数作为另一个函数的返回值

将一个函数赋值给一个变量

void doSomething(Function fun) {
    fun();
}

void main(List<String> args) {
    var fun = sayHI;
    fun();
}

log:
sayHI

将函数作为另一个函数的参数

  • 不带参数和返回值

    void sayHI() {
        print("sayHI");
    }
    void doSomething(Function fun) {
        fun();
    }
    void main(List<String> args) {
        doSomething(sayHI);
    }
    log:
    sayHI
    
  • 带参数和返回值

    String sayHI(String name) {
        return name;
    }
    
    void doSomething(Function fun) {
        var result = fun("dart");
        print(result);
    }
    
    void main(List<String> args) {
        doSomething(sayHI);
    }
    

将函数作为另一个函数的返回值

void sayHI() {
    print("sayHI");
}

Function getFun() {
    return sayHI;
}

void main(List<String> args) {
    var fun = getFun();
    fun();
}

log:
sayHI