Dart 3 现已发布,这是迄今为止最大的 Dart 版本,包含了三个主要改进:完成了 100% 健全的空安全;添加了记录、模式和类修饰符的新语言特性;以及对未来进行了预览,即,通过 Wasm 编译扩大了对网络原生代码的平台支持。
Dart 3 已经成为了一种 100% 健全的空安全语言。100% 的空安全性为Dart 带来了健全的类型系统。你可以相信,如果一个类型说一个值不是null
,那么它永远不可能是null
。这避免了某些类别的编码错误,例如空指针异常。它还允许编译器和运行时以没有空安全性无法实现的方式优化代码。虽然这种设计会使得迁移变得有点困难,但开发团队认为,他们为 Dart 做出了正确的选择。
(相关资料图)
预计绝大多数已迁移到 null safety 的包和应用程序都可以与 Dart 3 一起使用。在少数情况下,Dart 3 中的少量相关清理可能会影响某些代码。一些旧的核心库 API 已被删除(#34233、#49529)并且一些工具已被调整(#50707)。如果用户在迁移到使用 Dart 3 SDK 时遇到任何问题,可查阅Dart 3 迁移指南。
Dart 3 不仅仅是基于现有基础作出改变,它还涉及添加重要的新特性和功能。
使用记录构建结构化数据
借助记录,你可以使用简洁明了的语法构建结构化数据。
( String , int ) userInfo( Map < String , dynamic > json) { return (json[ "name" ] as String , json[ "height" ] as int ); }
记录是值类型,没有标识。这使得编译器能够在某些情况下完全擦除记录对象。记录还带有自动定义的==
运算符和hashCode
函数。更多详细信息可查看文档。
用模式和模式匹配来处理结构化数据
记录简化了构建结构化数据的方式。这不会取代使用类来构建更正式的类型层次结构。它只是提供了另一种选择。在任何一种情况下,你都可能希望将该结构化数据分解为单独的元素以使用它们。这就是模式匹配发挥作用的地方。
考虑模式的基本形式。以下记录模式将记录解构为两个新变量name
和height
。然后可以像任何其他变量一样使用这些变量,例如调用print
时:
var (String name, int height) = userInfo({"name": "Michael", "height": 180});print("User $name is $height cm tall.");
类似的模式也存在于 lists 和 maps 中。对于所有这些,你可以使用下划线模式跳过单个元素:
var (String name, _) = userInfo(…);
Dart 3 中还扩展了switch
语句的功能和表现力。现在已经消除了在每个案例末尾添加break
的需要,还支持逻辑运算符来组合案例。示例:
switch (charCode) { case slash when nextCharCode == slash: skipComment(); case slash || star || plus || minus: operator(charCode); case >= digit0 && <= digit9: number(); default: invalid();}
模式的一个强大功能是能够检查“exhaustiveness”,此功能可确保 switch 可以处理所有可能的情况。
sealed class Animal { … }class Cow extends Animal { … }class Sheep extends Animal { … }class Pig extends Animal { … }String whatDoesItSay(Animal a) => switch (a) { Cow c => "$c says moo", Sheep s => "$s says baa" };
这将返回以下错误,提醒错过了最后一个可能的子类型 Pig 的处理:
line 6 • The type "Animal" is not exhaustively matched by the switch casessince it doesn"t match "Pig()".
if
语句也可以使用模式:
final json = {"name": "Michael", "height": 180};// Find Michael"s height.if (json case {"name": "Michael", "height": int h}) { print("Michael is $h cm tall."); } else { print("Error: json contains no height info for Michael!");}
更多详情可查看patterns documentation和patterns codelab。
Dart 3 的第三个语言特性是类修饰符。与期望每个 Dart 开发人员都使用的记录和模式不同,这更像是一个高级用户功能。它满足了 Dart 开发人员制作大型 API 表面或构建企业级应用程序的需求。
类修饰符使 API 作者能够仅支持一组特定的功能。默认值保持不变。开发团队希望 Dart 保持简单易用。因此,像以前一样,可以构造、扩展和实现常规类,如以下示例所示:
class Vehicle { String make; String model; void moveForward(int meters) { … }}// Construct.var myCar = Vehicle(make: "Ford", model: "T",);// Extend.class Car extends Vehicle { int passengers;}// Implement.class MockVehicle implements Vehicle { @override void moveForward …}
类修饰符支持在此基础上添加限制。考虑一些示例用例:
使用interface class
,你可以定义一个契约供其他人实施。不能扩展接口类。 使用base class
,你可以确保类的所有子类型都继承自它,而不是实现它的接口。这确保私有方法在所有实例上都可用。 使用final class
,你可以关闭类型层次结构以防止你自己的库之外的任何子类。作为一个 sample 好处,这允许 API 所有者添加新成员,而不会冒破坏 API 使用者更改的风险。 更多详情可查看文档。
编译为 WebAssembly —— 使用 native code 定位 web
更多详情可查看官方公告。
标签:
精彩推荐
Dart3现已发布,这是迄今为止最大的Dart版本,包含了三个主要改进:完成了100%健全的空安全;添加了记录、
5月10日,中国石化(600028)融资买入2 35亿元,融资偿还8425 31万元,融资净买入1 51亿元,融资余额13 53亿元。
谷爱凌在中国是中国人,在美国是美国人;梅西在阿根廷是阿根廷人,在西班牙虽然有国籍,却也还是阿根廷人;
实探丨金价暴涨,回收火热,有商家上月回收量激增600%!,金价,金条,水贝,黄金,回收量
1、磨牙是由于咀嚼肌反复收缩,上下牙齿相互碰撞发出声响引起的。2、咀嚼肌收缩受三叉神经控制,三叉神经兴
北京时间2023年5月11日凌晨1点,谷歌将要举办一年一度的GoogleI O大会将在海岸线圆形露天剧场进行现场直播
1、我们最熟悉的应该是这个版本:传说猫有九条命,可是连九条命的猫猫都被好奇心害死了。2、就更别说人了。
三特索道5月10日收到深交所年报问询函,要求说明报告期第四季度营业收入明显减少的原因及合理性,与行业特
据美媒报道,佛罗里达州众议院近日通过一项禁止中国公民在该州购置土地或房产的法案。支持该法案的州议员们
石家庄:多子女家庭租房每年提取公积金额度提高至18000元,租房,贷款,住房公积金,石家庄正定国际机场
长江日报大武汉客户端5月10日讯(记者侯钰倩)5月10日,腾讯电竞公布杭州亚运会电子竞技(王者荣耀亚运版本
雅思大作文考官范文第1篇Asmostpeoplespendamajorpartoftheiradultlifeatwork,jobsatisfactionisanimportan
国美零售(00493)27日盘中大幅下挫,股价再创历史新低。截至发稿,该股跌约7%报0 14港元。消息面上,9月26日,
中标候选人公示项目名称陇西县2022年第一批森林植被恢复工程人工造林招标人陇西县
襄阳古隆中景区上榜第二批国家级文明旅游示范单位---湖北日报讯(记者胡梦思、通讯员施良艳、黄文)5月8日
近日,吉林省洮南市一“熊孩子”迷恋直播,竟将爷爷的11万元养老钱全部打赏给了主播,爷爷知道后懵了…...
智通财经APP讯,环球数码创意(08271)发布截至2023年3月31日止3个月业绩,持续经营业务收益1444 5万港元,同
中新网呼和浩特5月10日电(记者张林虎)10日,记者从呼和浩特市教育局获悉,13日起当地126所中小学体育场地设
近日,滴滴自动驾驶公司与广汽埃安新能源汽车股份有限公司签订深化合作协议,共同发布无人驾驶新能源量产车
近日,有玩家反馈在XboxSeriesS主机游玩《无主之地3》时遭遇了严重的游戏错误致使游戏崩溃直接返回Xbox菜单。
资讯News
08-07
07-08
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
聚焦Policy
当好农民工的“护薪人” 近日,罗某等7名农民工在收到被拖欠的工资后,纷纷打电话向江西省南昌市...
“通讯录里所有人都知道我欠钱了” □ 本报记者 韩丹东 □ 本报见习记者 张守坤 ...
大连宝马车撞人案肇事司机被判死刑 本报讯 记者韩宇 10月29日,辽宁省大连市中级人民法院一审...
医院财务迷上网络赌博输光5000万元公款 □ 本报记者 马维博 □ 本报通讯员 汪宇堂 曹...
辊环车削 雕琢毫厘(工匠绝活) 【绝活看点】 23年来,雷虎始终扎根一线,改进钢材轧制工艺...
交警严查超标电动自行车挪用“白牌” 截至昨晚6时,处罚电动自行车违法行为共计6585笔;下一步将...
明起寒潮来袭 北方气温普降10℃以上 中央气象台预计,本周日北京平原地区最低气温降至-4℃左右...
多种蔬菜价格降幅达五成 包括菠菜、蒿子秆等 预计本月中旬蔬菜恢复供需平衡 本报讯(记者...
北京周日最低气温或达-4℃ 本报讯(记者 赵婷婷)北京青年报记者昨天从中央气象台获悉,新一股...
昌平一家四口确诊新冠肺炎 天通北苑第二社区升级为中风险地区 朝阳两涉疫校区及16所学校停课 ...