前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dart学习笔记(三)

Dart学习笔记(三)

作者头像
拉维
发布2019-08-12 15:56:01
4520
发布2019-08-12 15:56:01
举报
文章被收录于专栏:iOS小生活

1,定义函数的可选参数以及默认参数

代码语言:javascript
复制
void main(){
  print(getUserInfo('拉维', 21));
}

String getUserInfo(String name, int age){
  return '姓名:$name,年龄:$age';
}

getUserInfo是自定义的函数,name和age是函数的参数,这两个参数都是必填,不然在调用的时候会报错。那么如何添加可选参数呢?如下:

代码语言:javascript
复制
String getUserInfo(String name, int age, [String sex, bool isBlackHair]){
  return '姓名:$name,年龄:$age, 性别:$sex,是否黑头发:$isBlackHair';
}

在中括号里面定义的参数就是可选参数

我们有时也有给参数设置默认值的需求,比如下面代码就将性别 sex 默认设置为'男':

代码语言:javascript
复制
String getUserInfo(String name, int age, [String sex = '男', bool isBlackHair]){
  return '姓名:$name,年龄:$age, 性别:$sex,是否黑头发:$isBlackHair';
}

2,如1中的例子,四个参数,其中后两个是可选参数,我们在调用getUserInfo这个函数的时候,后面两个可选参数必须按顺序去赋值,比如第三个参数sex我不想传,那么对不起,你不传第三个参数的时候,第四个参数也是传不了的。有没有办法解决这个问题呢?当然有办法,那就是命名参数

代码语言:javascript
复制
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方法:

代码语言:javascript
复制
List numList = [1, 2, 3, 4, 5];

  List newlist = numList.map((value){
    if (value>2) {
      return value*2;
    } else {
      return value;
    }
  }).toList();
  print(newlist);

箭头函数要求代码只能有一行

其实本例也可以使用箭头函数,因为函数内的代码可以换成一行,如下:

代码语言:javascript
复制
List newlist = numList.map((value){
    return value>2 ? value*2 : value;
  }).toList();

使用箭头函数的代码如下:

代码语言:javascript
复制
  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里,一个类的默认的构造函数与该类同名,如下所示:

代码语言:javascript
复制
class Person {
  String name;
  int age;
  String sex = '男';

  Person(){//Person类的构造函数
    this.name = 'liwei';
    this.age = 22;
  }
}

可以通过默认的构造函数来传递参数,初始化类的属性

代码语言:javascript
复制
Person(String name, String sex, int age){//Person类的构造函数
    this.name = name;
    this.sex = sex;
    this.age = age;
  }

如上代码也可以简写成:

代码语言:javascript
复制
//默认的构造函数
Person(this.name, this.age, this.sex);

上面说的是默认构造函数,我们也可以自定义命名构造函数

代码语言:javascript
复制
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,我们可以通过下划线_将类的属性或者方法定义成私有

代码语言:javascript
复制
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 方法

代码语言:javascript
复制
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函数可以直接当做一个属性来调用
}

以上。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS小生活 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档