Dart 3 Record 语法快速入门指南

简介: 学习如何使用Dart中的record类型,这种匿名、不可变的聚合类型将帮助您更高效地管理数据。

Dart 3 Record 语法快速入门指南

视频

https://youtu.be/06WmVjp06D0

https://www.bilibili.com/video/BV1Kt42157Xv/

前言

原文 https://ducafecat.com/blog/dart-syntax-record-usage-guide

学习如何使用Dart中的record类型,这种匿名、不可变的聚合类型将帮助您更高效地管理数据。

了解如何定义和使用,以及常见使用场景。

参考

https://dart.dev/language/records

在线编辑器

https://dartpad.dev/

定义 Record 类型

快速定义

  var name = 'Bob';
  var age = 20;
  var isVip = true;

  var userInfo = (name, age, isVip);

  print('name: ${userInfo.$1}');
  print('age: ${userInfo.$2}');
  print('isVip: ${userInfo.$3}');

需要通过 userInfo.$1 的方式访问

命名定义

  var name = 'Bob';
  var age = 20;
  var isVip = true;

  var userInfo = (name: name, age: age, isVip: isVip);

  print('name: ${userInfo.name}');
  print('age: ${userInfo.age}');
  print('isVip: ${userInfo.isVip}');

通过 name: name 方式指定名称,方便调用 userInfo.name

指定类型

  (String, int, bool) userInfo = (name, age, isVip);

  print('name: ${userInfo.$1}');
  print('age: ${userInfo.$2}');
  print('isVip: ${userInfo.$3}');

指定命名类型

  ({
   
   String name, int age, bool isVip}) userInfo =
      (name: name, age: age, isVip: isVip);

  print('name: ${userInfo.name}');
  print('age: ${userInfo.age}');
  print('isVip: ${userInfo.isVip}');

定义赋值分开写

// 定义
({
   
   String name, int age, bool isVip}) userInfo;

// 赋值
userInfo = (name: name, age: age, isVip: isVip);

解构方式读取

// 定义,赋值
({
   
   String name, int age, bool isVip}) userInfo =
      (name: name, age: age, isVip: isVip);

// 解构读取
final (:name, :age, :isVip) = userInfo(json);
print("$name, $age, $isVip");

使用场景

直接返回经纬度

({
   
   double latitude, double longitude}) getLocation() {
   
   
  // 返回经纬度
  return (latitude: 37.7749, longitude: -122.4194);
}

void main(List<String> arguments) {
   
   
  var location = getLocation();
  print(
      "Location latitude: ${location.latitude}, longitude: ${location.longitude}");
}

函数方式处理 json 数据

// 函数
(String name, int age) userInfo(Map<String, dynamic> json) {
   
   
  return (json['name'] as String, json['age'] as int);
}

// 数据
final json = <String, dynamic>{
   
   
  'name': 'Dash',
  'age': 10,
  'color': 'blue',
};

// 执行处理
var (name, age) = userInfo(json);

/* Equivalent to:
  var info = userInfo(json);
  var name = info.$1;
  var age  = info.$2;
*/

合并数据集合

如返回博客文章,我们需要一次返回文章、评论、关联推荐.

以前原来我们需要定义一个返回类 Class。

class ArticleDetail {
   
   
  final String article;
  final List<String> comments;
  final List<String> related;

  ArticleDetail(this.article, this.comments, this.related);
}
Future<ArticleDetail> GetArticle(String uri) async {
   
   
  String article;
  List<String> comments;
  List<String> related;

  ...

  return ArticleDetail(article, comments, related);
}

现在直接返回 Record 对象

Future<({
   
   String article, List comments, List related})> getArticle(String uri) async {
   
   
  String article;
  List<String> comments;
  List<String> related;

  ...

  return  (article: article, comments: comments, related: related);
}
void main(List<String> arguments) {
   
   
  final (:article, :comments, :related) = getArticle(123);
}

小结

今天讲了下 Record 的匿名、命名定义、赋值使用,以及使用场景,优点我总结如下:

  • 减少了繁琐的类型定义
  • 快速集合多个数据
  • 配合解构使用 : 冒号语法
  • 适合处理 map 数据转模型 class

感谢阅读本文

