
- Dart程式設計教程
- Dart程式設計 - 首頁
- Dart程式設計 - 概述
- Dart程式設計 - 環境
- Dart程式設計 - 語法
- Dart程式設計 - 資料型別
- Dart程式設計 - 變數
- Dart程式設計 - 運算子
- Dart程式設計 - 迴圈
- Dart程式設計 - 決策
- Dart程式設計 - 數字
- Dart程式設計 - 字串
- Dart程式設計 - 布林值
- Dart程式設計 - 列表
- Dart程式設計 - 列表
- Dart程式設計 - 對映
- Dart程式設計 - 符號
- Dart程式設計 - Rune
- 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:模式。
在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:261) #3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)
建立自定義庫
Dart還允許您使用自己的程式碼作為庫。建立自定義庫包括以下步驟:
步驟1:宣告庫
要顯式宣告庫,請使用library語句。宣告庫的語法如下:
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