Dart基础之关键知识点2

1、final和const使用场景

const适用于编译期就能确定的字面值常量。

final适用于需要在运行期才能确定值的常量,且赋值后不能再改变值。

只看文字描述可能不好理解,通过下面的例子就会很清楚了,下面的例子如果把final改为const会编译不通过的。

 var x = 100;
 var y = 200;
 final double xdy = x/y; // x/y的值在运行期才能确定,因此不能使用const

2、任何保存在变量中的都是对象 ,所有对象继承自 Object 类,并且所有的对象都是对应一个 的实例。

     无论是数字,函数和 null 都是对象。

     所有未初始化的变量的初始化都是null

例如int型的变量,如果定义时未初始化,则为null 

3、??和?. 运算符

       有以下2种使用场景,可以简写很多代码

b ??= value   // 如果b为空时,将变量赋值给b,否则,b的值保持不变。

expr1 ?? expr2   //如果 expr1 是 non-null, 返回 expr1 的值; 否则, 执行并返回 expr2 的值。

4、?. 运算符

foo?.bar 如果foo变量为null值,则整个表达式的值为null。否则表达式的值为foo对象的bar属性的值。

5、.. 语法为 级联调用 (cascade)

 使用级联调用, 可以简化在一个对象上执行的多个操作。

class Point {
  int x;
  int y;
  Point(this.x, this.y);
}

void main() {
  Point p1 = Point(100, 100);
  p1
    ..x = 200
    ..y = 200;  // 注意分号加在最后一个语句的末尾,中间的语句不能加分号。
}

6、没有关键字 "public","protected"和"private"。 如果标识符以下划线(_)开头,则它相对于库是私有的。

7、=> expr 

=> expr 语法是 { return expr; } 的简写。 => 符号 有时也被称为 箭头 语法。

如果函数中只有一句表达式,可以使用这种简写语法:

bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;

8、混入

通过创建一个继承自 Object没有构造函数的类,来实现 一个 Mixin 。 如果 Mixin 不希望作为常规类被使用,使用关键字 mixin 替换 class 。

也就是说,如果你写了一个类,他没有继承其它类(所有类默认继承Object),而且也没有自定义构造函数,那么它就可以作为一个Mixin来使用。

9、接口实现(implements)

如果有一个类 A,你想让类B拥有A的API,但又不想继承A的实现,那么可以把A当做接口:类B implements 类A.

每个类都隐式的定义了一个接口,接口包含了该类所有的实例成员及其实现的接口(构造函数不包含在接口里)。 

       接口里面的方法和成员变量都需要在子类里重新实现,你可以在子类重新实现时加上@override,用于和新增的成员区分。

 

参考:https://www.dartcn.com/guides/language/language-tour#%E9%9A%90%E5%BC%8F%E6%8E%A5%E5%8F%A3

          https://www.cnblogs.com/webcabana/p/11872265.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值