国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

詳解Google Dart 2.17版本的新語言特性

谷歌開發者 ? 來源:谷歌開發者 ? 作者:Flutter ? 2022-05-27 10:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者 / Michael Thomsen, Product Manager working on Dart and Flutter

我們在 Google I/O 大會上發布了全新的 2.17 版 Dart SDK。此版本構建于我們的核心主題之上,即領先的工作效率與平臺可移植性。Dart 2.17 帶來了新的語言特性,包括在枚舉中支持成員變量、改進超類參數繼承及提高命名參數的靈活性等。我們推出全新的主要版本 package:lints 來幫助大家根據最佳實踐檢查 Dart 代碼。同時,我們還大幅更新了核心庫的 API 文檔,為其帶來了豐富的代碼示例。為了改善平臺集成效果,我們在 Flutter 插件中提供了新的模版,以便使用 dart:ffi 與原生平臺進行 C 語言的互操作,還開始為 RISC-V 處理器提供實驗性支持,以及為 macOS 和 Windows 可執行文件提供簽名。

新語言特性助力工作效率提升

為了幫助開發者提升工作效率,我們一直在改進 Dart 語言,為其添加新特性并持續改進現有功能。Dart 2.17 新增對枚舉成員變量的支持,優化在構造函數中使用命名參數的方式,并使超類參數的繼承更加便捷,減少了冗長和重復的代碼。

在枚舉中支持成員變量

枚舉非常適合用來表示一組離散的狀態。例如,我們可以將水描述為 enum Water { frozen, lukewarm, boiling }。但是,如果我們想在 enum 上添加一些方法,例如,將每個狀態轉換為溫度,以及支持將 enum 轉換為 String,該怎么辦?或許我們可以使用擴展方法來添加一個 waterToTemp() 方法,但必須注意讓其與 enum 保持同步。對于 String 轉換,我們希望重寫 toString(),但這個做法在之前的版本不受支持。

Dart 2.17 中現已全面支持枚舉成員變量。因此,我們可以添加保存狀態的字段、設置狀態的構造函數、具備功能的方法,甚至重寫現有方法。許多開發者對此功能一直有需求,這是我們語言問題跟蹤專頁中投票排名第三的問題:

再次以水為例,我們可以添加一個保存溫度的 int 字段,并添加一個接收 int 的默認構造函數:

enum Water { final int tempInFahrenheit; const Water(this.tempInFahrenheit);}

為了確保在創建 enum 時構造函數被調用,我們需要為每一個 enum 值進行調用:
enum Water { frozen(32), lukewarm(100), boiling(212);}

要支持轉換為 String,我們只需重寫 enums 繼承自 ObjecttoString 方法:
@overrideString toString() => "The $name water is $tempInFahrenheit F.";

這樣即可獲得一個可以輕松實例化的完整 enum,您可以在其上調用方法:
void main() { print(Water.frozen); // Prints “The frozen water is 32 F.”}

以下為這兩種方法的完整示例。不難看出,全新 Dart 2.17 版本的代碼更加易于閱讀和維護。

e0e3aa9e-dd5d-11ec-ba43-dac502259ad0.png

超類初始化構造

如果您的代碼存在類繼承層次結構,常見模式是將一些構造函數參數傳遞給超類的構造函數。為此,子類需要 1) 在其構造函數中列出每個參數;2) 使用這些參數調用超類的構造函數。這樣會導致樣板代碼反復出現,從而增加代碼的閱讀和維護難度。 在幾位 Dart 社區成員的幫助下,我們的改進目標得以實現。半年前,GitHub 用戶 @roy-sianez 提交了一個相關的語言問題。他的建議與 GitHub 用戶 @apps-transround 之前提出的建議類似:也許我們可以這樣解決問題,即引入新的構造方式,來表示超類中已指定一個參數。我們認為這個想法不錯,所以將其添加在 Dart 2.17 中。從下面的示例中不難看出,這尤其與 Flutter widget 代碼密切相關。實際上,在我們將這項新特性應用到 Flutter 框架后,代碼總共減少了近兩千行!

e0eabe92-dd5d-11ec-ba43-dac502259ad0.png

