Dart 语言之“方法”

2020-01-14  本文已影响0人  AndyZX

1、一等方法对象

        方法都是对象,可以赋值给Function 变量

/**定义一个fun 方法*/

void fun() {

}

void main() {

          Function f = fun; //将fun 方法赋值给Function 变量 f ;

          f(); //直接使用Function 变量 f 执行方法;

}

/**定义一个fun2 方法*/

void fun2(Function f) {}

void main() {

Function f2 = fun2; 

f2(); //由于调用fun2 方法时没有传入参数,所以运行时会报错  error,jpg

}

error,jpg

因此,可以使用 typedef 关键字让编译器在编译时进行检查;

/*定义一个类型, F 类型, 这个类型其实就是一个方法, 接受两个int参数, 返回void */

typedef void F(int i, int j);

void fun3(F f) {

 f(1);//由于F 方法使用 typedef 定义,在传入参数与方法参数不匹配时会在编译时报错

  f(1,2); //传入对应的参数则能通过编译

}

2、可选位置参数 

            方法参数用[ ]括起来的就叫可选位置参数,调用时可传参数,也可不传

/**定义一个可选位置参数方法*/

void fun([int i, int j] ){//用[]括起来的就叫可选位置参数,调用时可传参数,也可不传

print(i);

print(j);

}

/** main 方法*/

void main(){

 fun(1);//调用 fun 方法,传递一个参数,此时输出 1,null,没有传递的参数默认为null; 

  fun();//调用 fun 方法,不传递参数,此时输出 null,null; 

  fun(2,3); //调用 fun 方法,传递对应个数的参数,此时输出 2,3; 

}

注意:如果想给 j 赋值,则必须保证 i 传值,因为是可选 位置 参数

        在方法命名是可指定默认值;

void fun([int i=1, int j=2] ){//用[]括起来的就叫可选位置参数,调用时若传递参数,则使用传递的参数值,反之使用默认参数值

print(i);

print(j);

}

/** main 方法*/

void main(){

 fun(10);//调用 fun 方法,传递一个参数,此时输出 10,2,没有传递的参数使用默认值; 

fun(); //调用 fun 方法,不传递参数,使用默认参数值,此时输出 1,2;

fun(2,3); //调用 fun 方法,传递对应个数的参数,此时输出 2,3;

}

3、可选命名参数

        方法参数用{ }括起来的就是可选命名参数,调用时可传参数,也可不传,

         可选命名参数方法传参是不能像可选位置参数方法一样直接传值,需指定给谁传值

/*定义一个可选命名参数方法,使用{ } */

void fun({int i,int j }){

}

/** main 方法*/

void main(){

  fun(1,2);//可选命名传参是不能像可选位置参数方法一样直接传值,需指定给谁传值,此处语法错误

  fun(i:100);//指定给i传值为100

  fun(j:200);//指定给j传值为200

  fun(i:100,j :200);//分别给i和j 传值

  fun();//不传值

}

        可选位置参数方法不能直接给后面的参数传值,可选命名参数可以给后面的参数传值,两者都可以设置默认值 ;

        不需要像Java一样写一大堆的重载方法;

4、默认参数值

            在定义方法是为方法内部参数提供对应参数的值,也就是为参数设置默认值的方式;

void fun([int i=1, int j=2] ){//方法在初始话时就给参数赋值

print(i);

print(j);

}

void fun({ int i=1, int j=2 } ){//方法在初始话时就给参数赋值

print(i);

print(j);

}

5、匿名方法

方法内可传入匿名方法,lambda 表达式,closure 闭包

void fun2(int k,int z){

print("cx");

}

Function f = fun2;

f((int i, int j){ //方法内传入一个没有方法名的方法

return 1;

});

上一篇下一篇

猜你喜欢

热点阅读