Flutter/Dart第07天:Dart基礎語法詳解(庫、導入和關鍵字)

来源:https://www.cnblogs.com/obullxl/archive/2023/10/02/NTopic2023100201.html
-Advertisement-
Play Games

我們前面完成了Dart語言基礎特性的學習,包括基礎語法概覽、迭代集合、非同步編程、Mixin高級特性和變數等。今天我們來學習Dart的庫相關知識,包括如何導入庫、指定庫首碼、導入部分或者排除部分庫、延遲導入庫等,最後看下Dart中67個關鍵字作為標識符的一些約束…… ...


Dart官網文檔:https://dart.dev/language/libraries

重要說明:本博客基於Dart官網文檔,但並不是簡單的對官網進行翻譯,在覆蓋核心功能情況下,我會根據個人研發經驗,加入自己的一些擴展問題和場景驗證。

Dart中的庫(Library)

Dart語言對代碼的復用下了不少功夫,如前面講到的Mixin高級特性實現類級別代碼復用。本文介紹另一種更寬廣的代碼復用:

Dart庫可以認為是一組復用類、功能等的集合,它則代表了一個共用的代碼模塊,任何一個.dart文件都是一個庫。

Dart庫有一個隱含的規則:凡是以下劃線_開頭的標識符僅在本庫內部可見,其他在庫內外部均可見。(Dart沒有private/protected/public可見域標識符,那麼對應Java語言,下劃線_開頭為private,其他的為public,Dart沒有protected)。

Dart庫可以基本可分為3種,建議在使用時嚴格按照這3類導入庫:

  1. Dart中的內置庫,即SDK中的庫(對於Java語言如java.util.Map),以dart:作為命名空間。
  2. Dart包中心倉庫的庫(對於Java語言為Maven中心倉庫),以package:作為命名空間。
  3. 本地文件代碼庫,以相對路徑或者絕對路徑作為命名空間。當然,本地代碼塊也可以使用package作為命名空間,容易和第2中混淆,因此不推薦。

如何使用庫(import關鍵字)

通過import關鍵字指定在一個庫中使用另外一個命名空間的庫。

代碼樣例:如下代碼,我們導入了Dart內置的html庫、中心倉庫get庫,和本地庫。

// 內置庫
import 'dart:html';

// 中心倉庫
import 'package:get/get.dart';

// 本地代碼庫
import '../01-ntopic-hellodart.dart';

指定庫首碼(as關鍵字)

研發過程中,我們有時會導入有相同標識符,那麼在使用過程中就會產生衝突,這時可以通過as關鍵字進行重命名庫,同時在使用的時候,增加首碼進行區分。

代碼樣例:如下代碼,我們導入了lib1lib2兩個庫,它們都有Element這個類。

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

// `lib1`庫中Element類
Element element1 = Element();

// `lib2`庫中Element類,通過`lib2`首碼解決衝突
lib2.Element element2 = lib2.Element();

導入部分庫(show/hide關鍵字)

我們有時候只需要用到某個庫的一部分代碼或者類,或者需要排除某個庫中指定的代碼,通過增加showhide關鍵字可實現。

代碼樣例:如下代碼,我們用到了lib1lib2兩個庫,lib1通過show僅導入了foo這個標識符(類名、常量名等),而lib2通過hide導入除foo之外的其他所有標識符。

// 僅導入`foo`
import 'package:lib1/lib1.dart' show foo;

// 導入除`foo`之外所有
import 'package:lib2/lib2.dart' hide foo;

延遲導入庫(deferred as關鍵字)

Web應用中通過延遲導入庫,可以實現按需載入,如下幾種常見的應用場景:

  1. 減少Web應用的啟動時間。
  2. A/B測試,比如切流不同的演算法庫。
  3. 不常用的功能,比如可選頁面、彈窗等。

代碼樣例:如下代碼,通過deferred as關鍵字,實現延遲導入庫,在實際使用庫功能時需要導入庫(如:await hello.loadLibrary();),在庫載入完成之前,會阻塞代碼執行。執行loadLibrary()方法僅實際載入庫一次,後續調用該方法不會重覆載入。

// 1. 延遲導入庫
import 'package:greetings/hello.dart' deferred as hello;

