1,定义函数的可选参数以及默认参数
void main(){
print(getUserInfo('拉维', 21));
}
String getUserInfo(String name, int age){
return '姓名:$name,年龄:$age';
}
getUserInfo是自定义的函数,name和age是函数的参数,这两个参数都是必填,不然在调用的时候会报错。那么如何添加可选参数呢?如下:
String getUserInfo(String name, int age, [String sex, bool isBlackHair]){
return '姓名:$name,年龄:$age, 性别:$sex,是否黑头发:$isBlackHair';
}
在中括号里面定义的参数就是可选参数。
我们有时也有给参数设置默认值的需求,比如下面代码就将性别 sex 默认设置为'男':
String getUserInfo(String name, int age, [String sex = '男', bool isBlackHair]){
return '姓名:$name,年龄:$age, 性别:$sex,是否黑头发:$isBlackHair';
}
2,如1中的例子,四个参数,其中后两个是可选参数,我们在调用getUserInfo这个函数的时候,后面两个可选参数必须按顺序去赋值,比如第三个参数sex我不想传,那么对不起,你不传第三个参数的时候,第四个参数也是传不了的。有没有办法解决这个问题呢?当然有办法,那就是命名参数:
void main(){
print(getUserInfo('拉维', 26, isBlackHair: true));
}
String getUserInfo(String name, int age, {String sex = '男', bool isBlackHair}){
return '姓名:$name,年龄:$age, 性别:$sex,是否黑头发:$isBlackHair';
}
也就是将1中的可选参数的中括号[]改为大括号{}。
3,箭头函数。
先来看个需求:有一个数字数组,将该数组中所有大于2的数字元素乘以3,其他数字元素不变。我们可以使用List的map方法:
List numList = [1, 2, 3, 4, 5];
List newlist = numList.map((value){
if (value>2) {
return value*2;
} else {
return value;
}
}).toList();
print(newlist);
箭头函数要求代码只能有一行。
其实本例也可以使用箭头函数,因为函数内的代码可以换成一行,如下:
List newlist = numList.map((value){
return value>2 ? value*2 : value;
}).toList();
使用箭头函数的代码如下:
List numList = [1, 2, 3, 4, 5];
List newlist = numList.map((value)=>value>2?value*2:value).toList();
print(newlist);
4,Dart中所有的东西都是对象,包括int和double类型的变量。
在Objective-C中,int、double是基础数据类型,不是对象,但是在Dart中,int、double也是对象。Dart里的万物皆对象,所有对象都继承自Object类。
5,所谓构造函数,就是指在初始化的时候自动调用的那个函数。在Dart里,一个类的默认的构造函数与该类同名,如下所示:
class Person {
String name;
int age;
String sex = '男';
Person(){//Person类的构造函数
this.name = 'liwei';
this.age = 22;
}
}
可以通过默认的构造函数来传递参数,初始化类的属性:
Person(String name, String sex, int age){//Person类的构造函数
this.name = name;
this.sex = sex;
this.age = age;
}
如上代码也可以简写成:
//默认的构造函数
Person(this.name, this.age, this.sex);
上面说的是默认构造函数,我们也可以自定义命名构造函数:
class Person {
String name;
int age;
String sex;
//自定义的命名构造函数
Person.man(this.name, this.age){
this.sex = 'man';
}
getPersonInfo(){
print('${this.name}, ${this.age}, ${this.sex}');
}
}
main(){
var person1 = new Person.man('liwei', 18);
person1.getPersonInfo();
}
6,我们可以通过下划线_将类的属性或者方法定义成私有。
class Dog{
String name;
int age;
Dog(this.name, this.age);
//私有方法
void _showInfo(){
print('${this.name}, ${this.age}');
}
//公有方法
void publicShowInfo(){
print('${this.name}, ${this.age}');
}
}
7,getter 方法和 setter 方法
class Rect{
double width;
double height;
//setter函数
set myWidth(value){
this.width = value;
}
//getter函数(相比一般的函数,getter函数少了一对小括号())
get area{
return width*height;
}
}
void main(){
Rect rect = new Rect();
rect.myWidth = 18.0;
rect.height = 20.0;
print(rect.area);//调用的时候,getter函数可以直接当做一个属性来调用
}
以上。