程式設計語言中的庫表範例程集合(程式設計指令集)。Dart有一組內建庫,可用於儲存經常使用的例程。Dart庫包含一組類,常數,函式,typedef,屬性和異常。
匯入使庫中的元件可用於呼叫者程式碼。import
關鍵字用於實現相同的目標。dart檔案可以有多個import
語句。
內建Dart庫URI使用dart:scheme
來參照庫。其他庫可以使用檔案系統路徑或package:scheme
來指定其URI。包管理器(如pub工具)提供的庫使用package:scheme
。
下面給出了在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 | 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("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:161)
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:98)
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