Skip to content

Dart函数/方法

内置函数

  • print()

自定义函数

方法名建议驼峰命名

dart
返回类型 方法名称(参数1,参数2,...){
    方法体
    return 返回值;
}
dart
void welcomeRH() {
  print('欢迎来到隆海文档');
}

List getList() {
  return [1, 2, 'r', '隆'];
}

void main() {
  welcomeRH();
  print(getList());
}

函数嵌套

dart
List getList() {
  getStr() {
    print('我是一个获取字符串的方法');
  }

  getStr();
  return [1, 2, 'r', '隆'];
}

void main() {
  print(getList());
}

方法值参

dart
String callMe(String name, int age) {
  return "我的名字叫${name},今年${age}岁";
}

void main() {
  var str = callMe('隆海', 23);
  print(str);
}

可选参数

在 Dart 2.12 及更高版本中,启用了空安全特性。默认情况下,所有变量都是非空的,除非显式声明为可以为空

[int age] 的可选参数 age 没有被显式声明为可以为空。你需要将 age 声明为可空类型 int?

dart
String callMe(String name, [int? age]) {
  if (age != null) {
    return "我的名字叫${name},今年${age}岁";
  } else {
    return "我的名字叫${name},年龄保密";
  }
}

void main() {
  var str = callMe('隆海');
  print(str);
}

默认参数

dart
String callMe(String name, [int? age, sex = '男']) {
  if (age != null) {
    return "我的名字叫${name},今年${age}岁,性别${sex}";
  } else {
    return "我的名字叫${name},年龄保密,性别${sex}";
  }
}

void main() {
  var str = callMe('隆海');
  print(str);
}

命名参数

dart
String callMe(String name, {int? age, sex = '男'}) {
  if (age != null) {
    return "我的名字叫${name},今年${age}岁,性别${sex}";
  } else {
    return "我的名字叫${name},年龄保密,性别${sex}";
  }
}

void main() {
  var str = callMe('隆海', sex: '女');
  print(str);
}

方法嵌套

dart
void main() {
  fn1() {
    print('执行了fn1方法');
  }

  fn2(fn) {
    fn1();
  }

  fn2(fn1);
}

匿名函数

dart
void main() {
  var pnum = () {
    print('我是匿名方法');
  };
  pnum();
}

箭头函数

箭头函数只能有一行代码,多行报错

dart
void main() {
  List ls1 = ['苹果', '香蕉', '李子'];
  ls1.forEach((value) => {print(value)});
}

自执行函数

dart
void main() {
  (() {
    print('我是自执行方法');
  })();
}

递归函数

dart
void main() {
  var sum = 0;
  fn(int n) {
    sum += n;
    if (n == 0) {
      return;
    }
    ;

    fn(n - 1);
  }

  fn(100);
  print(sum);
}

闭包函数

全局变量特点:全局变量常驻内存、全局变量污染全局

局部变量的特点:下常驻内存会被垃圾机制回收、不会污染全局

要求:

  • 常驻内存
  • 不污染全局

使用闭包可以实现

dart
void main() {
  printNum() {
    var num = 123;
    return () {
      num++;
      print(num);
    };
  }

  var b = printNum();
  b();
}