0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解Google Dart 2.17版本的新語(yǔ)言特性

谷歌開(kāi)發(fā)者 ? 來(lái)源:谷歌開(kāi)發(fā)者 ? 作者:Flutter ? 2022-05-27 10:44 ? 次閱讀

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

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

新語(yǔ)言特性助力工作效率提升

為了幫助開(kāi)發(fā)者提升工作效率,我們一直在改進(jìn) Dart 語(yǔ)言,為其添加新特性并持續(xù)改進(jìn)現(xiàn)有功能。Dart 2.17 新增對(duì)枚舉成員變量的支持,優(yōu)化在構(gòu)造函數(shù)中使用命名參數(shù)的方式,并使超類(lèi)參數(shù)的繼承更加便捷,減少了冗長(zhǎng)和重復(fù)的代碼。

在枚舉中支持成員變量

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

Dart 2.17 中現(xiàn)已全面支持枚舉成員變量。因此,我們可以添加保存狀態(tài)的字段、設(shè)置狀態(tài)的構(gòu)造函數(shù)、具備功能的方法,甚至重寫(xiě)現(xiàn)有方法。許多開(kāi)發(fā)者對(duì)此功能一直有需求,這是我們語(yǔ)言問(wèn)題跟蹤專(zhuān)頁(yè)中投票排名第三的問(wèn)題:

再次以水為例,我們可以添加一個(gè)保存溫度的 int 字段,并添加一個(gè)接收 int 的默認(rèn)構(gòu)造函數(shù):

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

為了確保在創(chuàng)建 enum 時(shí)構(gòu)造函數(shù)被調(diào)用,我們需要為每一個(gè) enum 值進(jìn)行調(diào)用:
enum Water { frozen(32), lukewarm(100), boiling(212);}

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

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

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

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

超類(lèi)初始化構(gòu)造

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

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

在任意參數(shù)位置使用命名參數(shù)最后,我們改進(jìn)了調(diào)用某個(gè)方法時(shí)命名參數(shù)的使用方式。此前,命名參數(shù)只能出現(xiàn)在方法參數(shù)列表的最后。如果您希望讓位置參數(shù)靠后,從而提升代碼可讀性,這種限制就會(huì)令人感到非常煩惱。以下面 List.generate 構(gòu)造函數(shù)的調(diào)用為例:之前,growable 參數(shù)必須放在最后,因?yàn)樗挥诤善鞯拇笮臀恢脜?shù)之后,很容易在閱讀時(shí)被錯(cuò)過(guò)。而現(xiàn)在,您可以根據(jù)喜好排列參數(shù),先放置小型命名參數(shù),最后再放置帶生成器的參數(shù)。

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

更多有關(guān)這三個(gè)特性的示例,請(qǐng)參閱我們更新的枚舉、超類(lèi)初始化構(gòu)造命名參數(shù)示例代碼。

工作效率工具

在工作效率主題方面,我們對(duì)核心工具進(jìn)行了一些改進(jìn)。

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

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

  • Flutter package 可以使用:

flutter pub upgrade —-major-versions flutter_lints

SecureSockets 通常用于啟用受 TLS 和 SSL 保護(hù)的 TCP 套接字。Dart 2.17 發(fā)布之前,由于無(wú)法檢查安全數(shù)據(jù)流量,開(kāi)發(fā)過(guò)程中調(diào)試這些套接字非常困難?,F(xiàn)在我們添加了指定 keyLog 文件的功能。指定日志文件后,與服務(wù)器交換新的 TLS 密鑰時(shí),一行 NSS密鑰日志格式的文本就會(huì)附加到文件中。這樣,網(wǎng)絡(luò)流量分析工具 (如 Wireshark) 即可解密通過(guò)套接字發(fā)送的內(nèi)容。更多詳細(xì)信息,請(qǐng)參閱 SecureSocket.connect()API 文檔:

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

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

擴(kuò)大平臺(tái)集成與支持

平臺(tái)集成與支持是我們的第二個(gè)核心主題。Dart 是一種真正的多平臺(tái)語(yǔ)言。盡管我們現(xiàn)已支持大量平臺(tái),但仍在不斷拓展演進(jìn),確保您可以與每個(gè)受支持的平臺(tái)深度集成,同時(shí)也支持新出現(xiàn)的平臺(tái)。