// 2. 實際使用時,使用庫首碼
Future<void> greet() async {
  // 載入庫,載入成功之前阻塞後續代碼執行,多次調用僅載入一次
  await hello.loadLibrary();
  hello.printGreeting();
}

特別註意:

  1. 延遲導入庫中的常量,在該庫導入之前並不存在,因此它們並不是導入庫(即使用它們的文件)中的常量。
  2. 延遲導入庫在導入之前並不存在,因此導入庫不能使用它們的類型(包括類、枚舉等),可以考慮把公共代碼(如基礎類、介面等)抽取出來作為單獨的庫,讓延遲導入庫和導入庫共同導入使用。
  3. 當使用deferred as XXX延遲導入庫時,Dart隱含的給loadLibrary()增加了XXX命名空間。如上代碼,loadLibrary()方法是非同步的,返回一個Future

Dart中的關鍵字(共67個)

Dart官方文檔:https://dart.dev/language/keywords

Dart關鍵字一共包含67個,本博客不重覆列出這67個關鍵字,僅對關鍵字進行說明:

  1. 儘量避免使用這些關鍵字作為標識符,如有必要,表格中有123上標的關鍵字在部分常見可以使用作為標識符。
  2. 上標為1的關鍵字與上下文有關,離開了上下文,這些關鍵字可以作為標識符。如showhide關鍵在只在導入庫上下文文中用到,其他地方可以正常作為標識符。
  3. 上標為2的關鍵字是Dart內置的標識符,它們在大部分場景可以使用,但是禁止在類名、類型名和指定庫的首碼(其實也是類型的一種)。
  4. 上標為3的關鍵字(共2個:await/yield)限制在非同步編程場景使用,在標記為async/async*/sync*同步和非同步函數內部,禁止使用。

我的本博客原地址:https://ntopic.cn/p/2023100201


本文作者:奔跑的蝸牛,轉載請註明原文鏈接:https://ntopic.cn


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在 Linux 的早期,程式僅作為源代碼以及所需的手冊頁、必要的配置文件等分發。如今,大多數 Linux 發行商預設使用預先構建的程式或稱為軟體包的程式集,將其提供給準備在該發行版上安裝的用戶。然而,Linux 的奇跡之一仍然是可以獲得要研究、改進和編譯的程式的源代碼。 ...
  • 前言 Hyper-V安裝文檔:在 Windows 10 上安裝 Hyper-V CentOS 系統下載:CentOS 國內鏡像源 8.5.2111 作者:易墨 發佈時間:2023.10.01 原文地址:https://www.cnblogs.com/morang/p/devops-hyperv-ce ...
  • [webpack中文文檔](概念 | webpack 中文文檔 | webpack中文文檔 | webpack中文網 (webpackjs.com)): 本質上,webpack 是一個用於現代 JavaScript 應用程式的 靜態模塊打包工具。當 webpack 處理應用程式時,它會在內部從一個或 ...
  • Docker 是一款流行的開源容器化平臺,使用 Docker 可以有效地隔離應用程式和系統環境,使得應用程式在不同的環境中具有相同的行為 Docker Compose 是一個用於定義和管理多個容器工具 ...
  • Java實現簡單計算器 參考鏈接🔗:https://www.bilibili.com/video/BV1d54y1s7uC?p=1&vd_source=cf21268954e139179e71f046bac01e56 設計思路 創建容器框架 創建組件和組件佈局方式 組件的測試 數字按鈕和功能按鈕的 ...
  • 以下內容來源網上 經過整合而成 一、一般介紹 STL(Standard Template Library),即標準模板庫,是一個具有工業強度的,高效的C++程式庫。它被容納於C++標準程式庫(C++ Standard Library)中,是ANSI/ISO C++標準中最新的也是極具革命性的一部分。 ...
  • 本篇為[用go設計開發一個自己的輕量級登錄庫/框架吧 - 秋玻 - 博客園 (cnblogs.com)]的二級認證業務篇,會講講二級認證業務的實現,給庫/框架增加新的功能。 源碼:https://github.com/weloe/token-go ...
  • Stream 簡介 Spring Cloud Stream 是用於構建消息驅動的微服務應用程式的框架,提供了多種中間件的合理配置 Spring Cloud Stream 包含以下核心概念: Destination Binders:目標綁定器,目標指的是 Kafka 或者 RabbitMQ,綁定器就是 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...