Flutter 函数
函数是Dart中的一等值,它们能够保存在变量中,能作为参数传递及作为函数的返回值。与所有Dart运行时的值一样,函数同样是对象。
1. 参数
参数要么是位置型的,要么是命名型的。
1.1 位置参数
位置参数可以是必填的可以是可选的。
可选参数必须排列在一起防止在参数列表尾部并用方括号包裹。任意必填参数都必须出现在可选参数前面。可选参数可以指定默认值单必须是编译时常量。
increment(x, [step = 1]) => x + step; //step是可选的,默认值是1
调用
increment(1);//2 increment(1,2);//3
1.2 命名参数
命名参数要在位置参数之后声明并用大括号包裹。
addressLetter({name:'', street:''}) { }
命名参数始终是可选的,如果可选参数没有指定默认值,则默认值是null
2. 函数体
两种形式:
- 大括号括起来的语句列表(可能为空)
- =>符号后跟着一个表达式。
Dart中的每个函数要么返回一个值要么抛出一个异常,如果完成了最后一条语句,而且它不是return,则我们讲返回null
3. 函数声明
大多数函数都是通过函数声明来进行介绍的,而构造函数,setter,getter方法例外。函数声明有一个函数名称,后边跟着参数列表和函数体。
函数声明可以出现在顶层(例如main()),或是作为方法存在,函数也可以是局部变量。局部变量就是定义在其他函数内部的函数。
4. 闭包
函数可以定义在表达式的内部,它们被称为字面量,或者成为闭包。
与函数声明不同,闭包没有名称,有参数列表和函数体。
sum(nums) => nums.reduce((a,b) => a + b;)
5. 调用方法与函数
函数可以通过标准的方式来调用,即在函数值表达式后加上一个括号参数列表。
例如:
print('Hello');
getter可以不使用参数列表来调用
例如:
true.runtimeType;
5.1 级联
Dart使用双点运算符进行方法级联。
例如:
var colors = ['red', 'yellow', 'green', 'black'].sublist(1,3); colors.sort(); //不使用级联
var colors = ['red', 'yellow', 'green', 'black'].sublist(1,3)..sort();//使用级联