Dart FFI 是我們與 C 語(yǔ)言或原生代碼互操作的核心機(jī)制,廣泛用于將 Dart 代碼與現(xiàn)有原生平臺(tái)代碼集成。在 Flutter 上,Dart FFI 也是構(gòu)建使用托管平臺(tái)原生 API (例如 Windows win32 API) 的插件的理想方法。在 Dart 2.17 和 Flutter 3 中,我們?yōu)?flutter 工具添加了模板,現(xiàn)在您可以輕松地創(chuàng)建 FFI 插件,這些插件的 Dart API 通過(guò) dart:ffi 調(diào)用原生代碼。詳細(xì)信息請(qǐng)參閱官方文檔中的 "開(kāi)發(fā) package 和插件":

為支持在具有 ABI (應(yīng)用程序二進(jìn)制接口) 特有類(lèi)型的平臺(tái)上使用 FFI,F(xiàn)FI 現(xiàn)已支持 ABI 特有類(lèi)型。例如,現(xiàn)在您可以使用 Long (C 語(yǔ)言中的 long) 正確表示 ABI 特有大小的長(zhǎng)整數(shù),由于 CPU 架構(gòu)的區(qū)別,結(jié)果可能是 32 位或 64 位。有關(guān)支持類(lèi)型的完整列表,請(qǐng)參閱 AbiSpecificInteger API 頁(yè)面中的 "Implementers" 列表。

在使用 Dart FFI 與原生平臺(tái)深度集成時(shí),有時(shí)開(kāi)發(fā)者需要調(diào)整適配 Dart 代碼和原生代碼的內(nèi)存或其他資源 (端口、文件等) 的清理行為。長(zhǎng)期以來(lái),這個(gè)問(wèn)題都十分棘手,因?yàn)?Dart 是一種會(huì)自動(dòng)處理清理行為的垃圾回收語(yǔ)言。在 Dart 2.17 中,我們通過(guò)引入 Finalizer 的概念,解決了這個(gè)問(wèn)題。Finalizer 中包括一個(gè) Finalizable 標(biāo)記接口,用于 "標(biāo)記" 不應(yīng)過(guò)早終結(jié)或丟棄的對(duì)象,以及一個(gè)可以附加到 Dart 對(duì)象的 NativeFinalizer 類(lèi),在對(duì)象即將被垃圾回收時(shí)提供回調(diào)運(yùn)行。這樣,在原生代碼和 Dart 代碼中都可以運(yùn)行清理代碼。更多詳細(xì)信息,請(qǐng)參閱 NativeFinalizer API 文檔,或參閱 WeakReferenceFinalizer 文檔中的描述和示例,以了解常規(guī) Dart 代碼中的類(lèi)似做法。

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

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

即刻使用 Dart 2.17!

我們希望 Dart 2.17 版本能打動(dòng)您,并能助力您提高工作效率,把您的應(yīng)用帶去更多平臺(tái)。您可以即刻下載 Dart 2.17 并開(kāi)始使用,或者使用 Flutter 3 SDK 中包含的 Dart SDK。
原文標(biāo)題:一起看 I/O | Dart 2.17 現(xiàn)已發(fā)布: 工作效率與平臺(tái)集成

