- 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 库由一组类、常量、函数、typedef、属性和异常组成。
导入库
导入使库中的组件可供调用者代码使用。import 关键字用于实现相同的目的。一个 dart 文件可以有多个 import 语句。
内置 Dart 库 URI 使用 dart: 方案来引用库。其他库可以使用文件系统路径或 package: 方案来指定其 URI。包管理器(例如 pub 工具)提供的库使用package: schema。
在 Dart 中导入库的语法如下 -
import 'URI'
考虑以下代码片段 -
import 'dart:io' import 'package:lib1/libfile.dart'
如果您只想使用库的一部分,可以有选择地导入该库。其语法如下 -
import 'package: lib1/lib1.dart' show foo, bar; // Import only foo and bar. import 'package: mylib/mylib.dart' hide foo; // Import all names except foo
下面给出了一些常用的库 -
先生编号 | 库和描述 |
---|---|
1 | 飞镖:io 服务器应用程序的文件、套接字、HTTP 和其他 I/O 支持。该库不适用于基于浏览器的应用程序。默认导入该库。 |
2 | 飞镖:核心 每个 Dart 程序的内置类型、集合和其他核心功能。该库会自动导入。 |
3 | 飞镖:数学 数学常数和函数,以及随机数生成器。 |
4 | 飞镖:转换 用于在不同数据表示形式(包括 JSON 和 UTF-8)之间进行转换的编码器和解码器。 |
5 | 飞镖:类型数据 有效处理固定大小数据(例如无符号 8 字节整数)的列表。 |
示例:导入和使用库
以下示例导入内置库dart: math。该代码片段调用数学库中的sqrt()函数。该函数返回传递给它的数字的平方根。
import 'dart:math'; void main() { print("Square root of 36 is: ${sqrt(36)}"); }
输出
Square root of 36 is: 6.0
库中的封装
Dart 脚本可以使用下划线 ( _ ) 作为标识符前缀,以将其组件标记为私有。简而言之,Dart 库可以限制外部脚本对其内容的访问。这称为封装。其语法如下 -
句法
_identifier
例子
首先,定义一个具有私有函数的库。
library loggerlib; void _log(msg) { print("Log method called in loggerlib msg:$msg"); }
接下来,导入库
import 'test.dart' as web; void main() { web._log("hello from webloggerlib"); }
上面的代码会导致错误。
Unhandled exception: No top-level method 'web._log' declared. NoSuchMethodError: method not found: 'web._log' Receiver: top-level Arguments: [...] #0 NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:184) #1 main (file:///C:/Users/Administrator/WebstormProjects/untitled/Assertion.dart:6:3) #2 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:261) #3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)
创建自定义库
Dart 还允许您使用自己的代码作为库。创建自定义库涉及以下步骤 -
第 1 步:声明库
要显式声明库,请使用库语句。声明库的语法如下所示 -
library library_name // library contents go here
第 2 步:关联库
您可以通过两种方式关联库 -
- 在同一目录下
import 'library_name'
- 来自不同的目录
import 'dir/library_name'
示例:自定义库
首先,让我们定义一个自定义库,calculator.dart。
library calculator_lib; import 'dart:math'; //import statement after the libaray statement int add(int firstNumber,int secondNumber){ print("inside add method of Calculator Library ") ; return firstNumber+secondNumber; } int modulus(int firstNumber,int secondNumber){ print("inside modulus method of Calculator Library ") ; return firstNumber%secondNumber; } int random(int no){ return new Random().nextInt(no); }
接下来,我们将导入库 -
import 'calculator.dart'; void main() { var num1 = 10; var num2 = 20; var sum = add(num1,num2); var mod = modulus(num1,num2); var r = random(10); print("$num1 + $num2 = $sum"); print("$num1 % $num2= $mod"); print("random no $r"); }
该程序应产生以下输出-
inside add method of Calculator Library inside modulus method of Calculator Library 10 + 20 = 30 10 % 20= 10 random no 0
库前缀
如果导入两个具有冲突标识符的库,则可以为一个或两个库指定前缀。使用“as”关键字指定前缀。其语法如下 -
句法
import 'library_uri' as prefix
例子
首先,让我们定义一个库:loggerlib.dart。
library loggerlib; void log(msg){ print("Log method called in loggerlib msg:$msg"); }
接下来,我们将定义另一个库:webloggerlib.dart。
library webloggerlib; void log(msg){ print("Log method called in webloggerlib msg:$msg"); }
最后,我们将导入带有前缀的库。
import 'loggerlib.dart'; import 'webloggerlib.dart' as web; // prefix avoids function name clashes void main(){ log("hello from loggerlib"); web.log("hello from webloggerlib"); }
它将产生以下输出-
Log method called in loggerlib msg:hello from loggerlib Log method called in webloggerlib msg:hello from webloggerlib