- Dart 编程教程
- Dart 编程 - 主页
- Dart 编程 - 概述
- Dart 编程 - 环境
- Dart 编程 - 语法
- Dart 编程 - 数据类型
- Dart 编程 - 变量
- Dart 编程 - 运算符
- Dart 编程 - 循环
- Dart 编程 - 决策
- Dart 编程 - 数字
- Dart 编程 - 字符串
- Dart 编程 - 布尔值
- Dart 编程 - 列表
- Dart 编程 - 列表
- Dart 编程 - 地图
- Dart 编程 - 符号
- Dart 编程 - 符文
- Dart 编程 - 枚举
- Dart 编程 - 函数
- Dart 编程 - 接口
- Dart 编程 - 类
- Dart 编程 - 对象
- Dart 编程 - 集合
- Dart 编程 - 泛型
- Dart 编程 - 包
- Dart 编程 - 异常
- Dart 编程 - 调试
- Dart 编程 - Typedef
- Dart 编程 - 库
- Dart 编程 - 异步
- Dart 编程 - 并发
- Dart 编程 - 单元测试
- Dart 编程 - HTML DOM
- Dart 编程有用的资源
- Dart 编程 - 快速指南
- Dart 编程 - 资源
- Dart 编程 - 讨论
Dart 编程 - 快速指南
Dart 编程 - 概述
Dart 是一种面向对象的语言,具有 C 风格的语法,可以选择编译为 JavaScript。它支持各种编程辅助工具,例如接口、类、集合、泛型和可选类型。
Dart 可广泛用于创建单页应用程序。单页应用程序仅适用于网站和 Web 应用程序。单页应用程序允许在网站的不同屏幕之间导航,而无需在浏览器中加载不同的网页。一个典型的例子是GMail ─ 当您单击收件箱中的邮件时,浏览器会停留在同一网页上,但 JavaScript 代码会隐藏收件箱并将邮件正文显示在屏幕上。
Google 发布了Chromium的特殊版本- Dart VM。使用 Dartium 意味着您无需将代码编译为 JavaScript,直到您准备好在其他浏览器上进行测试。
下表比较了 Dart 和 JavaScript 的功能。
特征 | 镖 | JavaScript |
---|---|---|
类型系统 | 可选、动态 | 弱,动态 |
课程 | 是的,单继承 | 原型 |
接口 | 是的,多个接口 | 不 |
并发性 | 是的,有分离株 | 是的,使用 HTML5 Web Worker |
本教程提供对 Dart 编程语言的基本理解。
Dart 编程 - 环境
本章讨论在 Windows 平台上设置 Dart 的执行环境。
使用 DartPad 在线执行脚本
您可以使用https://dartpad.dartlang.org/上的在线编辑器在线测试您的脚本。Dart 编辑器执行脚本并显示 HTML 和控制台输出。在线编辑器附带一组预设的代码示例。
Dartpad编辑器的屏幕截图如下 -
Dartpad 还允许以更严格的方式进行编码。这可以通过检查编辑器右下角的强模式选项来实现。强模式有助于 -
- 更强的静态和动态检查
- 惯用的 JavaScript 代码生成可实现更好的互操作性。
您可以使用 Dartpad 尝试以下示例
void main() { print('hello world'); }
该代码将显示以下输出
hello world
设置本地环境
在本节中,让我们看看如何设置本地环境。
使用文本编辑器
一些编辑器的示例包括 Windows Notepad、Notepad++、Emacs、vim 或 vi 等。不同操作系统的编辑器可能有所不同。源文件通常以扩展名“.dart”命名。
安装Dart SDK
Dart 当前的稳定版本是1.21.0。dart sdk可以从以下位置下载 -
下面给出了 Dart SDK 安装的屏幕截图 -
完成 SDK 安装后,将 PATH 环境变量设置为 -
<dart-sdk-path>\bin
验证安装
要验证 Dart 是否已成功安装,请打开命令提示符并输入以下命令 -
Dart
如果安装成功,会显示dart运行时。
IDE支持
许多 IDE 支持使用 Dart 编写脚本。示例包括Jet Brains 的Eclipse、IntelliJ和WebStorm 。
下面给出了使用WebStrom IDE配置 Dart 环境的步骤。
安装WebStorm
WebStorm 的安装文件可以从 https://www.jetbrains.com/webstorm/download/#section=windows-version 下载。
WebStorm 安装文件适用于 Mac OS、Windows 和 Linux。
下载安装文件后,请按照以下步骤操作 -
安装Dart SDK:参考上面列出的步骤
创建新的 Dart 项目并配置 Dart 支持
要创建一个新的 Dart 项目,
从欢迎屏幕中单击“创建新项目”
在下一个对话框中,单击Dart
如果没有为Dart SDK路径指定值,则提供 SDK 路径。例如,SDK路径可以是<dart安装目录>/dart/dartsdk。
将 Dart 文件添加到项目中
将 Dart 文件添加到项目中 -
- 右键单击项目
- 新建 → Dart 文件
- 输入 Dart 脚本的名称
WebStorm 编辑器的屏幕截图如下 -
dart2js 工具
dart2js工具将 Dart 代码编译为 JavaScript。将 Dart 代码编译为 JS 可以在不支持 Dart VM 的浏览器上运行 Dart 脚本。
dart2js 工具作为 Dart SDK 的一部分提供,可以在/dartsdk/bin 文件夹中找到。
要将 Dart 编译为 JavaScript,请在终端中输入以下命令
dart2js - - out = <output_file>.js <dart_script>.dart
此命令生成一个文件,其中包含与 Dart 代码等效的 JavaScript。有关使用此实用程序的完整教程可以在 Dart 官方网站上找到。
Dart 编程 - 语法
语法定义了一组编写程序的规则。每种语言规范都定义了自己的语法。Dart 程序由以下部分组成:
- 变量和运算符
- 课程
- 功能
- 表达式和编程结构
- 决策和循环结构
- 评论
- 库和包
- 类型定义
- 表示为集合/泛型的数据结构
您的第一个 Dart 代码
让我们从传统的“Hello World”示例开始 -
main() { print("Hello World!"); }
main ()函数是 Dart 中预定义的方法。该方法充当应用程序的入口点。Dart 脚本需要main()方法来执行。print()是一个预定义函数,它将指定的字符串或值打印到标准输出(即终端)。
上述代码的输出将是 -
Hello World!
执行 Dart 程序
您可以通过两种方式执行 Dart 程序 -
- 通过航站楼
- 通过 WebStorm IDE
通过航站楼
通过终端执行 Dart 程序 -
- 导航到当前项目的路径
- 在终端窗口中键入以下命令
dart file_name.dart
通过 WebStorm IDE
通过 WebStorm IDE 执行 Dart 程序 -
右键单击 IDE 上的 Dart 脚本文件。(该文件应包含main()函数以启用执行)
单击“运行<文件名>”选项。下面给出了相同的屏幕截图 -
您也可以单击按钮或使用快捷键Ctrl+Shift+F10来执行 Dart 脚本。
Dart 命令行选项
Dart 命令行选项用于修改 Dart 脚本执行。Dart 的常见命令行选项包括以下内容 -
先生编号 | 命令行选项和说明 |
---|---|
1 | -c 或 --c
启用断言和类型检查(检查模式)。 |
2 | - 版本
显示虚拟机版本信息。 |
3 | --packages <路径>
指定包解析配置文件的路径。 |
4 | -p <路径>
指定在哪里可以找到导入的库。此选项不能与 --packages 一起使用。 |
5 | -h 或 --help
显示帮助。 |
启用检查模式
Dart 程序以两种模式运行,即 -
- 检查模式
- 生产模式(默认)
建议在开发和测试期间以检查模式运行 Dart VM ,因为它会添加警告和错误以帮助开发和调试过程。检查模式强制执行各种检查,如类型检查等。要打开检查模式,请在运行脚本时在脚本文件名前添加 -c 或 –-checked 选项。
但是,为了确保运行脚本时的性能优势,建议在生产模式下运行脚本。
考虑以下Test.dart脚本文件 -
void main() { int n = "hello"; print(n); }
通过输入运行脚本 -
dart Test.dart
尽管存在类型不匹配,但由于检查模式关闭,脚本仍会成功执行。该脚本将产生以下输出 -
hello
现在尝试使用“--checked”或“-c”选项执行脚本 -
dart -c Test.dart
或者,
dart - - checked Test.dart
Dart VM 将抛出一个错误,指出存在类型不匹配。
Unhandled exception: type 'String' is not a subtype of type 'int' of 'n' where String is from dart:core int is from dart:core #0 main (file:///C:/Users/Administrator/Desktop/test.dart:3:9) #1 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart :261) #2 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)
Dart 中的标识符
标识符是赋予程序中的元素(如变量、函数等)的名称。标识符的规则是 -
标识符可以包括字符和数字。但是,标识符不能以数字开头。
标识符不能包含除下划线 (_) 或美元符号 ($) 之外的特殊符号。
标识符不能是关键字。
它们必须是独一无二的。
标识符区分大小写。
标识符不能包含空格。
下表列出了有效和无效标识符的一些示例 -
有效标识符 | 无效的标识符 |
---|---|
名 | 瓦尔 |
名 | 名 |
数字1 | 名 |
$结果 | 1号 |
Dart 中的关键字
关键字在语言上下文中具有特殊含义。下表列出了 Dart 中的一些关键字。
摘要1 | 继续 | 错误的 | 新的 | 这 |
作为 1 | 默认 | 最终的 | 无效的 | 扔 |
断言 | 延期 1 | 最后 | 操作员1 | 真的 |
异步2 | 做 | 为了 | 第1部分 | 尝试 |
异步* 2 | 动态1 | 得到 1 | 重新抛出 | 类型定义 1 |
等待2 | 别的 | 如果 | 返回 | 变量 |
休息 | 枚举 | 实施1 | 套装 1 | 空白 |
案件 | 出口1 | 导入1 | 静态1 | 尽管 |
抓住 | 外部1 | 在 | 极好的 | 和 |
班级 | 延伸 | 是 | 转变 | 产量 2 |
常量 | 工厂1 | 图书馆1 | 同步* 2 | 产量* 2 |
空格和换行符
Dart 会忽略程序中出现的空格、制表符和换行符。您可以在程序中自由使用空格、制表符和换行符,并且可以以整洁一致的方式自由地格式化和缩进程序,使代码易于阅读和理解。
Dart 区分大小写
Dart 区分大小写。这意味着 Dart 会区分大小写字符。
语句以分号结束
每行指令称为一条语句。每个 dart 语句必须以分号 (;) 结尾。一行可以包含多个语句。但是,这些语句必须用分号分隔。
Dart 中的评论
注释是提高程序可读性的一种方法。注释可用于包含有关程序的附加信息,例如代码作者、有关函数/构造的提示等。编译器会忽略注释。
Dart 支持以下类型的注释 -
单行注释 ( // ) - “//”和行尾之间的任何文本都被视为注释
多行注释 (/* */) - 这些注释可能跨越多行。
例子
// this is single line comment /* This is a Multi-line comment */
Dart 中的面向对象编程
Dart 是一种面向对象的语言。面向对象是一种遵循现实世界建模的软件开发范例。面向对象将程序视为对象的集合,这些对象通过称为方法的机制相互通信。
对象- 对象是任何实体的实时表示。根据 Grady Brooch,每个物体都必须具有三个特征 -
状态- 由对象的属性描述。
Behave- 描述对象将如何行动。
身份- 将一个对象与一组类似的对象区分开来的唯一值。
类- OOP 中的类是创建对象的蓝图。类封装了对象的数据。
方法- 方法促进对象之间的通信。
示例:Dart 和对象方向
class TestClass { void disp() { print("Hello World"); } } void main() { TestClass c = new TestClass(); c.disp(); }
上面的示例定义了一个类TestClass。该类有一个方法disp()。该方法在终端上打印字符串“Hello World”。new 关键字创建该类的一个对象。该对象调用方法disp()。
该代码应产生以下输出-
Hello World
Dart 编程 - 数据类型
编程语言最基本的特征之一是它支持的数据类型集。这些是可以用编程语言表示和操作的值类型。
Dart 语言支持以下类型:
- 数字
- 弦乐
- 布尔值
- 列表
- 地图
数字
Dart 中的数字用于表示数字文字。数字飞镖有两种风格 -
整数- 整数值表示非小数值,即没有小数点的数值。例如,值“10”是一个整数。整数文字使用int关键字表示。
Double - Dart 还支持小数数值,即带小数点的值。Dart 中的 Double 数据类型表示 64 位(双精度)浮点数。例如,值“10.10”。关键字double用于表示浮点文字。
弦乐
字符串表示字符序列。例如,如果您要存储一些数据,如姓名、地址等,则应使用字符串数据类型。Dart 字符串是 UTF-16 代码单元的序列。符文用于表示 UTF-32 代码单元的序列。
关键字String用于表示字符串文字。字符串值嵌入在单引号或双引号中。
布尔值
布尔数据类型表示布尔值 true 和 false。Dart 使用bool关键字来表示布尔值。
列表和地图
数据类型列表和映射用于表示对象的集合。列表是一组有序的对象。Dart 中的 List 数据类型与其他编程语言中的数组概念同义。Map数据类型将一组值表示为键值对。dart : 核心库允许分别通过预定义的 List 和 Map 类创建和操作这些集合。
动态型
Dart 是一种可选类型的语言。如果未显式指定变量的类型,则该变量的类型为dynamic。动态关键字也可以显式地用作类型注释。
Dart 编程 - 变量
变量是存储值的“内存中的命名空间”。换句话说,它充当程序中值的容器。变量名称为标识符。以下是标识符的命名规则 -
标识符不能是关键字。
标识符可以包含字母和数字。
标识符不能包含空格和特殊字符,下划线 (_) 和美元 ($) 符号除外。
变量名不能以数字开头。
类型语法
变量必须在使用之前声明。Dart 使用 var 关键字来实现相同的目的。声明变量的语法如下 -
var name = 'Smith';
dart 中的所有变量都存储对值的引用,而不是包含该值。名为 name 的变量包含对值为“Smith”的 String 对象的引用。
Dart通过在变量名前添加数据类型来支持类型检查。类型检查可确保变量仅保存特定于数据类型的数据。其语法如下 -
String name = 'Smith'; int num = 10;
考虑以下示例 -
void main() { String name = 1; }
上面的代码片段将导致警告,因为分配给变量的值与变量的数据类型不匹配。
输出
Warning: A value of type 'String' cannot be assigned to a variable of type 'int'
所有未初始化的变量的初始值为 null。这是因为 Dart 将所有值视为对象。下面的例子说明了同样的情况 -
void main() { int num; print(num); }
输出
Null
动态关键字
未声明为静态类型的变量将隐式声明为动态类型。也可以使用dynamic关键字代替var关键字来声明变量。
下面的例子说明了同样的情况。
void main() { dynamic x = "tom"; print(x); }
输出
tom
最终和常量
Final和const关键字用于声明常量。Dart 防止修改使用 Final 或 const 关键字声明的变量的值。这些关键字可以与变量的数据类型结合使用,也可以代替var关键字。
const关键字用于表示编译时常量。使用const关键字声明的变量是隐式最终变量。
语法:final 关键字
final variable_name
或者
final data_type variable_name
语法:const 关键字
const variable_name
或者
const data_type variable_name
示例 – Final 关键字
void main() { final val1 = 12; print(val1); }
输出
12
示例 – const 关键字
void main() { const pi = 3.14; const area = pi*12*12; print("The output is ${area}"); }
上面的示例使用const关键字声明了两个常量pi和area。区域变量的值是编译时常量。
输出
The output is 452.15999999999997
注意- 只有const变量可用于计算编译时间常数。编译时常量是其值将在编译时确定的常量
例子
如果尝试修改使用Final或 const 关键字声明的变量,Dart 会引发异常。下面给出的例子说明了同样的情况 -
void main() { final v1 = 12; const v2 = 13; v2 = 12; }
上面给出的代码将抛出以下错误作为输出-
Unhandled exception: cannot assign to final variable 'v2='. NoSuchMethodError: cannot assign to final variable 'v2=' #0 NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:178) #1 main (file: Test.dart:5:3) #2 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:261) #3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)
Dart 编程 - 运算符
表达式是一种计算结果为值的特殊语句。每个表达式都由以下部分组成 -
操作数- 代表数据
运算符- 定义如何处理操作数以产生值。
考虑以下表达式——“2 + 3”。在此表达式中,2 和 3 是操作数,符号“+”(加号)是运算符。
在本章中,我们将讨论 Dart 中可用的运算符。
- 算术运算符
- 等式和关系运算符
- 型式试验操作员
- 按位运算符
- 赋值运算符
- 逻辑运算符
算术运算符
下表显示了 Dart 支持的算术运算符。
先生编号 | 运算符及含义 |
---|---|
1 | +
添加 |
2 | -
减去 |
3 | -表达式
一元减号,也称为否定(反转表达式的符号) |
4 | *
乘 |
5 | /
划分 |
6 | 〜/
除法,返回整数结果 |
7 | %
获取整数除法的余数(模) |
8 | ++
增量 |
9 | --
递减 |
等式和关系运算符
关系运算符测试或定义两个实体之间的关系类型。关系运算符返回一个布尔值,即真/假。
假设A的值为10,B的值为20。
操作员 | 描述 | 例子 |
---|---|---|
> | 比...更棒 | (A > B) 为假 |
< | 小于 | (A < B) 为真 |
>= | 大于或等于 | (A >= B) 为假 |
<= | 小于或等于 | (A <= B) 为真 |
== | 平等 | (A==B) 为假 |
!= | 不等于 | (A!=B) 为真 |
型式试验操作员
这些运算符可以方便地在运行时检查类型。
操作员 | 意义 |
---|---|
是 | 如果对象具有指定类型,则为 True |
是! | 如果对象具有指定类型,则为 False |
按位运算符
下表列出了 Dart 中可用的按位运算符及其作用 -
操作员 | 描述 | 例子 |
---|---|---|
按位与 | 甲和乙 | 在两个操作数的对应位均为 1 的每个位位置返回 1。 |
按位或 | 一个 | 乙 | 在其中一个或两个操作数的对应位为 1 的每个位位置返回 1。 |
按位异或 | ^b | 在每个位位置返回 1,其中任一操作数(但不是两个操作数)的对应位均为 1。 |
按位非 | 〜一个 | 反转其操作数的位。 |
左移 | a≪b | 将二进制表示形式的 a 向左移动 b (< 32) 位,从右侧移入零。 |
符号传播右移 | a ≫ b | 将二进制表示形式的 a 右移 b (< 32) 位,并丢弃移出的位。 |
赋值运算符
下表列出了 Dart 中可用的赋值运算符。
先生编号 | 运算符及描述 |
---|---|
1 | =(简单赋值)
将右侧操作数中的值分配给左侧操作数 Ex :C = A + B 将把 A + B 的值赋给 C |
2 | ??=
仅当变量为 null 时才赋值 |
3 | +=(添加并赋值)
它将右操作数添加到左操作数,并将结果分配给左操作数。 例如:C += A 相当于 C = C + A |
4 | ─=(减法和赋值)
它从左操作数中减去右操作数,并将结果赋给左操作数。 例如:C -= A 相当于 C = C – A |
5 | *=(乘法和赋值)
它将右操作数与左操作数相乘,并将结果赋给左操作数。 例如:C *= A 相当于 C = C * A |
6 | /=(除法和赋值)
它将左操作数与右操作数相除,并将结果赋给左操作数。 |
注意- 相同的逻辑适用于按位运算符,因此它们将变为 ≪=、≫=、≫=、≫=、|= 和 ^=。
逻辑运算符
逻辑运算符用于组合两个或多个条件。逻辑运算符返回一个布尔值。假设变量 A 的值为 10,B 的值为 20。
操作员 | 描述 | 例子 |
---|---|---|
&& | And - 仅当指定的所有表达式都返回 true 时,该运算符才返回 true |
(A > 10 && B > 10) 为假。 |
|| | OR - 如果指定的至少一个表达式返回 true,则运算符返回 true |
(A > 10 || B > 10) 为真。 |
! | NOT - 运算符返回表达式结果的倒数。例如:!(7>5) 返回 false |
!(A > 10) 为真。 |
条件表达式
Dart 有两个运算符,可让您计算可能需要 ifelse 语句的表达式 -
健康)状况 ?表达式 1 : 表达式 2
如果条件为 true,则表达式计算expr1(并返回其值);否则,它计算并返回expr2的值。
表达式1 ?? 表达式2
如果expr1非空,则返回其值;否则,计算并返回expr2的值
例子
以下示例展示了如何在 Dart 中使用条件表达式 -
void main() { var a = 10; var res = a > 12 ? "value greater than 10":"value lesser than or equal to 10"; print(res); }
它将产生以下输出 -
value lesser than or equal to 10
例子
让我们再举一个例子 -
void main() { var a = null; var b = 12; var res = a ?? b; print(res); }
它将产生以下输出 -
12
Dart 编程 - 循环
有时,某些指令需要重复执行。循环是实现相同目的的理想方法。循环代表一组必须重复的指令。在循环的上下文中,重复称为迭代。
下图说明了循环的分类 -
让我们从定循环开始讨论。迭代次数是确定/固定的循环称为确定循环。
先生编号 | 循环和描述 |
---|---|
1 | for循环
for循环是确定循环的实现。for 循环执行代码块指定的次数。它可用于迭代一组固定的值,例如数组 |
2 | for...in 循环
for...in 循环用于循环访问对象的属性。 |
继续,现在让我们讨论无限循环。当循环中的迭代次数不确定或未知时,使用不定循环。可以使用以下方式实现不定循环 -
先生编号 | 循环和描述 |
---|---|
1 | while 循环
每次指定的条件计算结果为 true 时,while 循环都会执行指令。换句话说,循环在执行代码块之前评估条件。 |
2 | do…while 循环
do...while 循环与 while 循环类似,不同之处在于 do...while 循环不会在循环第一次执行时评估条件。 |
现在让我们继续讨论Dart 的循环控制语句。
先生编号 | 控制语句和描述 |
---|---|
1 | 中断语句
Break语句用于从构造中取出控制权。在循环中使用break会导致程序退出循环。以下是break语句的示例。 |
2 | 继续声明
continue语句跳过当前迭代中的后续语句,并将控制权返回到循环的开头。 |
使用标签来控制流程
标签只是一个标识符,后跟一个冒号 (:),应用于语句或代码块。标签可以与中断和继续一起使用,以更精确地控制流量。
“继续”或“中断”语句及其标签名称之间不允许有换行符。此外,标签名称和关联循环之间不应有任何其他语句。
示例:带有 Break 的标签
void main() { outerloop: // This is the label name for (var i = 0; i < 5; i++) { print("Innerloop: ${i}"); innerloop: for (var j = 0; j < 5; j++) { if (j > 3 ) break ; // Quit the innermost loop if (i == 2) break innerloop; // Do the same thing if (i == 4) break outerloop; // Quit the outer loop print("Innerloop: ${j}"); } } }
成功执行上述代码后将显示以下输出。
Innerloop: 0 Innerloop: 0 Innerloop: 1 Innerloop: 2 Innerloop: 3 Innerloop: 1 Innerloop: 0 Innerloop: 1 Innerloop: 2 Innerloop: 3 Innerloop: 2 Innerloop: 3 Innerloop: 0 Innerloop: 1 Innerloop: 2 Innerloop: 3 Innerloop: 4
示例:带有 continue 的标签
void main() { outerloop: // This is the label name for (var i = 0; i < 3; i++) { print("Outerloop:${i}"); for (var j = 0; j < 5; j++) { if (j == 3){ continue outerloop; } print("Innerloop:${j}"); } } }
成功执行上述代码后将显示以下输出。
Outerloop: 0 Innerloop: 0 Innerloop: 1 Innerloop: 2 Outerloop: 1 Innerloop: 0 Innerloop: 1 Innerloop: 2 Outerloop: 2 Innerloop: 0 Innerloop: 1 Innerloop: 2
Dart 编程 - 决策
条件/决策结构在执行指令之前评估条件。
Dart 中的条件构造在下表中进行了分类。
先生编号 | 声明及说明 |
---|---|
1 | if语句
if语句由一个布尔表达式后跟一个或多个语句组成。 |
2 | If...Else 语句
if后面可以跟一个可选的else块。如果if块测试的布尔表达式的计算结果为 false,则else块将执行。 |
3 | 否则……如果梯子
else ...if 梯子对于测试多个条件很有用。以下是相同的语法。 |
4 | switch…case 语句
switch 语句计算表达式,将表达式的值与 case 子句相匹配,并执行与该 case 关联的语句。 |
Dart 编程 - 数字
飞镖数量可分为 -
int - 任意大小的整数。int数据类型用于表示整数。
double - 64 位(双精度)浮点数,由 IEEE 754 标准指定。double数据类型用于表示小数
num类型由int和double类型继承。dart核心库允许对数值进行多种操作。
声明数字的语法如下 -
int var_name; // declares an integer variable double var_name; // declares a double variable
例子
void main() { // declare an integer int num1 = 10; // declare a double value double num2 = 10.50; // print the values print(num1); print(num2); }
它将产生以下输出 -
10 10.5
注意-如果将小数值分配给整数变量, Dart VM将引发异常。
解析
parse ()静态函数允许将包含数字文字的字符串解析为数字。下图演示了相同的内容 -
void main() { print(num.parse('12')); print(num.parse('10.91')); }
上面的代码将产生以下输出 -
12 10.91
如果传递数字以外的任何值,解析函数将抛出FormatException 。以下代码显示如何将字母数字值传递给parse()函数。
例子
void main() { print(num.parse('12A')); print(num.parse('AAAA')); }
上面的代码将产生以下输出 -
Unhandled exception: FormatException: 12A #0 num.parse (dart:core/num.dart:446) #1 main (file:///D:/Demos/numbers.dart:4:13) #2 _startIsolate.<anonymous closure> (dart:isolatepatch/isolate_patch.dart:261) #3 _RawReceivePortImpl._handleMessage (dart:isolatepatch/isolate_patch.dart:148)
数字属性
下表列出了 Dart 编号支持的属性。
先生编号 | 属性及描述 |
---|---|
1 | 哈希码
返回数值的哈希码。 |
2 | 是有限的
如果数量有限则为真;否则为假。 |
3 | 是无限的
如果数字为正无穷大或负无穷大,则为 True;否则为假。 |
4 | 是南
如果数字是双非数字值,则为 True;否则为假。 |
5 | 为负数
如果数字为负则为 True;否则为假。 |
6 | 符号
根据数字的符号和数值返回负一、零或加一。 |
7 | 甚至
如果数字是偶数,则返回 true。 |
8 | 为奇数
如果数字是奇数,则返回 true。 |
数字方法
下面列出了数字支持的常用方法 -
先生编号 | 方法及说明 |
---|---|
1 | 腹肌
返回数字的绝对值。 |
2 | 天花板
返回不小于数字的最小整数。 |
3 | 相比于
将此与其他数字进行比较。 |
4 | 地面
返回不大于当前数字的最大整数。 |
5 | 余
返回两个数字相除后的截断余数。 |
6 | 圆形的
返回最接近当前数字的整数。 |
7 | 至双倍
返回该数字的双精度值。 |
8 | 至整数
返回该数字的等效整数。 |
9 |
返回数字的字符串等效表示形式。 |
10 | 截短
丢弃任何小数位后返回一个整数。 |
Dart 编程 - 字符串
字符串数据类型表示字符序列。Dart 字符串是 UTF 16 代码单元的序列。
Dart 中的字符串值可以使用单引号、双引号或三引号表示。单行字符串使用单引号或双引号表示。三引号用于表示多行字符串。
在 Dart 中表示字符串值的语法如下 -
句法
String variable_name = 'value' OR String variable_name = ''value'' OR String variable_name = '''line1 line2''' OR String variable_name= ''''''line1 line2''''''
以下示例说明了 Dart 中 String 数据类型的使用。
void main() { String str1 = 'this is a single line string'; String str2 = "this is a single line string"; String str3 = '''this is a multiline line string'''; String str4 = """this is a multiline line string"""; print(str1); print(str2); print(str3); print(str4); }
它将产生以下输出-
this is a single line string this is a single line string this is a multiline line string this is a multiline line string
字符串是不可变的。然而,字符串可以进行各种操作,并且生成的字符串可以作为新值存储。
字符串插值
通过将值附加到静态字符串来创建新字符串的过程称为串联或插值。换句话说,就是将一个字符串与另一个字符串相加的过程。
运算符加号 (+) 是连接/插入字符串的常用机制。
实施例1
void main() { String str1 = "hello"; String str2 = "world"; String res = str1+str2; print("The concatenated string : ${res}"); }
它将产生以下输出-
The concatenated string : Helloworld
实施例2
您可以使用“${}”在字符串中插入 Dart 表达式的值。下面的例子说明了同样的情况。
void main() { int n=1+1; String str1 = "The sum of 1 and 1 is ${n}"; print(str1); String str2 = "The sum of 2 and 2 is ${2+2}"; print(str2); }
它将产生以下输出-
The sum of 1 and 1 is 2 The sum of 2 and 2 is 4
字符串属性
下表列出的属性都是只读的。
操作字符串的方法
dart: core 库中的 String 类也提供了操作字符串的方法。下面给出了其中一些方法 -
先生编号 | 方法与说明 |
---|---|
1 | toLowerCase()
将此字符串中的所有字符转换为小写。 |
2 | toUpperCase()
将此字符串中的所有字符转换为大写。 |
3 | 修剪()
返回不带任何前导和尾随空格的字符串。 |
4 | 相比于()
将此对象与另一个对象进行比较。 |
5 | 全部替换()
将与指定模式匹配的所有子字符串替换为给定值。 |
6 | 分裂()
在指定分隔符的匹配处拆分字符串并返回子字符串列表。 |
7 | 子串()
返回此字符串从 startIndex(包含)延伸到 endIndex(不包含)的子字符串。 |
8 | toString()
返回此对象的字符串表示形式。 |
9 | 代码单位At()
返回给定索引处的 16 位 UTF-16 代码单元。 |
Dart 编程 - 布尔值
Dart 提供了对布尔数据类型的内置支持。DART 中的布尔数据类型仅支持两个值 - true 和 false。关键字 bool 用于表示 DART 中的布尔文字。
在 DART 中声明布尔变量的语法如下 -
bool var_name = true; OR bool var_name = false
例子
void main() { bool test; test = 12 > 5; print(test); }
它将产生以下输出-
true
例子
与 JavaScript 不同,布尔数据类型仅将文字 true 识别为 true。任何其他值都被视为错误。考虑以下示例 -
var str = 'abc'; if(str) { print('String is not empty'); } else { print('Empty String'); }
上面的代码片段如果在 JavaScript 中运行,将打印消息“字符串不为空”,因为如果字符串不为空,if 构造将返回 true。
然而,在 Dart 中,str被转换为false 作为 str != true。因此,该代码片段将打印消息“空字符串”(在未检查模式下运行时)。
例子
上面的代码片段如果在检查模式下运行将抛出异常。下图同样如此 -
void main() { var str = 'abc'; if(str) { print('String is not empty'); } else { print('Empty String'); } }
在检查模式下,它将产生以下输出-
Unhandled exception: type 'String' is not a subtype of type 'bool' of 'boolean expression' where String is from dart:core bool is from dart:core #0 main (file:///D:/Demos/Boolean.dart:5:6) #1 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:261) #2 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)
在未检查模式下,它将产生以下输出-
Empty String
注意-默认情况下, WebStorm IDE 在检查模式下运行。
Dart 编程 - 列表
编程中非常常用的集合是数组。Dart 以List对象的形式表示数组。列表只是一组有序的对象。dart :core库提供了 List 类,可以创建和操作列表。
Dart 中列表的逻辑表示如下:
test_list - 是引用集合的标识符。
该列表包含值 12、13 和 14。保存这些值的内存块称为元素。
List 中的每个元素都由称为索引的唯一编号来标识。索引从0开始,一直延伸到n-1,其中n是列表中元素的总数。索引也称为下标。
列表可以分类为 -
- 固定长度列表
- 可增长的列表
现在让我们详细讨论这两种类型的列表。
固定长度列表
固定长度列表的长度不能在运行时更改。创建固定长度列表的语法如下 -
步骤 1 - 声明列表
声明固定长度列表的语法如下 -
var list_name = new List(initial_size)
上述语法创建指定大小的列表。该列表不能在运行时增长或缩小。任何调整列表大小的尝试都会导致异常。
步骤 2 - 初始化列表
初始化列表的语法如下 -
lst_name[index] = value;
例子
void main() { var lst = new List(3); lst[0] = 12; lst[1] = 13; lst[2] = 11; print(lst); }
它将产生以下输出-
[12, 13, 11]
可增长的列表
可增长列表的长度可以在运行时改变。声明和初始化可增长列表的语法如下 -
步骤 1 - 声明列表
var list_name = [val1,val2,val3] --- creates a list containing the specified values OR var list_name = new List() --- creates a list of size zero
步骤 2 - 初始化列表
索引/下标用于引用应填充值的元素。初始化列表的语法如下 -
list_name[index] = value;
例子
以下示例演示如何创建包含 3 个元素的列表。
void main() { var num_list = [1,2,3]; print(num_list); }
它将产生以下输出-
[1, 2, 3]
例子
以下示例使用空 List() 构造函数创建一个零长度列表。List类中的add ()函数用于动态向列表添加元素。
void main() { var lst = new List(); lst.add(12); lst.add(13); print(lst); }
它将产生以下输出-
[12, 13]
列出属性
下表列出了dart:core 库中List类的一些常用属性。
先生编号 | 方法与说明 |
---|---|
1 | 第一的
返回列表中的第一个元素。 |
2 | 是空的
如果集合没有元素,则返回 true。 |
3 | 不为空
如果集合至少有一个元素,则返回 true。 |
4 | 长度
返回列表的大小。 |
5 | 最后的
返回列表中的最后一个元素。 |
6 | 颠倒的
返回一个可迭代对象,其中包含相反顺序的列表值。 |
7 | 单身的
检查列表是否只有一个元素并返回它。 |
Dart 编程 - 列表(基本操作)
在本章中,我们将讨论如何对列表进行一些基本操作,例如 -