文章出處:【微信公眾號(hào):谷歌開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Google
    +關(guān)注

    關(guān)注

    5

    文章

    1752

    瀏覽量

    57327
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1015

    瀏覽量

    45607
  • Dart
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    1734
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Vivado 2024.1版本的新特性(2)

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

    Vivado 2024.1版本的新特性(1)

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

    USB4 2.0版本的重大更新

    USB版本一直很多,可以說(shuō)是五花八門(mén),但是隨著接口的日漸統(tǒng)一,USB的版本可以說(shuō)減少了很多,到了USB4,只剩下USB-C接口,為何還有一個(gè)2.0版本,我們往下詳解。
    的頭像 發(fā)表于 09-09 14:37 ?440次閱讀

    【AWTK最新動(dòng)態(tài)】AWTK 1.8版本發(fā)布

    AWTK是一套基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架,目前正式推出1.8版本。本次更新不僅對(duì)許多細(xì)節(jié)進(jìn)行了優(yōu)化,還增添了眾多重要特性和文檔資料。此外,還引入了三款創(chuàng)新控件和兩個(gè)與AWTK相關(guān)項(xiàng)目。AWTK
    的頭像 發(fā)表于 08-30 12:48 ?318次閱讀
    【AWTK最新動(dòng)態(tài)】AWTK 1.8<b class='flag-5'>版本</b>發(fā)布

    Allegro X 23.11 版本更新 I PCB 設(shè)計(jì):圖紙打印和時(shí)序調(diào)整

    基于AllegroX23.11版本更新,我們將通過(guò)實(shí)例講解、視頻演示讓您深入了解AllegroXSystemCapture、AllegroXPCBDesigner、AllegroXPulse產(chǎn)品
    的頭像 發(fā)表于 07-27 08:12 ?422次閱讀
    Allegro X 23.11 <b class='flag-5'>版本</b>更新 I PCB 設(shè)計(jì):圖紙打印和時(shí)序調(diào)整

    ENV-Windows v2.0.0版本發(fā)布

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

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

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

    STM32的4.0版本的電機(jī)庫(kù)是如何實(shí)現(xiàn)OOP編程的?

    STM32的4.0版本的電機(jī)庫(kù)是如何實(shí)現(xiàn)OOP編程的 看4.0的電機(jī)庫(kù),看到使用的OOP編程思想,但是C語(yǔ)言本身好像是不支持繼承、虛函數(shù)等技術(shù)的 那電機(jī)庫(kù)里是怎么實(shí)現(xiàn)的,有好的相關(guān)學(xué)習(xí)資料嗎?
    發(fā)表于 05-17 06:50

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

    請(qǐng)教下,吧 LwIP v2.0 版本更換為 v2.1.2 版本后接收不到數(shù)據(jù)了,是怎么回事啊 ?? 之前使用 v2.0 版本測(cè)試是完全可以了,不過(guò)目前 使用 v2.1.2版本的,dhc
    發(fā)表于 04-23 08:20

    蘋(píng)果停iOS 16.7.6驗(yàn)證,僅支持16.7.7版本驗(yàn)證

    據(jù)悉,蘋(píng)果已于4月17日停止了對(duì)iOS 16.7.6版本的驗(yàn)證服務(wù)。對(duì)于已升級(jí)至iOS 16.7.7版本的iPhone用戶(hù)來(lái)說(shuō),他們已無(wú)法返回至舊版系統(tǒng)。
    的頭像 發(fā)表于 04-17 10:27 ?1001次閱讀

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

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

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

    PSOC Creator由3.3版本升級(jí)到4.1版本后,程序的EEEPROM模塊無(wú)法使用,請(qǐng)?zhí)峁┮幌翪Y8C4247讀寫(xiě)內(nèi)部Flash的例程,謝謝 。
    發(fā)表于 02-01 06:58

    Vivado 2023.2版本的新增功能

    Vivado在前一段時(shí)間更新了2023.2版本,經(jīng)過(guò)一段時(shí)間的使用這個(gè)版本還是很絲滑的,用起來(lái)挺舒服。
    的頭像 發(fā)表于 01-02 09:39 ?2600次閱讀
    Vivado 2023.2<b class='flag-5'>版本</b>的新增功能

    Dart 3.2 更新盤(pán)點(diǎn)

    作者 / Kevin Moore 和 Michael Thomsen 我們隆重宣布推出 Dart 3.2,這一版本針對(duì)以下方面做出了改進(jìn): 新增了一項(xiàng)語(yǔ)言功能,可對(duì)私有 final 字段進(jìn)行非空升級(jí)
    的頭像 發(fā)表于 12-15 15:55 ?362次閱讀

    逆變器輸出特性與非線性負(fù)載——看似簡(jiǎn)單的整流電路詳解(六)

    逆變器輸出特性與非線性負(fù)載——看似簡(jiǎn)單的整流電路詳解(六)
    的頭像 發(fā)表于 12-01 16:44 ?1113次閱讀
    逆變器輸出<b class='flag-5'>特性</b>與非線性負(fù)載——看似簡(jiǎn)單的整流電路<b class='flag-5'>詳解</b>(六)