我们在上一章回中介绍了级联操作符相关的内容,本章回中将介绍 空安全.闲话休提,让我们一起Talk Flutter吧。
概念介绍
在编译语言中都有空指针或者空对象(null),它们会引起程序的异常。在移动开发中如果使用Java和OC开发程序,发生这类异常后会使应用程序被系统强制关闭,业内通称FATA异常,crash或者叫程序闪退。这种异常是比较严重的程序错误,为了避免程序中发生这种异常dart在2.1版本中引入了空类型,并且基于空类型引入了安全机制,本章回将详细介绍空类型和基于该类型的空安全机制。
使用方法
在dart语言中使用问号表示空类型,定义变量或者对象时可以使用空类型,通常是在类型的后面加一个问号,这样的变量或者对象叫作可空变量或者可空对象,非空变量或者非空对象可以赋值给可空变量或者可空对象,但是可空变量或者可空对象不能赋值给非空变量或者非空对象。
有了空类型后,变量或者对象可能为空,因此,我们在使用空变量或者空对象时需要判断变量或者对象是否为空,不然会引起编译错误,这便是安全机制。有了此机制后把空对象引发的异步提前到程序编译阶段,这样有助于提前发现和解决程序中的错误。
判断空对象使用"?.","!."
或者"??"
操作符,把这些操作符添加到空对象后面就可以。这些操作符有着不同的含义,详细如下:
- ?.: 如果对象为空则不做任何操作,否则通过点操作符访问对象的属性或者方法;
- !.: 当前对象肯定不为空并且通过点操作符访问对象的属性或者方法;
- ??: 如果对象为空则执行操作符后面的内容,否则不做任何操作;
除了这些操作符外还可以使用三元操作符或者if/else语句来判断对象是否为空,这些内容是基础知识,我就不详细介绍了,稍后我们将通过代码来演示操作符的用法。
示例代码
///定义可以空变量和可空对象
int ? nonIntValue;
TestObject? nonTObj;
///空安全相关内容
nonIntValue = 3;
TestObject temp = TestObject(1, 'good');
///非空变量可以赋值给可空变量,但是可空变量不能赋值给非空变量
// nonTObj = temp;
// temp = nonTObj;
///使用可空对象,如果对象为空则不做任何操作,不会访问对象的属性a
debugPrint('value: ${nonTObj?.a}');
///变量的值肯定不为空,这样做不太好,虽然可以通过编译,但是会引起运行时异常
// debugPrint('value: ${nonTObj!.a}');
///判断对象是否为空:如果为空则括号中的值为temp,否则为nonTObj
debugPrint('value: ${(nonTObj ?? temp).toString()}');
if(nonTObj == null) {
debugPrint('nonTobj is null');
} else {
debugPrint('nonTobj is not null');
}
///三元操作符
(nonTObj == null) ? debugPrint('nonTobj is null'): debugPrint('nonTobj is not null');
上面代码中使用的TestObject是自定义的类型,我们没有公布它的源代码,大家可以自己定义一个类型,或者使用语言自带的String类型,总之只要是可以创建对象的类型就可以。
我们在代码中添加了详细的注释,这样方便大家理解代码,建议大家自己动手去编译程序,通过程序的运行结果来分析代码,这样有助于大家更好地掌握空类型和空安全相关的内容。文章来源:https://www.toymoban.com/news/detail-676087.html
看官们,与空安全相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!文章来源地址https://www.toymoban.com/news/detail-676087.html
到了这里,关于第一百二十七回 空安全的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!