# 函数
# 函数
# main() 函数
Dart支持top-level函数,就是main()
,任何应用都必须拥有一个main()函数,默认返回值为空,参数为一个可选的 List<String>
void main(List<String> arguments){
print(arguments);
}
我们在运行文件的时候,执行
dart index.dart 1 2
这里文件名后面跟的1和2,就是两个参数
# 函数返回值
定义一个普通函数,下面的函数规定了参数的类型以及函数返回值的类型,都是String
String getColor(String color){
return color;
}
所有的函数都有返回值,那么没有明确指定返回值的函数会在函数体的最后隐式的添加 return null
,则返回类型为void
,表示空.
# 函数参数
函数除了上面提到的最普通的参数以外,还有一些其他的参数.比如:可选参数,默认参数等.其中可选参数又可以是命名参数或者位置参数,但一个参数只能选择其中一种方式修饰
# 命名可选参数
定义函数时,使用{param1, params2, ...}
这样的形式.
调用函数时,使用指定命名参数 paramName: value 的形式.如{param1: true, param2 : 'test'}
,可以不按照顺序传入.
String getColor(String color,{double height}){
print(color);
print(height);
return color;
}
getColor('red');
getColor('red',height:88.8);
使用 @required注解表示参数是必填的
String getColor(String color,{double height, double width}){
print(color);
print(height);
print(width);
return color;
}
其中 required 被定义在 meta package.所以无论是直接引入,还是引入其他package,而那个package中输出了meta都可以. 直接引用:
import 'package:meta/meta.dart';
在Flutter中引入包后也可直接使用 @required 注解
import 'package:flutter/material.dart';
# 位置可选参数
定义函数时,将参数放到 []
中来标记参数是可选的,如[param1, param2]
调用函数时,就是正常的fn('必选','可选1','可选2')
这样的形式.必选参数放前面,可选参数放后面,且必须按照顺序传入.若其中某个不是最后的参数不存在的话,需传入null
.
String getColor(String color,[double height]){
print(color);
print(height);
return color;
}
getColor('red');
getColor('red',88.8);
# 默认参数
在定义的时候,可以提供参数默认值,但默认值只能是编译时常量.如果没有提供默认值的话,则默认是null
void getPerson(String name, {String gender='male'}){
print('$name $gender');
}
getPerson('zhangsan'); // zhangsan male
getPerson('lisi',gender:'female'); // lisi female
list
或map
也可以作为默认值传递
void foo({
List<int> list = const [1,2],
Map<String, double> map = const {
'height':180,
'width':150
}
}){
print('list: $list');
print('map: $map');
}
foo();
# 函数是一等对象
一个函数可以作为另一个函数的参数
void printEle(Object ele){
print(ele);
}
List<Object> list = [1,'t',true];
list.forEach(printEle);
也可以将一个函数赋值给一个变量
var printEle = (ele) => print(ele);
List<Object> list = [1,'t',true];
list.forEach(printEle);
# 匿名函数
又叫lambda
或者closure
,修改上面的例子
List<Object> list = [1,'t',true];
list.forEach((item){
print(item);
});
← 变量和类型 运算符和控制流程语句 →