函数格式
返回值 函数名(参数){
函数体
}
例子
bool isEmpty(String data){
return data == null;
}
//也可以省略 返回值
isEmpty(String data){
return data == null;
}
//=> 如果只有一行 可以使用这个
bool isEmpty(String data) => data == null;
可选参数
函数允许定义可选的参数。
定义可选参数有两种方式一种使用{}, 另一种使用[]。区别就是, 如果用{}声明,在使用时必须带着参数名,如果用[]声明,在使用时需要按照顺序使用。
void main() {
travel(); // From null to null
travel(to:"usa"); // From null to usa;
travel(from:"china", to:"usa"); // From china to usa;
travel2("china"); // From china to null and null;
travel2("china", "usa"); // From china to usa and null;
travel2("china", "usa", "england"); // From china to usa and england;
}
void travel({String from, String to}){
print("From $from to $to");
}
void travel2(String from, [String to, String city]){
print("From $from to $to and $city");
}
使用 @required
注释表示参数是 required 性质的命名参数
什么意思那就选填的变成必填,如果没有填编译器会报错
package:flutter/material.dart flutter中
package:meta/meta.dart dart中
引入上述2个包之一才可以使用
void main() {
//travel(); //错误
// travel(to:"usa"); //错误
travel(from:"china", to:"usa"); // From china to usa;
}
void travel({@required String from, String to}){
print("From $from to $to");
}
参数默认值
函数的参数可以用=来定义默认值,如果没有用=赋予默认值,那么参数默认值为null。
参数的默认值必须是编译时常量。
void travel({String from="china", String to="usa"}){
print("From $from to $to");
}
//map set list 的默认值需要用const修饰
void animals(
[List<String> names = const ["cat", "dog"],
Map<String, String> nameMap = const {"c": "cat", "d": "dog"}]) {
print("animals: $names");
print("nameMap: $nameMap");
}
匿名函数
多数函数是有名字的, 比如 main() 和 printElement()。 也可以创建没有名字的函数,这种函数被称为 匿名函数, 有时候也被称为 lambda 或者 closure 。 匿名函数可以赋值到一个变量中, 举个例子,在一个集合中可以添加或者删除一个匿名函数。
([[Type] param1[, …]]) {
codeBlock;
};
//例子
var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
print('${list.indexOf(item)}: $item');
});
词法作用域
变量的作用域是固定的, 简单说变量的作用域在编写代码的时候就已经确定了。 花括号内的是变量可见的作用域。
闭包
闭包 即一个函数对象,即使函数对象的调用在它原始作用域之外, 依然能够访问在它词法作用域内的变量。
函数可以封闭定义到它作用域内的变量。
void main() {
// 创建一个加 2 的函数。
var add2 = makeAdder(2);
// 创建一个加 4 的函数。
var add4 = makeAdder(4);
print(add2(3));//5
print(add4(3));//7
}
/// 返回一个函数
Function makeAdder(num addBy) {
return (num i) => addBy + i;
}
返回值
所有函数都会返回一个值。 如果没有明确指定返回值, 函数体会被隐式的添加 return null; 语句。
foo() {}
void main() {
print(foo() == null);
}
网友评论