Dart 编程 - 库
编程语言中的库表示例程集合(编程指令集)。Dart 有一组内置库,可用于存储经常使用的例程。Dart 库由一组类、常量、函数、类型定义、属性和异常组成。
导入库
导入使调用者代码可以使用库中的组件。使用 import 关键字可实现相同目的。一个 dart 文件可以有多个 import 语句。
内置 Dart 库 URI 使用 dart: 方案来引用库。其他库可以使用文件系统路径或 package: 方案来指定其 URI。包管理器(例如 pub 工具)提供的库使用 package: 方案。
在 Dart 中导入库的语法如下 −
import 'URI'
考虑以下代码片段 −
import 'dart:io' import 'package:lib1/libfile.dart'
如果您只想使用库的一部分,则可以有选择地导入该库。相同的语法如下 −
import 'package: lib1/lib1.dart' show foo, bar; // 仅导入 foo 和 bar。 import 'package: mylib/mylib.dart' hide foo; // 导入除 foo 之外的所有名称
下面给出一些常用的库 −
Sr.No | 库和说明 |
---|---|
1 | dart:io 为服务器应用程序提供文件、套接字、HTTP 和其他 I/O 支持。此库不适用于基于浏览器的应用程序。默认情况下会导入此库。 |
2 | dart:core 每个 Dart 程序的内置类型、集合和其他核心功能。此库会自动导入。 |
3 | dart: math 数学常数和函数,以及随机数生成器。 |
4 | dart: convert 用于在不同数据表示形式(包括 JSON 和 UTF-8)之间进行转换的编码器和解码器。 |
5 | dart: typed_data 可有效处理固定大小数据的列表(例如,无符号 8 字节整数)。 |
示例:导入和使用库
以下示例导入内置库 dart: math。该代码片段从 math 库调用 sqrt() 函数。此函数返回传递给它的数字的平方根。
import 'dart:math'; void main() { print("36 的平方根是:${sqrt(36)}"); }
输出
36 的平方根为: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 library_name // 库内容在此处显示
步骤 2:关联库
您可以通过两种方式关联库 −
- 在同一目录中
import 'library_name'
- 来自不同的目录
import 'dir/library_name'
示例:自定义库
首先,让我们定义一个自定义库,calculator.dart。
library calculator_lib; import 'dart:math'; //库语句之后的导入语句 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; // 前缀避免函数名称冲突 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