在任意參數位置使用命名參數最后,我們改進了調用某個方法時命名參數的使用方式。此前,命名參數只能出現在方法參數列表的最后。如果您希望讓位置參數靠后,從而提升代碼可讀性,這種限制就會令人感到非常煩惱。以下面 List.generate 構造函數的調用為例:之前,growable 參數必須放在最后,因為它位于含生成器的大型位置參數之后,很容易在閱讀時被錯過。而現在,您可以根據喜好排列參數,先放置小型命名參數,最后再放置帶生成器的參數。

e105f7de-dd5d-11ec-ba43-dac502259ad0.png

更多有關這三個特性的示例,請參閱我們更新的枚舉、超類初始化構造命名參數示例代碼。

工作效率工具

在工作效率主題方面,我們對核心工具進行了一些改進。

在 Dart 2.14 中,我們引入了 package:lints,它可與 Dart 分析器一起工作,以幫助您避免編寫出包含錯誤的 Dart 代碼,并通過規范化的方式提升代碼審核效率。后來分析器中又新增了許多 Lint,我們對其進行了仔細分類,并從中選擇了 10 條新的 Lint 用于所有 Dart 代碼,還有 2 條新的 Lint 專門用于 Flutter 代碼。其中一些 Lint 可確保 pubspec 文件中包含導入內容,防止濫用類型參數空檢查,以及保證子屬性格式一致。您可以通過簡單的命令升級到新的 Lint:

  • Dart package 可以使用:
dart pub upgrade —-major-versions lints

  • Flutter package 可以使用:

flutter pub upgrade —-major-versions flutter_lints

SecureSockets 通常用于啟用受 TLS 和 SSL 保護的 TCP 套接字。Dart 2.17 發布之前,由于無法檢查安全數據流量,開發過程中調試這些套接字非常困難。現在我們添加了指定 keyLog 文件的功能。指定日志文件后,與服務器交換新的 TLS 密鑰時,一行 NSS密鑰日志格式的文本就會附加到文件中。這樣,網絡流量分析工具 (如 Wireshark) 即可解密通過套接字發送的內容。更多詳細信息,請參閱 SecureSocket.connect()API 文檔:

dart doc 工具生成的 API 文檔是大多數 Dart 開發者學習新 API 的重要資源之一。盡管我們的核心庫 API 一直都有詳實的文本描述,但許多開發者告訴我們,他們更喜歡通過閱讀示例代碼來學習 API。在 Dart 2.17 中,我們徹底檢查了所有主要的核心庫,為瀏覽量排在前 200 名的頁面添加了詳實的示例代碼。您可以對比 Dart 2.16Dart 2.17 中 dart:convert 的文檔頁面,希望這些更新有助于您更輕松地使用 API 文檔。

為平臺新增功能可以提升工作效率,清理堆積的既有問題,并刪除棄用的功能同樣也可以。這樣做有助于保持精簡的使用體驗,對新上手的開發者而言,這一點尤為重要。為此,我們從 dart:io 庫中刪除了 231 行已棄用的代碼。如果您仍在使用這些已棄用的 API,可以使用 dart fix 進行修復和替換。我們還在繼續努力刪除已棄用的 Dart CLI 工具,此外,本次更新刪除了 dartdoc 工具 (使用 dart doc 代替) 和 pub 工具 (使用 dart pubflutter pub 代替)。

擴大平臺集成與支持

平臺集成與支持是我們的第二個核心主題。Dart 是一種真正的多平臺語言。盡管我們現已支持大量平臺,但仍在不斷拓展演進,確保您可以與每個受支持的平臺深度集成,同時也支持新出現的平臺。

Dart FFI 是我們與 C 語言或原生代碼互操作的核心機制,廣泛用于將 Dart 代碼與現有原生平臺代碼集成。在 Flutter 上,Dart FFI 也是構建使用托管平臺原生 API (例如 Windows win32 API) 的插件的理想方法。在 Dart 2.17 和 Flutter 3 中,我們為 flutter 工具添加了模板,現在您可以輕松地創建 FFI 插件,這些插件的 Dart API 通過 dart:ffi 調用原生代碼。詳細信息請參閱官方文檔中的 "開發 package 和插件":

為支持在具有 ABI (應用程序二進制接口) 特有類型的平臺上使用 FFI,FFI 現已支持 ABI 特有類型。例如,現在您可以使用 Long (C 語言中的 long) 正確表示 ABI 特有大小的長整數,由于 CPU 架構的區別,結果可能是 32 位或 64 位。有關支持類型的完整列表,請參閱 AbiSpecificInteger API 頁面中的 "Implementers" 列表。

