Dart官网代码实验室:https://dart.dev/codelabs/dart-cheatsheet
特别说明:为了更进一步验证Dart代码特性,下面示例的代码并非与官方代码完全一致(为了探究细节,默认比官方代码要复杂一些)。
字符串插值:$
基础语法:字符串中,可以通过${}插入上下文中变量和变量运算值。
|
|
变量赋值:?和null
基础语法:Dart是空安全(或者null安全)的语言,也就是说除非显示声明变量是可为null的,否则他们不能为null。默认情况下,变量默认是不能为null的。
|
|
空运算符:??和??=
基础语法:用于处理可能会为空值的变量,??判断是否为空,??=当为空时才运行赋值。
特别注意:??和??=这两个运算符中间不能有空格。
|
|
访问空对象属性:.?
基础语法:为了正常访问可能为空对象的属性。在Java中,通过if条件判断来访问属性,如:int a = (obj == null) ? 0 : obj.getA();
|
|
集合类型:[]和
基础语法:Dart存在内置的基础集合类型,包括list, set和map等,可以指定元素类型。list元素可以重复,set和map不允许重复。
特别注意:这里只是简单用例,集合类型的其他用法,我在下次学习并通过博客分享。
|
|
箭头语法函数:=>
基础语法:箭头是定义函数的一种简便方法,箭头右边的执行结果作为返回值。
|
|
级联和空判断:..和?..
基础语法:为了简便对同一个对象连续执行多个方法,它每次执行均返回的是操作对象引用,而不是操作结果。
特别说明:常规情况下myObject.someMethod()返回的是方法的执行结果,但是级联操作myObject..someMethod()返回的是myObject引用本身,那么它就可以连续执行多个方法,如:myObject..someMethod()..otherMethod()等。
级联联合空判断,可以在连续执行多个方法的时候,无需担心操作对象为null,如以下代码样例:将 BigObject 的 anInt 属性设为 1、aString 属性设为 String!、aList 属性设置为 [3.0]、然后调用 allDone()。
|
|
对象属性访问器:getters和setters
基础语法:按照类的封装原则,类属性不能直接暴露给外部访问或者设置,应该提供getters和setters方法。Dart提供了简单的实现方式。Dart的类属性没有public/private等可见于修饰符,如果以下划线_开头,则为private,否则为public公共域。
代码样例:有一个购物车类,其中有一个私有的 List
|
|
函数可选位置入参:[]
基础语法:函数的入参列表中,最后面的参数通过[]曝光起来,他们是可选的,即调用函数时可以不传入参数。除非指定了默认值,否则可选入参默的认值均为null。
|
|
函数命名入参:
基本语法:与位置参数类似,命名参数使用{}包裹,它也是可选的,除非有默认值,否则它的值也是null。在调用命名参数函数时,命名参数必须通过参数名来定位,且它的顺序是可随意(这2点是与位置参数的最大区别)。
代码样例:有个MyDataObject类,有3个属性和copyWith方法,方法的入参均可能为空,如果为空则使用原对象值,否则使用入参值:
|
|
异常:try,on,catch,rethrow和finally
基础语法:Dart可以抛出和捕获异常,所有异常都是未检测异常。函数或者方法无需声明可能抛出的异常。Dart提供了Exception和Error两种异常类型,但业务逻辑中,可以抛出任意非空的对象(如:throw ‘abc’)。通过rethrow关键字,可重新抛出异常。
代码样例:tryFunction不可靠方法,捕获不同的异常并打印日志。
|
|
构造方法:this,required,位置参数和命名参数
基础语法:在构造函数中,通过this关键字可以为成员变量快速赋值。构造函数的如此可以是位置参数,也可以是命名参数,如果参数是必选参数,则使用required关键字修饰,且该参数不能有默认值。
|
|
构造方法::初始化列表
基础语法:在执行构造函数体之前,需要进行一些初始化操作,比如校验参数合法性、初始化参数等。
代码样例:使用的初始化列表将 word 的前两个字符分配给 letterOne 和 LetterTwo 属性。
|
|
构造方法:factory工厂
基础语法:父类根据入参,返回具体子类。
代码样例:一般父类方法提供一个无任何参数的构造函数。
|
|
构造方法::重定向
基本语法:构造方法中,通过:引用另外一个构造方法,可以是主构造函数,也可以是命名构造函数。
|
|
构造方法:final,const常量
基础语法:如果类生成的对象永远都不会更改,则可以让这些对象成为编译时常量。为此,请定义 const 构造方法并确保所有实例变量都是 final 的。
|
|
最后
Dart学习第2天,根据官方文档由浅入深学习,更多语法和技巧在后续研发中我在补充。
完整的测试用的实例代码,部分代码示例在小节中已经提供:
|
|
我的本博客原地址:https://ntopic.cn/p/2023092401/