Flutter - Dart - 函数

272 阅读2分钟

编译环境: VSCode版本: 1.46.0 ,Dart版本: v3.11.0,Flutter版本: v3.11.0

函数

函数声明

  • 指定返回值,函数名
void test1() {
  print('aaa');
}
  • 不指定返回值 参数
test2(num a) {
  print('bb $a');
}

  • 不指定返回值
test3(String c) {
  print(c + c);
}
  • 如果函数体只有一个表达式,可以用箭头函数形式
test4(int d) => print(d);
  • 箭头函数返回一个值
test5(int e) => e + 5;

参数

参数分为必要参数和可选参数,可选参数必须在参数列表最后。

  • 可选参数

    1. 可选参数分为可选位置参数和可选 命名参数
    2. 二者都可以定义默认值,但是默认值必须编译时是常量
  • 可选命名参数


void test6() {
  test7(a: true, b: 3); //指定可选参数名字进行传智,可以不全传值 c 是常量  这里输出为 3 ccc
}

  • 可选参数声明
    1. 使用{}包含参数
    2. 使用冒号来设置默认值
    3. 不设置默认值又不传值,则值为null 如果c 没有设置默认值,则c默认为null
void test7({bool a, int b, String c: 'ccc'}) {
  if (a) {
    print(b);
    print(c);
  } else {
    print(b * b);
  }
}

  • 可选位置参数声明

    1. 使用[] 包含参数,放在参数列表最后
    2. 可放多个参数
    3. 可设置默认值

String test8(String from, String msg, [String device, bool sex = true]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device $sex';
    ;
  }
  return result;
}

void test9() {
  //调用时, 可选参数的位置和类型要与申明时一致
  String result = test8('aa', 'bb');
  print(result); //aa says bb

  String result1 = test8('cc', 'dd','iPhone');
  print(result1); //cc says dd with a iPhone true

}

把函数当参数传递

void test10(){
  //将函数传递进去
   test11(test12, 3);
}

  // 参数中有个类型为函数的参数

void test11(Function f,int p){
   f(p);
}

//定义一个函数
void test12( int a){
    print(a);
}


  • 把函数赋值给变量
void test13(){
  var result = test14; //将函数赋值给变量
  result(5);
}

void test14( int a){
   print(a * a); //25
}

  • 所有函数都有返回值,如果没有显示返回,则默认返回null

void test15(){
   var result = test16('test16');
   print(result);
}
 test16(String a){
   print(a); //null
}

typedef

  1. 在Dart中一切皆对象,那么函数也是对象,既然是对象,那么必然有其类。所有的类继承Object,而函数的类是Function,但是Function并不能描述一个具体的函数信息:比如返回值,参数个数和参数类型
  2. typdef 就是为一个具体的函数信息声明其类型 ,如一个方法

int sum(int a, int b){
  return a + b ;
}

  • 返回值为int ,两个参数a、b ,参数类型 int. 那么所有符合该特点的函数,都是该类型的对象,都可以在将函数当做参数时使用该类型
typedef int FunctionType(int a, int b);

int compute(FunctionType fun, a,b){
  return fun(a, b);
}

int sub(int a, int b){
  return a-b;
} 

//特殊函数,是程序的入口
void main(List<String> args) {
  test1(); //aaa
  test2(2); //bb 2
  test3('cc'); //cccc
  test4(4); //4
  print(test5(5));
  test6();
  test9();
  test10();
  test13();

  int sumNum = compute(sum,3,4);
  int subNum = compute(sub,10, 2);
  print(sumNum); //7
  print(subNum); //8
}