在使用 Dart FFI 與原生平臺深度集成時,有時開發者需要調整適配 Dart 代碼和原生代碼的內存或其他資源 (端口、文件等) 的清理行為。長期以來,這個問題都十分棘手,因為 Dart 是一種會自動處理清理行為的垃圾回收語言。在 Dart 2.17 中,我們通過引入 Finalizer 的概念,解決了這個問題。Finalizer 中包括一個 Finalizable 標記接口,用于 "標記" 不應過早終結或丟棄的對象,以及一個可以附加到 Dart 對象的 NativeFinalizer 類,在對象即將被垃圾回收時提供回調運行。這樣,在原生代碼和 Dart 代碼中都可以運行清理代碼。更多詳細信息,請參閱 NativeFinalizer API 文檔,或參閱 WeakReferenceFinalizer 文檔中的描述和示例,以了解常規 Dart 代碼中的類似做法。

支持將 Dart 編譯為原生代碼,是使 Flutter 應用具有出色啟動性能和快速渲染能力的核心要素。除此之外,您還可以使用 dart compile 將 Dart 文件編譯為可執行文件。這些可執行文件可以在任何機器上獨立運行,無需安裝 Dart SDK。Dart 2.17 中的另一個新功能是支持對可執行文件進行簽名,從而在往往需要簽名的 Windows 和 macOS 上進行部署。

我們還在積極跟進新平臺的發展,不斷擴大可支持的平臺范圍。RISC-V 是一個全新的處理器指令集。RISC-V International 是一家全球非營利性組織,其擁有 RISC-V 規范并使該指令集保持自由開放的狀態。盡管仍是新平臺,但其潛力無限,因此我們的 2.17.0–266.1.beta Linux 版本 (以后可能進入我們的 beta 渠道) 中已經為其提供了實驗性的支持。我們希望能夠獲得您的反饋,請大家不吝提出問題分享使用體驗!

即刻使用 Dart 2.17!

我們希望 Dart 2.17 版本能打動您,并能助力您提高工作效率,把您的應用帶去更多平臺。您可以即刻下載 Dart 2.17 并開始使用,或者使用 Flutter 3 SDK 中包含的 Dart SDK。
原文標題:一起看 I/O | Dart 2.17 現已發布: 工作效率與平臺集成

