函数
带可选参数的函数
String getInfo(String name, [int? age]){
if(age!=null){
return "姓名:$name 年龄:$age";
}
return "姓名:$name 年龄保密";
}
print(getInfo("bob"));
print(getInfo("bob",20));
代码里的int?
是什么?
在Dart的新版本中,为了防止null引发的异常,采取了如下的解决方式:
如果一个变量可以为null,需要在变量类型后加上一个"?"来表明这个变量可以为null,否则所有变量默认不可以为null
而此处的可选变量,在不选择录入该参数时,默认为null,所以如果不声明变量可空,则会发生以下报错
The parameter ‘age’ can’t have a value of ‘null’ because of its type, but the implicit default value is ‘null’.
带默认参数的函数
可选参数的进阶版
String getInfo(String name, [int? age, String sex="male"]){
if(age!=null){
return "姓名:$name 性别:$sex 年龄:$age";
}
return "姓名:$name 性别:$sex 年龄保密";
}
命名参数的函数
中括号换成了大括号,兼容可选参数和默认参数,赋值的时候需要加上参数名
String getInfo(String name, {int? age, String sex="male"}){
if(age!=null){
return "姓名:$name 性别:$sex 年龄:$age";
}
return "姓名:$name 性别:$sex 年龄保密";
}
print(getInfo("bob",age:20));
箭头函数
用箭头指向执行语句来代替函数体
List list=[1,2,3];
list.forEach((element)=>print(element));
或者也可以加上大括号
List list=[1,2,3];
list.forEach((element)=>{
print(element)
});
但是注意:不管加不加括号,箭头函数都只能写一句话
实际应用
List bobAndJenny=["bob","jenny","bob","bob","jenny"];
var killBob = bobAndJenny.map((name)=>name=="bob"?name="x.x":name);
print(killBob.toList());
输出:
[x.x, jenny, x.x, x.x, jenny]
Why Jenny Kill
匿名方法
一个没有函数名没有返回值的方法
(){
//方法体
};
无参
var func = () {
print("Hello, bob");
};
func();
有参
var func1 = (name) {
print("Hi, $name");
};
func1("jenny");
自执行方法
由两个括号组成
前一个括号中加入一个匿名方法
后一个括号中为匿名方法的参数
((years){
print("I am alive! I've been waiting $years years for this day");
})(1/365);