如果有什么建议,请在评论中让我知道。我很乐意改进。


© 猫哥
ducafecat.com

end

相关文章
|
存储 设计模式 Dart
Flutter笔记:getX库中的GetView中间件
Flutter笔记:getX库中的GetView中间件
785 0
|
传感器 Android开发 iOS开发
Flutter插件开发指南02: 事件订阅 EventChannel
上一节我们讲了 Channel 通道,但是如果你是卫星定位业务,原生端主动推消息给 Flutter 这时候就要用到 EventChannel 通道了。 本节会写一个 1~50 的计数器,到 50 后自动关闭原生的消息订阅。
445 1
Flutter插件开发指南02:  事件订阅 EventChannel
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
面向认知智能的AI推理体系:理论基础与工程实践
本文深入探讨了AI推理从“感知智能”迈向“认知智能”的理论框架与技术突破。文章分析了符号推理、神经推理及混合推理的优劣势,指出了多跳推理、因果推理和可解释性等挑战。同时,结合大语言模型、ReAct架构和知识增强推理等前沿技术,展示了AI推理在代码实现中的应用。未来,认知图谱、推理驱动的智能体、边缘推理优化及人机协同将成为重要方向,推动AI向通用人工智能(AGI)迈进。
1047 60
面向认知智能的AI推理体系:理论基础与工程实践
|
SQL Oracle 关系型数据库
sql开发
【5月更文挑战第20天】sql开发
958 1
|
安全 Java 关系型数据库
探索后端技术:构建高效、安全的应用服务
在当今数字化浪潮中,后端技术作为软件架构的核心支柱,承载着处理数据逻辑、保障应用性能与安全等关键任务。本文旨在深入浅出地探讨后端开发的重要概念、主流技术栈以及未来发展趋势,为开发者提供一份指南,以助力构建既高效又安全的应用程序。
|
Dart API Android开发
Flutter 3.24 中的新功能
Flutter 3.24 已发布,带来诸多新功能与改进。此版本亮点包括:GPU 预览版,支持高级图形和 3D 场景;Web 应用多视图嵌入,增强应用灵活性;新增视频广告变现支持,助您增加收益。框架方面,引入新 Slivers 组件、Cupertino 库更新及 TreeView 小部件。引擎改进包括 Impeller 性能提升和默认图像质量优化。此外,新增重建统计功能,改善开发工具体验。此版本还支持 Swift 包管理器,并对 Navigator 等进行了破坏性变更。感谢社区贡献,期待您的精彩创作!
502 0
Flutter 3.24 中的新功能
|
SQL NoSQL 数据库
Flutter Hive NoSql 数据库使用指南
本文将会写一个 Hive CURD 的例子,详细介绍 Hive 这个轻量级的 Flutter 离线数据库的使用方法,包括 Hive 在 Flutter 开发中的重要性、Hive 与 SQLite 的比较等,帮助开发者快速上手 Hive 数据库。
541 6
Flutter Hive NoSql 数据库使用指南
|
Dart 开发者 UED
flutter 非常用组件整理 第三篇
本文是非常用组件的第三讲,介绍了一些不为人知但却能大幅提升Flutter应用UI效果和功能的高级组件,包括FadeInImage、GridPaper、Hero等,为开发者带来更丰富的UI设计可能。
386 3
flutter 非常用组件整理 第三篇
|
Dart 数据安全/隐私保护 开发者
flutter 非常用组件整理 第二篇
本文是Flutter非常用组件第二篇,从开发者的视角出发,精选并深入剖析了AboutDialog、AnimatedGrid、Badge等鲜为人知却功能强大的隐藏组件,为读者提供了一份全面的Flutter UI组件使用指南。无论您是初学者还是有经验的开发者,相信本文都能为您的Flutter项目注入新的活力,助力打造出色的应用界面。
245 2
flutter 非常用组件整理 第二篇
|
存储 安全 数据安全/隐私保护
构建安全Flutter应用 - 6个实用技巧
随着越来越多的敏感用户数据在Flutter应用中流通,应用安全已成为首要关注点。本文为您总结6大关键Flutter应用安全最佳实践,帮助开发者筑牢应用安全防线,保护用户隐私。
610 1
构建安全Flutter应用 - 6个实用技巧