文章出處:【微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Google
    +關注

    關注

    5

    文章

    1807

    瀏覽量

    60519
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1101

    瀏覽量

    51714
  • Dart
    +關注

    關注

    0

    文章

    9

    瀏覽量

    1901
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    SmartBug2.0用戶指南:硬件特性、連接方式及應用詳解

    SmartBug2.0用戶指南:硬件特性、連接方式及應用詳解 在電子設備不斷發展的今天,多功能、易操作的傳感器模塊備受關注。InvenSense的SmartBug2.0模塊就是這樣一款產品,它具備
    的頭像 發表于 12-26 09:15 ?439次閱讀

    IvorySQL開源社區正式發布IvorySQL 5.0版本

    近日,IvorySQL開源社區正式發布IvorySQL 5.0版本。該版本基于PostgreSQL 18.0進行全面迭代升級,在Oracle兼容性上實現新突破,生態組件集成能力持續進階,同時深度適配云原生場景,同步提供全平臺安裝包與在線流暢體驗,助力開發者簡化復雜業務場景
    的頭像 發表于 12-04 10:06 ?753次閱讀
    IvorySQL開源社區正式發布IvorySQL 5.0<b class='flag-5'>版本</b>

    nordic NRF54藍牙設備在Google Pixel 10上“聽診”藍牙信道示例

    說明中的指引,注冊加入Android 16 Quarterly Platform發布版2(QPR2)測試計劃。請仔細閱讀鏈接中的說明,確保在注冊前充分理解相關條款與條件。值得注意的是,一旦QPR2版本
    發表于 11-26 17:44

    C語言特性

    根據硬件的差異對少量的底層驅動代碼進行調整,大大降低了開發成本和周期。 3、靈活性:底層操作的能手 C 語言支持對底層硬件的直接操作,賦予了開發者極大的靈活性。開發者可以通過指針等特性,直接
    發表于 11-24 07:01

    Quartus Prime Pro 25.1版本的安裝和使用

    如果用戶開發板是基于Agilex 3、Agilex 5等高階器件,則需要安裝高版本的Quartus軟件比如Quartus Prime Pro 25.1版本,這個版本在安裝包和license獲取(免費)等方面跟以往的Quartus
    的頭像 發表于 10-07 13:06 ?2654次閱讀
    Quartus Prime Pro 25.1<b class='flag-5'>版本</b>的安裝和使用

    AMD Vivado設計套件2025.1版本的功能特性

    隨著 AMD Spartan UltraScale+ 系列現已投入量產,解鎖其功能集的最快途徑便是采用最新 AMD Vivado 工具版本( 2025.1 或更高版本)和全新操作指南資源。該集
    的頭像 發表于 09-23 09:15 ?1617次閱讀
    AMD Vivado設計套件2025.1<b class='flag-5'>版本</b>的功能<b class='flag-5'>特性</b>

    2.11 至 2.17 GHz 小型蜂窩功率放大器模塊 skyworksinc

    電子發燒友網為你提供()2.11 至 2.17 GHz 小型蜂窩功率放大器模塊相關產品參數、數據手冊,更有2.11 至 2.17 GHz 小型蜂窩功率放大器模塊的引腳圖、接線圖、封裝手冊、中文資料
    發表于 09-15 18:32
    2.11 至 <b class='flag-5'>2.17</b> GHz 小型蜂窩功率放大器模塊 skyworksinc

    2.11 GHz 至 2.17 GHz 小基站功率放大器模塊 skyworksinc

    電子發燒友網為你提供()2.11 GHz 至 2.17 GHz 小基站功率放大器模塊相關產品參數、數據手冊,更有2.11 GHz 至 2.17 GHz 小基站功率放大器模塊的引腳圖、接線圖、封裝手冊
    發表于 09-12 18:33
    2.11 GHz 至 <b class='flag-5'>2.17</b> GHz 小基站功率放大器模塊 skyworksinc

    谷歌查找我的設備配件(Google Find My Device Accessory)詳解和應用

    谷歌查找我的設備配件(Google Find My Device Accessory)介紹 谷歌查找我的設備配件是與谷歌 “查找我的設備” 應用程序配合使用的配件,旨在幫助用戶更方便地追蹤和定位個人
    發表于 08-31 21:10

    Android Studio中的Gemini全面支持Dart和Flutter開發

    在 Android Studio 中創建 Android 應用的 Flutter 開發者將迎來一次重大的飛躍: Android Studio 中的 Gemini 已全面支持 Dart
    的頭像 發表于 08-06 13:52 ?1336次閱讀
    Android Studio中的Gemini全面支持<b class='flag-5'>Dart</b>和Flutter開發

    Google Fast Pair服務簡介

    Google 帳戶。 參考手機應是市場上活躍的手機,并且覆蓋相當多的用戶群體。 實現了fast pair版本和相關擴展的藍牙設備且是被認證的。 原文如下: All phones should
    發表于 06-29 19:28

    CANoe產品體系19版本特性及新增Option(上)

    版本持續助力當前車輛E/E架構中ECU開發驗證,同時賦能后續智能網聯電動車型預研驗證。新版本CANoe產品體系新增數據驅動的DDS、車輛互聯服務和高效電機模型庫,進一步支持CANXL
    的頭像 發表于 06-11 10:03 ?2911次閱讀
    CANoe產品體系19<b class='flag-5'>版本</b>新<b class='flag-5'>特性</b>及新增Option(上)

    Labview與低功率藍牙(5.0版本)怎么連接和通信

    Labview與低功率藍牙(5.0版本)怎么連接和通信: 當前NI自帶的藍牙函數只能連接4.0以前的版本,針對低功率藍牙無法搜索到和連接? 請問有什么好的好的解決方法? 我看有的說用Microsoft BluetoothAPIs.dll自己封裝,我目前也沒研究明白怎么寫。
    發表于 06-09 21:56

    PL2303串口驅動win10版本

    PL2303串口驅動win10版本
    發表于 04-09 16:02 ?1次下載

    rtsmart開啟C++特性支持后,工具鏈編譯內核不通過怎么解決?

    各位大佬好,本人在rtsmart項目中需要使用C++11特性,在menuconfig那里配置了支持C++特性后,使用7.3.0版本的arm-linux-musleabi編譯器編譯內核時出現 錯誤
    發表于 03-10 08:06