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、IntelliJWebStorm 。

下面给出了使用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()函数以启用执行)

  • 单击“运行<文件名>”选项。下面给出了相同的屏幕截图 -

运行 Test1 Dart

您也可以单击运行按钮按钮或使用快捷键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关键字声明了两个常量piarea。区域变量值是编译时常量。

输出

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类型由intdouble类型继承。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

字符串属性

下表列出的属性都是只读的。

先生编号 属性及描述
1 代码单位

返回此字符串的 UTF-16 代码单元的不可修改列表。

2 是空的

如果此字符串为空,则返回 true。

3 长度

返回字符串的长度,包括空格、制表符和换行符。

操作字符串的方法

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 编程 - 列表(基本操作)

在本章中,我们将讨论如何对列表进行一些基本操作,例如 -

<
先生编号 基本操作及说明
1 将元素插入列表

可变列表可以在运行时动态增长。List.add ()函数将指定的值追加到 List 的末尾并返回修改后的 List 对象。

2 更新列表

Dart 中的列表可以通过以下方式更新:

3 删除列表项

dart:core 库中的 List 类支持的以下函数可用于删除列表中的项目。