在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    1769

    瀏覽量

    57658
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1044

    瀏覽量

    46079
  • Dart
    +關注

    關注

    0

    文章

    9

    瀏覽量

    1761
收藏 人收藏

    評論

    相關推薦

    OurBMC 24.12版本正式上線

    日前,經過社區開發者的共同努力,OurBMC 全新升級,24.12版本正式上線。
    的頭像 發表于 01-07 13:45 ?135次閱讀

    三、四、六、八缸發動機NVH特性詳解

    三、四、六、八缸發動機NVH特性詳解。 ?
    的頭像 發表于 11-16 11:45 ?272次閱讀
    三、四、六、八缸發動機NVH<b class='flag-5'>特性</b><b class='flag-5'>詳解</b>

    Google AI Edge Torch的特性詳解

    我們很高興地發布 Google AI Edge Torch,可將 PyTorch 編寫的模型直接轉換成 TFLite 格式 (.tflite),且有著優異的模型覆蓋率和 CPU 性能。TFLite
    的頭像 發表于 11-06 10:48 ?441次閱讀
    <b class='flag-5'>Google</b> AI Edge Torch的<b class='flag-5'>特性</b><b class='flag-5'>詳解</b>

    淺談Xpedition 2409版本的新功能

    在《創新不止|Xpedition 2409版本新功能揭秘(上)》一文中,我們了解了Xpedition 2409版本的部分改進部分。今天,我們繼續看Xpedition 2409新版本給我們帶來了什么樣的全新用戶體驗。
    的頭像 發表于 10-31 15:33 ?1092次閱讀

    Vivado 2024.1版本的新特性(2)

    從綜合角度看,Vivado 2024.1對SystemVerilog和VHDL-2019的一些特性開始支持。先看SystemVerilog。
    的頭像 發表于 09-18 10:34 ?1007次閱讀
    Vivado 2024.1<b class='flag-5'>版本</b>的新<b class='flag-5'>特性</b>(2)

    Vivado 2024.1版本的新特性(1)

    Vivado 2024.1已正式發布,今天我們就來看看新版本帶來了哪些新特性
    的頭像 發表于 09-18 10:30 ?1517次閱讀
    Vivado 2024.1<b class='flag-5'>版本</b>的新<b class='flag-5'>特性</b>(1)

    USB4 2.0版本的重大更新

    USB版本一直很多,可以說是五花八門,但是隨著接口的日漸統一,USB的版本可以說減少了很多,到了USB4,只剩下USB-C接口,為何還有一個2.0版本,我們往下詳解
    的頭像 發表于 09-09 14:37 ?654次閱讀

    【AWTK最新動態】AWTK 1.8版本發布

    AWTK是一套基于C語言開發的跨平臺GUI框架,目前正式推出1.8版本。本次更新不僅對許多細節進行了優化,還增添了眾多重要特性和文檔資料。此外,還引入了三款創新控件和兩個與AWTK相關項目。AWTK
    的頭像 發表于 08-30 12:48 ?464次閱讀
    【AWTK最新動態】AWTK 1.8<b class='flag-5'>版本</b>發布

    ENV-Windows v2.0.0版本發布

    ENV-Windows v2.0.0版本發布
    的頭像 發表于 06-26 08:35 ?817次閱讀
    ENV-Windows v2.0.0<b class='flag-5'>版本</b>發布

    chrome插件新版本(v3版本)中的熱更新,即加載更新遠程js的方法探索

    使用。 或者要翻墻到google應用商店提交審核,才能熱更新。 ? ? 2 當前問題 1、由于安全策略逐步增強,越來越不支持熱更新了,之前可以直接調用遠程資源的方法均被禁止了; 2、chrome插件開發中,v2版本是支持熱更新的,但明年v2
    的頭像 發表于 06-14 10:19 ?862次閱讀
    chrome插件新<b class='flag-5'>版本</b>(v3<b class='flag-5'>版本</b>)中的熱更新,即加載更新遠程js的方法探索

    STM32的4.0版本的電機庫是如何實現OOP編程的?

    STM32的4.0版本的電機庫是如何實現OOP編程的 看4.0的電機庫,看到使用的OOP編程思想,但是C語言本身好像是不支持繼承、虛函數等技術的 那電機庫里是怎么實現的,有好的相關學習資料嗎?
    發表于 05-17 06:50

    LwIP v2.0版本更換為v2.1.2版本后接收不到數據了怎么解決?

    請教下,吧 LwIP v2.0 版本更換為 v2.1.2 版本后接收不到數據了,是怎么回事啊 ?? 之前使用 v2.0 版本測試是完全可以了,不過目前 使用 v2.1.2版本的,dhc
    發表于 04-23 08:20

    蘋果停iOS 16.7.6驗證,僅支持16.7.7版本驗證

    據悉,蘋果已于4月17日停止了對iOS 16.7.6版本的驗證服務。對于已升級至iOS 16.7.7版本的iPhone用戶來說,他們已無法返回至舊版系統。
    的頭像 發表于 04-17 10:27 ?1169次閱讀

    SAP HANA 2.0 SP07版本新功能特性匯總

    的HANA 2.0 SP06版本建議今年下半年盡快升級到HANA 2.0 SP07版本。那么HANA 2.0 SP07新版本有哪些功能特性變化呢? HANA
    的頭像 發表于 02-19 09:22 ?568次閱讀

    PSOC Creator由3.3版本升級到4.1版本后,程序的EEEPROM模塊無法使用怎么解決?

    PSOC Creator由3.3版本升級到4.1版本后,程序的EEEPROM模塊無法使用,請提供一下CY8C4247讀寫內部Flash的例程,謝謝 。
    發表于 02-01 06:58
    主站蜘蛛池模板: 五月婷六月| 图片区网友自拍另类图区| 婷婷中文网| 亚洲毛片网| 精品欧美| 天堂资源网| 成人在线网站| 噜噜影院无毒不卡| 久久亚洲视频| 欧美一级片网址| 欧美在线一区二区三区| 欧美成人午夜| 色妇影院| 亚洲成人免费在线| 天堂网址| 一级一级毛片免费播放| 污污的黄色小说| 奇米777me| 美女丝袜长腿喷水gif动态图| 超大乳抖乳露双乳视频| 狠狠色视频| www4虎| 五月停停| 精品精品国产理论在线观看| 欧美成人天天综合天天在线| 九九精品在线观看| 国产亚洲精品aa在线看| 亚洲欧美4444kkkk| 欧美猛交xxxx乱大交| 亚欧美视频| 性色在线播放| 天堂bt资源新版在线| 欧美性video精品| 女人张开腿给人桶免费视频| 拍拍拍无挡视频免费全程1000| 久久这里只精品热在线8| 老司机午夜网站| 99久久免费精品视频| 国产综合视频在线观看| 性国产精品| 色多多视频在线观看|