flutter开发 dart定义方法与异常(三)

方法

int add(int i,int j) {
  return i + j;
}
//也可以选择忽略类型(不推荐)
add( i, j) {
  return i + j;
}
//对于只有一个表达式的方法,可以选择使用缩写语法来定义:
add(i, j) => i + j;
//在箭头 (=>) 和分号 (;) 之间只能使用一个 表达式

一等方法对象

​ Dart 是一个真正的面向对象语言,方法也是对象并且具有一种 类型 Function。 这意味着,方法可以赋值给变量,也可以当做其他方法的参数。可以把方法当做参数调用另外一个方法

var list = [1,2,3];
//将 print 方法 作为参数传递给forEach
list.forEach(print);
//可以将方法赋值给一个变量 类型为Funcation
var p = print;
list.forEach(p);

我们可以通过typedef修饰方法,在开发中如果需要回调不需要java那样使用抽象或者接口的方式,使用方法就可以。例如:

typedef void onClick();

class Button {
  void setOnlickListener(onClick listener) {
    listener();
  }
}

方法可以有两种类型的参数:必需的和可选的。 必需的参数需要在参数列表前面, 后面再定义可选参数。

可选命名参数

可选命名参数可以代替java的重载的方式,他可以将方法的参数放到 {} 中就变成可选 命名参数

int add({int i, int j}) {
  if(i == null || j == null){
     return 0;
  }
  return i + j;
}

​ 调用方法的时候,可以使用这种形式 paramName: value 来指定命名参数。例如:

//无必须参数
add()
//选择传递参数
add(i:1)
//位置无关
add(i:1, j:2)
add(j:1, i:2)

可选位置参数

​ 把方法的参数放到 [] 中就变成可选 位置参数,传值时按照参数位置顺序传递

int add([int i, int j]) {
  if(i == null || j == null){
     return 0;
  }
  return i + j;
}
// 1赋值给i
add(1);
// 按照顺序赋值
add(1,2);

默认参数值

​ 在定义方法的时候,可选参数可以使用 = 来定义可选参数的默认值。

int add([int i = 1, int j = 2]) => i + j;
int add({int i = 1, int j = 2}) => i + j;

匿名方法

​ 没有名字的方法,称之为匿名方法,也可以称之为 lambda 或者 closure 闭包。匿名方法的声明为:

([Type] param1, …) { 
  codeBlock; 
}; 

​ 如:

var list = ['apples', 'oranges', 'grapes', 'bananas', 'plums'];
list.forEach((i) {
  print(list[i]);
});

异常

​ 和 Java 不同的是,所有的 Dart 异常是非检查异常。 方法不一定声明了他们所抛出的异常, 并且不要求你捕获任何异常。

​ Dart 提供了 ExceptionError 类型, 以及一些子类型。你还 可以定义自己的异常类型。但是, Dart 代码可以 抛出任何非 null 对象为异常,不仅仅是实现了 Exception 或者Error 的对象。

throw new Exception('这是一个异常');
throw '这是一个异常';
throw 123;

​ 与Java不同之处在于捕获异常部分,Dart中捕获异常同样是使用catch语句,但是Dart中的catch无法指定异常类型。需要结合on来使用,基本语法如下:

try {
    throw 123;
} on int catch(e){
    //使用 on 指定捕获int类型的异常对象       
} catch(e,s){
    //函数 catch() 可以带有一个或者两个参数, 第一个参数为抛出的异常对象, 第二个为堆栈信息 ( StackTrace 对象)
    rethrow; //使用 `rethrow` 关键字可以 把捕获的异常给 重新抛出
} finally{
    
}

转载于:https://www.jianshu.com/p/d8c3bad86b8c

猜你喜欢

转载自blog.csdn.net/weixin_33950035/article/details/91108329