Dart 函数的基本语法和 JavaScript 类似,但是不需要输入 function 关键字,这样代码更简练。所有函数都有返回值,没有指定返回值的函数返回 null(返回值类型与参数类型都可以省略)。
返回类型 方法体 (参数1, 参数2, ...){
方法体...
return 返回值
}
String getPerson(String name, int age){
return name + ', ${age}';
}
在上面的方法中,return
后面的写法,还可以换成 return name + ', $age'
,在测试的时候,发现在字符串中使用我们的变量时,${age}
与 $age
是等价的。 ${age}
可以在 "{}"中写表达式,但是后者不行。
方法中的参数类型以及返回值类型可以省略
对于这样子的写法,就和 JS 中的写法很类似了。只是说在 JS 中需要使用 function 关键字,但是在 dart 可以省略掉 function 关键字。
getPerson(name, age){
return name + ', ${age}';
}
箭头函数
我们可以将上面的写法再次改进下,我们这里的 箭头函数就是代表着一个返回值。
void main(){
print( getPerson('name', 12) );
}
getPerson(name, age) => name+ ', $age' ;
可选命名参数:{param1, param2, ...}
可选位置参数: [param1, param2, ...]
可选命名参数
从下面的代码中可以看到怎么使用可命名的参数。在代码上面就可以看到如何使用了。只是我们在传入的时候,需要指定下对应的参数名比如下面的 age
。没有传入值的就返回的为 null。
void main(){
getPerson('王麻子') ;
getPerson('王麻子', age: 12 );
getPerson('王麻子', gender: "小萝莉" );
getPerson('王麻子', age: 12, gender: "小萝莉");
}
getPerson(String name, {int age, String gender}){
print ("name = $name, age = $age, gender = $gender");
}
控制台输出
name = 王麻子, age = null, gender = null
name = 王麻子, age = 12, gender = null
name = 王麻子, age = null, gender = 小萝莉
name = 王麻子, age = 12, gender = 小萝莉
可选位置参数
通过代码可以看到,通过可选位置参数,就是严格根据方法的位置传入参数。和上面一种还是有区别的。
void main(){
getPerson('王麻子') ;
getPerson('王麻子', 12 );
getPerson('王麻子', null, "小萝莉");
}
getPerson(String name, [int age, String gender]){
print ("name = $name, age = $age, gender = $gender");
}
控制台输出
name = 王麻子, age = null, gender = null
name = 王麻子, age = 12, gender = null
name = 王麻子, age = null, gender = 小萝莉
默认参数值
默认参数值就是说,我们在方法的参数列表上面使用 “=” 号给入一个常量值,如果没有传入该值的时候,就使用我们给入的常量值。
getPerson(String name, [int age = 20, String gender = "大叔"]){
print ("name = $name, age = $age, gender = $gender");
}
方法可以作为对象赋值给其他变量
在 dart 中方法也是一个对象,可以将他赋值给变量。可以通过 var
或者 Function
来声明。
void main(){
var func = printMsg;
Function func1 = printMsg;
func();
func1();
}
printMsg(){
print("object");
}
方法可以作为参数传递给其他方法
这里指的是说,我们可把一个方法当做一个变量传入到另外一个变量中。
void main() {
List list = [1, 2, 3];
list.forEach(printElement);
}
printElement(element){
print(element);
}
闭包是一个方法(对象),闭包定义在其它方法内部,能够访问外部方法的局部变量,并持有其状态。
void main() {
// 创建一个函数add1,返回加2
Function add1 = addNum(2);
// 创建一个函数add2,返回加4
Function add2 = addNum(4);
// 2 + 3 = 5
print(add1(3));
// 4 + 3 = 7
print(add2(3));
}
// 返回一个函数对象,功能是返回累加的数字
Function addNum(int addBy){
return (int i) => addBy + i;
}