美文网首页
Dart(九)方法

Dart(九)方法

作者: 书写不简单 | 来源:发表于2018-12-29 13:47 被阅读0次

Dart是一种真正的面向对象语言,所以即使是函数也是对象,并且有一个类型,Function。这意味着函数可以分配给变量或作为参数传递给其他函数。您还可以调用Dart类的实例,就好像它是一个函数一样。

  • 方法可作为对象赋值给其他变量

  • 方法可作为参数传递给其他方法

void main() {

  // 方法作为一个变量
  var func_world = printHello;
  func_world();
  //
  Function func_world2 = printHello;
  func_world2();

  // print 方法作为参数
  var list = [1, 2, 3, 4];
  list.forEach(print);

  // 
  var list2 = ['h', 'e', 'l', 'l', 'o'];
  // 此处的times作为参数传递
  print(listTimes(list2, times));

}

void printHello(){
  print('this is a world');
}

List listTimes(List list, String times(str)){
  List listnew = [];
  // times()方法作为参数,在该方法内部调用
  for (var i = 0; i < list.length; i++) {
    listnew.add(times(list[i]));
  }
  return listnew;

}

String times(str){
  return str * 3;
}

结果:

this is a world
this is a world
1
2
3
4
[hhh, eee, lll, lll, ooo]

返回值类型使得运行高效,但是如果你省略了这些类型,这个函数仍然可以工作:

isNoble(atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

对于只包含一个表达式的函数,可以使用简写语法:

bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;

"=> expr"语法是{ return expr; }的简写,=>符号有时被称为胖箭头语法。在箭头(=>)和分号(;)之间只能出现表达式(而不是语句)。例如,您不能在那里放置if语句,但是您可以使用条件表达式。

匿名方法

上文刚刚提到的方法就是这里说的匿名方法:

定义:

(参数1,参数2,....){

    方法体...

    return 返回值

 }
  • 匿名方法 + 省略参数 作为变量调用
void main() {

  // 匿名方法,以及省略参数
  var func = (){
    print('匿名方法,以及省略参数');
  };
  // 调用
  func();

}
  • 匿名方法 + 传递参数 作为变量调用
void main() {

  // 匿名方法,以及省略参数
  var func = (content){
    print('匿名方法,参数是${content}');
  };
  // 调用
  func('zhoubin');

}
  • 匿名方法作为参数被传递
void main() {

  List list33 = ['z','b'];
  // 匿名方法,
  // (str){
  //  return str * 6;
  // }
  // 作为参数被传递
  print(listTimes(list33, (str){
    return str * 6;
  }));
}
//
//
// String :匿名函数的返回值类型
// timesnew:接收的匿名函数的"标识"
// (str):匿名函数的参数
List listTimes(List list, String timesnew(str)){
  List listnew = [];
  for (var i = 0; i < list.length; i++) {
    listnew.add(timesnew(list[i]));
  }
  return listnew;

}

相关文章

网友评论

      本文标题:Dart(九)方法

      本文链接:https://www.haomeiwen.com/subject/yhvulqtx.html