一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(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)超類參數(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ù)的方式,并使超類參數(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)換,我們希望重寫 toString(),但這個(gè)做法在之前的版本不受支持。

Dart 2.17 中現(xiàn)已全面支持枚舉成員變量。因此,我們可以添加保存狀態(tài)的字段、設(shè)置狀態(tài)的構(gòu)造函數(shù)、具備功能的方法,甚至重寫現(xiàn)有方法。許多開(kāi)發(fā)者對(duì)此功能一直有需求,這是我們語(yǔ)言問(wè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,我們只需重寫 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

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

如果您的代碼存在類繼承層次結(jié)構(gòu),常見(jiàn)模式是將一些構(gòu)造函數(shù)參數(shù)傳遞給超類的構(gòu)造函數(shù)。為此,子類需要 1) 在其構(gòu)造函數(shù)中列出每個(gè)參數(shù);2) 使用這些參數(shù)調(diào)用超類的構(gòu)造函數(shù)。這樣會(huì)導(dǎo)致樣板代碼反復(fù)出現(xiàn),從而增加代碼的閱讀和維護(hù)難度。 在幾位 Dart 社區(qū)成員的幫助下,我們的改進(jìn)目標(biāo)得以實(shí)現(xiàn)。半年前,GitHub 用戶 @roy-sianez 提交了一個(gè)相關(guān)的語(yǔ)言問(wèn)題。他的建議與 GitHub 用戶 @apps-transround 之前提出的建議類似:也許我們可以這樣解決問(wèn)題,即引入新的構(gòu)造方式,來(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)參閱我們更新的枚舉、超類初始化構(gòu)造命名參數(shù)示例代碼。

工作效率工具

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

在 Dart 2.14 中,我們引入了 package:lints,它可與 Dart 分析器一起工作,以幫助您避免編寫出包含錯(cuò)誤的 Dart 代碼,并通過(guò)規(guī)范化的方式提升代碼審核效率。后來(lái)分析器中又新增了許多 Lint,我們對(duì)其進(jìn)行了仔細(xì)分類,并從中選擇了 10 條新的 Lint 用于所有 Dart 代碼,還有 2 條新的 Lint 專門用于 Flutter 代碼。其中一些 Lint 可確保 pubspec 文件中包含導(dǎo)入內(nè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)制接口) 特有類型的平臺(tái)上使用 FFI,F(xiàn)FI 現(xiàn)已支持 ABI 特有類型。例如,現(xiàn)在您可以使用 Long (C 語(yǔ)言中的 long) 正確表示 ABI 特有大小的長(zhǎng)整數(shù),由于 CPU 架構(gòu)的區(qū)別,結(jié)果可能是 32 位或 64 位。有關(guān)支持類型的完整列表,請(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 類,在對(duì)象即將被垃圾回收時(shí)提供回調(diào)運(yùn)行。這樣,在原生代碼和 Dart 代碼中都可以運(yùn)行清理代碼。更多詳細(xì)信息,請(qǐng)參閱 NativeFinalizer API 文檔,或參閱 WeakReferenceFinalizer 文檔中的描述和示例,以了解常規(guī) Dart 代碼中的類似做法。

支持將 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)容及配圖由入駐作者撰寫或者入駐合作網(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

    文章

    1789

    瀏覽量

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

    關(guān)注

    3

    文章

    1076

    瀏覽量

    49016
  • Dart
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Google Fast Pair服務(wù)簡(jiǎn)介

    Google 帳戶。 參考手機(jī)應(yīng)是市場(chǎng)上活躍的手機(jī),并且覆蓋相當(dāng)多的用戶群體。 實(shí)現(xiàn)了fast pair版本和相關(guān)擴(kuò)展的藍(lán)牙設(shè)備且是被認(rèn)證的。 原文如下: All phones should
    發(fā)表于 06-29 19:28

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

    版本持續(xù)助力當(dāng)前車輛E/E架構(gòu)中ECU開(kāi)發(fā)驗(yàn)證,同時(shí)賦能后續(xù)智能網(wǎng)聯(lián)電動(dòng)車型預(yù)研驗(yàn)證。新版本CANoe產(chǎn)品體系新增數(shù)據(jù)驅(qū)動(dòng)的DDS、車輛互聯(lián)服務(wù)和高效電機(jī)模型庫(kù),進(jìn)一步支持CANXL
    的頭像 發(fā)表于 06-11 10:03 ?1267次閱讀
    CANoe產(chǎn)品體系19<b class='flag-5'>版本</b>新<b class='flag-5'>特性</b>及新增Option(上)

    芯來(lái)科技發(fā)布Nuclei Studio 2025.02版本

    Studio 2025.02版本發(fā)布了以下功能特性: 集成Nuclei RISC-V Toolchain /OpenOCD /QEMU /Xlmodel 2025.02版本。
    的頭像 發(fā)表于 03-05 17:43 ?1092次閱讀
    芯來(lái)科技發(fā)布Nuclei Studio 2025.02<b class='flag-5'>版本</b>

    如何開(kāi)發(fā)一款Google Find My Tag?

    My 網(wǎng)絡(luò)的配件(如 AirTag)。通過(guò)結(jié)合 GPS、藍(lán)牙和眾包網(wǎng)絡(luò),F(xiàn)ind My 提供了高精度的定位功能,同時(shí)保護(hù)用戶隱私 Google Find My網(wǎng)絡(luò)同樣也是由數(shù)億臺(tái)運(yùn)行較新版本
    發(fā)表于 03-05 17:39

    motorBench 2.45.0版本說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《motorBench 2.45.0版本說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 01-22 16:15 ?0次下載
    motorBench 2.45.0<b class='flag-5'>版本</b>說(shuō)明

    OurBMC 24.12版本正式上線

    日前,經(jīng)過(guò)社區(qū)開(kāi)發(fā)者的共同努力,OurBMC 全新升級(jí),24.12版本正式上線。
    的頭像 發(fā)表于 01-07 13:45 ?600次閱讀

    開(kāi)源鴻蒙5.0 Release版本關(guān)鍵特性解讀

    特性。如果想了解該版本完整的特性,請(qǐng)參考版本的Release notes。 一 系統(tǒng)功能 1.1 應(yīng)用框架能力優(yōu)化 應(yīng)用框架新增子進(jìn)程創(chuàng)建、Ability生命周期監(jiān)聽(tīng)等關(guān)鍵能力,開(kāi)發(fā)者
    的頭像 發(fā)表于 12-23 13:58 ?2198次閱讀

    三、四、六、八缸發(fā)動(dòng)機(jī)NVH特性詳解

    三、四、六、八缸發(fā)動(dòng)機(jī)NVH特性詳解。 ?
    的頭像 發(fā)表于 11-16 11:45 ?678次閱讀
    三、四、六、八缸發(fā)動(dòng)機(jī)NVH<b class='flag-5'>特性</b><b class='flag-5'>詳解</b>

    Google AI Edge Torch的特性詳解

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

    淺談Xpedition 2409版本的新功能

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

    Vivado 2024.1版本的新特性(2)

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

    USB4 2.0版本的重大更新

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

    【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 ?824次閱讀
    【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 ?1101次閱讀
    Allegro X 23.11 <b class='flag-5'>版本</b>更新 I PCB 設(shè)計(jì):圖紙打印和時(shí)序調(diào)整