Dart语言教程:库(导入、封装、自定义)

2019-06-2217:44:19编程语言入门到精通Comments6,121 views字数 3306阅读模式

编程语言中的库表示例程集合(编程指令集)。Dart有一组内置库,可用于存储经常使用的例程。Dart库包含一组类,常量,函数,typedef,属性和异常。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

导入库

导入使库中的组件可用于调用者代码。import关键字用于实现相同的目标。dart文件可以有多个import语句。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

内置Dart库URI使用dart:scheme来引用库。其他库可以使用文件系统路径或package:scheme来指定其URI。包管理器(如pub工具)提供的库使用package:scheme文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

下面给出了在Dart中导入库的语法 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

import 'URI'
Dart

阅读以下代码段 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

import 'dart:io' 
import 'package:lib1/libfile.dart'
Dart

如果只想使用库的一部分,则可以有选择地导入库。语法如下所示 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

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
Dart

下面给出了一些常用的库 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

编号类库说明
1dart:io服务器应用程序的文件,套接字,HTTP和其他I/O支持。此库在基于浏览器的应用程序中不起作用。默认情况下会导入此库。
2dart:core每个Dart程序的内置类型,集合和其他核心功能。默认情况下会导入此库。
3dart:math数学常数和函数,随机数生成器。
4dart:convert用于在不同数据表示之间进行转换的编码器和解码器,包括JSON和UTF-8。
5dart:typed_data有效处理固定大小数据的列表(例如,无符号8字节整数)。

示例:导入和使用库文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

以下示例导入内置库dart:math。示例代码是从math库中调用sqrt()函数。此函数返回传递给它的数字的平方根。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

import 'dart:math'; 
void main() { 
   print("Square root of 36 is: ${sqrt(36)}"); 
}
Dart

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

Square root of 36 is: 6.0
Shell

封装库

Dart脚本可以使用下划线(_)为标识符添加前缀,以将其组件标记为私有。简而言之,Dart库可以通过外部脚本限制对其内容的访问,它称为封装。下面给出了相同的语法 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

语法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

_identifier
Dart

示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

首先,使用私有函数定义库。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

library loggerlib;                            
void _log(msg) {
   print("Log method called in loggerlib msg:$msg");      
}
Dart

接下来,导入库 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

import 'test.dart' as web; 
void main() { 
   web._log("hello from webloggerlib"); 
}
Dart

执行上面示例代码,将会输出以下错误 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

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:161) 
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:98)
Shell

创建自定义库

Dart还可以将自己的代码用作为库,创建自定义库涉及以下步骤 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

第1步:声明库文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

要显式声明库,请使用库语句。声明库的语法如下所示 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

library library_name  
// library contents go here
Dart

第2步:关联库文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

可以通过两种方式关联库 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

  • 在同一目录中
    import 'library_name'
    
    Dart
  • 在不同的目录中
    import 'dir/library_name'
    
    Dart

示例:自定义库文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

首先,定义一个自定义库 - calculator.dart文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

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); 
}
Dart

接下来,导入上面自定的库 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

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"); 
}
Dart

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

inside add method of Calculator Library  
inside modulus method of Calculator Library  
10 + 20 = 30 
10 % 20= 10 
random no 0
Shell

库前缀

如果导入两个具有冲突标识符的库,则可以为一个或两个库指定前缀。使用as关键字指定前缀。以下语法 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

import 'library_uri' as prefix
Dart

示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

首先,定义一个库:loggerlib.dart,代码如下所示 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

library loggerlib;  
void log(msg){ 
   print("Log method called in loggerlib msg:$msg");
}
Dart

接下来,将定义另一个库:webloggerlib.dart,代码如下所示 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

library webloggerlib; 
void log(msg){ 
   print("Log method called in webloggerlib msg:$msg"); 
}
Dart

最后,导入带有前缀的库。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

import 'loggerlib.dart'; 
import 'webloggerlib.dart' as web;  

// prefix avoids function name clashes 
void main(){ 
   log("hello from loggerlib"); 
   web.log("hello from webloggerlib"); 
}
Dart

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

Log method called in loggerlib msg:hello from loggerlib 
Log method called in webloggerlib msg:hello from webloggerlib

原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/dart/dart_programming_libraries.html#article-start文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/13771.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/13771.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定