Dart基础语法<四> 方法

本节主要记录Dart方法中的

  • 普通方法
  • 一等方法
普通方法

普通方法在用法上和java类似。

int plus(int i, int j, int k) {
  return i + j + k;
}

void main() {
  print(plus(2, 3, 4));
}

支持忽略类型写法(但基于可读性等因素,还是尽量不要这么写)

plus1( i, j) {
  return i + j;
}

如果只有一个表达式的方法,可以使用以下写法:

plus2(i, j, k) => i + j + k;

注:Dart中不支持方法重载

一等方法

在Dart语法中,方法也是对象,并且具有一种类型 Function(这表示方法可以作为变量甚至其他方法的参数,即可以把方法作为参数供其他方法调用。)

abstract class Function {

  external static apply(Function function, List positionalArguments,
      [Map<Symbol, dynamic> namedArguments]);

  int get hashCode;

  bool operator ==(Object other);
}
  1. 如下列代码,f1运行结果为方法f的执行结果,即输出function
void f() {
  print("function");
}

void f1(Function function) {
  function();
}

void main() {
  Function function = f;
  f1(function);
}

但这种写法在调用时,存在无法确定回调函数返回值和参数类型个数问题
如下列代码,方法f1在调用f2的时候,不能确定f2的参数类型个数及返回类型

void f1(Function function) {
  function();
}

void f2(int i, int j) {
  print(i + j);
}

void main() {
  Function function2 = f2;
  f1(function2);
}

运行时报错如下参数不匹配错误.png

  1. 针对以上情况,可以使用关键字typedef
    定义一个类型F,该类型其实是个方法,需要传入两个int类型参数ij,返回void
typedef void F(int i, int j);

void f2(int i, int j) {
  print(i + j);
}

void f3(F f) {
  f(1, 2);
}

void main() {
  f3(f2);
}
  1. 当然也可以直接导入方法
void f4( void f (int i, int j) ) {}

**总结:**在Java中,如果需要通知调用者或者其他地方方法执行过程的各种情况,可能需要指定一个接口,比如View的onClickListener。而在Dart中,我们可以直接指定一个回调方法给调用的方法,由调用的方法在合适的时机执行这个回调。

匿名方法

没有名字的方法,称之为匿名方法。用法与javalamda表达式相同。

猜你喜欢

转载自blog.csdn.net/qq_22255311/article/details/111773915