那些你不知道的Dart细节之操作符、流程控制语句、异常(四)

简介: Dart中的操作符、流程控制语句和异常

前言

前几篇文章分别讲解了Dart中的变量、内置类型和函数(方法),对Dart的基本语法已经有了较多的了解,那么今天来说一下Dart中的操作符、流程控制语句和异常。前几篇文章没有看的,建议先看一下前两篇文章。

那些你不知道的Dart细节之变量

那些你不知道的Dart细节之内置类型

那些你不知道的Dart细节之函数(方法)

那些你不知道的Dart细节之操作符、流程控制语句、异常

那些你不知道的Dart细节之类的点点滴滴

那些你不知道的Dart细节之泛型和库

操作符

20200308183003296.png

上面这幅图中就是Dart中的操作符,标为黑色的操作符和Java中使用基本一样,这里也就不过多赘述,咱们来仔细看看标红Java中没有的操作符:

后缀操作: ?.

如果写过Kotlin的话,可以跳过这段了,这里的问号点和Kotlin中基本一致,都是为了判空而出现的,那么下面来看一下使用方式吧:

main() {
  String a;
  print(a.length != null ? a.length : '');
}

上面就是咱们平时写的代码,一个三目表达式来进行判空。但是在Dart中可以不这样写,可以直接使用问号点。

main() {
  String a;
  //print(a.length != null ? a.length : '');
  print(a?.length);
}

是不是很方便?以后判空可以直接使用**"?."**了

除(取整):~/

这个操作符其实很简单,只是对数字进行取整,下面是实例代码:

print(1/2);
print(1~/2);

上面代码的输出值是0.5和0

类型操作:as

这个和Kotlin中的as也基本一样,是对数据进行类型转换,很简单,直接看代码:

num n = 1;
int n2 = n as int;

类型操作: is

num n1 = 1.0;
if(n1 is int){
  print("int");
}else{
  print("double");
}

类型操作:is!

从名称上就可以知道和上面的is正好相反,就不写代码验证了。

判空:??

这个上面也写出来了,意思就是判空,下面直接看一下使用方法吧:

bool aaa;
aaa = aaa ?? false;

级联:…

这个其实就是链式调用,之前的文章中写过,当时的例子是StringBuffer:

StringBuffer stringBuffer = StringBuffer();
 stringBuffer..write("sss")..write("ssss");

操作符就说到这里吧,掌握好操作符在写代码的时候会事半功倍的,希望大家都能掌握好。

流程控制语句

这个,怎么说,稍微提一下吧,这个是基础的基础,Dart中的流程控制语句和Java基本一样,直接进行使用就行。

不是不想写,if语句、for循环、while循环、brake、continue、switch、case,没了,这就是Dart的流程控制语句,如出一辙。跳过。

异常

Dart 提供了 Exception 和 Error 类型, 以及一些子类型。还可以定义自己的异常类型。但是,Dart 代码可以抛出任何非 null 对象为异常,不仅仅是实现了 Exception 或者 Error 的对象。

下面这幅图是Dart中的Exception :

20200308183031395.png

下面这幅图是Dart中的Error:

20200308183051645.png


抛出异常

这个和Java中写法一样,所有的 Dart 异常是非检查异常。 方法不一定声明了他们所抛出的异常, 并且你不要求捕获任何异常。

// 抛出Exception 对象
// throw new FormatException(‘格式异常');
// 抛出Error 对象
// throw new OutOfMemoryError();

Dart 代码可以抛出任何非 null 对象为异常,不仅仅是实现了 Exception 或者 Error 的对象。

// 抛出任意非null对象
// throw '这是一个异常';

捕获异常

所有的 Dart 异常是非检查异常。 方法不一定声明了他们所抛出的异常, 并且你不要求捕获任何异常。可以使用on 或者 catch 来声明捕获语句,也可以 同时使用。使用 on 来指定异常类型,使用 catch 来 捕获异常对象。

try {
    throw new OutOfMemoryError();
  } on OutOfMemoryError {
    print('没有内存了');
  }

catch() 可以带有一个或者两个参数, 第一个参数为抛出的异常对象, 第二个为堆栈信息 (一个 StackTrace 对象)。

try {
    throw new OutOfMemoryError();
  } catch (e, s) {
    print('Exception details: $e');
    print('Stack Trace: $s');
  } finally {
    print('end');
  }

可以使用rethrow把捕获的异常重新抛出。

try {
    throw new OutOfMemoryError();
  } catch (e, s) {
    print('Exception details: $e');
    print('Stack Trace: $s');
    rethrow;
  }

总结

到这里为止Dart的第四篇文章完成。本篇文章主要讲解了一下Dart语言的操作符、流程控制语句和异常。下一篇文章讲解一下Dart中的类(非常重要),希望大家能够喜欢

目录
相关文章
|
2天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
12天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
491 201
|
4天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
627 157
|
10天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
4天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
634 46