当前位置: 首页 > news >正文

Dart 表达式以及语法糖汇总

前言

Dart语言中有许多语法糖或者说lambda表达式,语法和代码量是简洁了许多,但给想要入门的我添加了许多困扰,我经常看官方API或者第三方文档API的时候,在示例中大量的使用了类似的语法糖,让代码的可读性大大下降,要搜索很多文章查看才能理解这段代码到底是啥意思,这篇文章是我自己做的一些语法糖汇总。

语法糖 or lambda表达式

1、方法及其胖箭头 (=>)

因为dart中真正实现了万物皆可为对象,所以dart中的方法(Function)也是一个类(class)

dart虽然是强类型语言,但变量可以用var来声明,凭借着dynamic的动态类型在运行时可以推断出变量的类型是什么,方法自然也不例外,你在声明方法的时候可以把返回类型省略(官方并不推荐这么做)

如下:

add(int x,int y){return x+y;
}
main(){print(add(2, 3));
}

运行后控制台如下:

5

这时如果我们查看add()方法返回值类型是什么就会发现果不其然是dynamic——动态数据类型

在日常使用中,建议方法前的返回类型还是不要省略,明确的指出返回类型会大大提升代码的可读性

在dart中如果方法只有一行语句时,就可以使用胖箭头(=>)来代替方法体,比如上方的add()方法

如下:

int add(int x,int y) => x + y ;void main(){print(add(2, 3));
}

2、call()方法 

dart中一个类如果有一个方法名为 "call" 的方法则可以用()直接调用

如下:

class Computer{Computer(){print('01');}Computer.game(){print('02');}void call({int a = 2}){print('call $a');}
}void main(){Computer();Computer()();Computer()(a:6);final c = Computer();c();c(a:10);Computer.game()();Computer.game()(a:111);
}

 控制台打印为:

01
01
call 2
01
call 6
01
call 2
call 10
02
call 2
02
call 111

3、 声明可空(?)和空断言运算符(!)

dart2.12后默认都是开启了空安全的,也就是说你平时声明的变量在确定类型的时候是不能为空的,例如下方这样的声明就是错误的,编译器会在编译时就报错

int a = null;

 想要声明为空变量可以在声明时的类型后方添加 ? 来表示该类型可为空,未赋值时所有变量默认值都是null

int? a;

如果声明了该变量可为空时,在方法调用或者使用变量可能为空时,会报编译时错误:

 这时就可以用空断言运算符来表示你调用的对象确信不为空:

int? getNum() => 1;
void main(){var c = getNum();print(c!.abs());
}

或者在(.)之前加上(?)来表示可空

int? getNum() => 1;
void main(){var c = getNum();print(c?.abs());
}

4、 ??  和 ??= 避空运算符 

 声明可空变量时可以使用避空运算符来赋值防止变量为空

int? a; // = null
a ??= 3;
print(a); // <-- Prints 3.a ??= 5;
print(a); // <-- Still prints 3.

在使用时可以用??防止变量为空

print(1 ?? 3); // <-- Prints 1.
print(null ?? 12); // <-- Prints 12.

5、级联运算符(..)

dart中可以用级联运算符对同一对象进行连续调用:

class Player{int ammo = 3;void walk() => print('walk');void run() => print('run');void fire(int a){if(ammo >= a){print('ta'*a);ammo -= a;}}
}
Player? getPlayer() => Player();
void main(){getPlayer()?..walk()..run()..fire(3);
}

这里可以和空判断一起使用,使用(?..)可以确保在对象不为null时执行。

运行如下:

walk
run
tatata

6、lambda

forEach()

String scream(int length) => 'A${'a' * length}h!';main(){final values = [1,2,3,5,10,50];// for(var length in values){//   print(scream(length));// }// values.map(scream).forEach(print);//跳过1//拿3个结果values.skip(1).take(3).map(scream).forEach(print);
}

相关文章:

Dart 表达式以及语法糖汇总

前言 Dart语言中有许多语法糖或者说lambda表达式&#xff0c;语法和代码量是简洁了许多&#xff0c;但给想要入门的我添加了许多困扰&#xff0c;我经常看官方API或者第三方文档API的时候&#xff0c;在示例中大量的使用了类似的语法糖&#xff0c;让代码的可读性大大下降&…...

支付宝支付功能使用

1、进入“蚂蚁金服开放平台” https://open.alipay.com/https://open.alipay.com/ 2、下载支付宝官方 demo&#xff0c;进行配置和测试 文档地址 手机网站支付 DEMO &#xff5c; 网页&移动应用支付宝文档中心https://opendocs.alipay.com/open/02no47 demo下载 网页…...

数据库必知必会:TiDB(11)TiDB集群安装

数据库必知必会&#xff1a;TiDB&#xff08;11&#xff09;TiDB集群安装TiDB集群安装单机环境上安装集群下载并安装TiUP工具安装TiUP cluster组件创建拓扑文件配置SSH免密登录检查安装要求创建安装目录部署集群启动集群验证集群启动使用命令验证通过Dashboard查看通过Grafana查…...

ubuntu18安装Autoware 标定工具箱

参考链接&#xff1a;https://blog.csdn.net/zbr794866300/article/details/107109186#:~:textAutoware1.10%E4%BB%A5%E4%B8%8A%E7%9A%84%E8%BD%AF%E4%BB%B6%E9%83%BD%E9%9C%80%E8%A6%81%E5%8D%95%E7%8B%AC%E5%AE%89%E8%A3%85%E8%BF%99%E4%B8%AAcalibration%E6%A0%87%E5%AE%9A%…...

【面试题】ES6 如何将 Set 转化为数组

大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库Set 是 ES6 中新增的一种集合类型&#xff0c;类似于数组&#xff0c;但其成员的值是唯一的&#xff0c;即不会重复。关于Set&#xff0c;可以阅…...

vs2022 实现无线调试安卓(Windows)

文章目录VS安装安卓调试环境前提条件Android SDK 版本查看安卓开启无线调试开启开发者模式打开USB调试功能打开无线调试功能查看配对信息&#xff08;再次点击无限调试&#xff0c;不是switch开关&#xff09;准备电脑端输入adb命令配对安卓查看设备清单如果没有设备VS无线调试…...

手把手教你做插件(2)模块大串联

0&#xff0c;前言 这篇文章笔记比较简略&#xff0c;大部分的操作都是和上一篇文章重复了&#xff0c;建议先看上一节文章&#xff0c;直达电梯&#xff1a;UE4 手把手教你做插件&#xff08;1&#xff09; 从代码引用插件_asiwxy的博客-CSDN博客UE4 手把手教你创建插件https:…...

LU Accepted or Rejected过程介绍

本文介绍LU成功和失败的过程。 LU accepted过程 [MS->NW] MM__LOCATION_UPDATING_REQUEST(LU type:MM_NORMAL_LU) MM_T3210_TIMER_ID Timer starts [NW->MS] MM__LOCATION_UPDATING_ACCEPT MM_T3210_TIMER_ID Timer stopped 通过OTA消息LOCATION_UPDATE_REQUEST查看LU ty…...

Teradata退了? 无所谓,GBASE会出手

近期&#xff0c;就在2月15日&#xff0c;国内IT界有搞出个大瓜&#xff0c;Teradata以对中国当前及未来商业环境的不确定性&#xff0c;慎重考虑后决定退出中国运营&#xff0c;后续将进入中国公司关闭程序。Teradata是一家有着40多年历史的数据仓库企业&#xff0c;被业界专业…...

华为OD机试 - 病菌感染(Python) | 机试题+算法思路+考点+代码解析 【2023】

病菌感染 题目 在一个地图中(地图有N*N个区域组成) 有部分区域被感染病菌 感染区域每天都会把周围上下左右的四个区域感染 请根据给定的地图计算多少天以后全部区域都会被感染 如果初始地图上所有区域都被感染 或者没有被感染区域返回-1 备注 1 <= N < 200 输入 一行…...

前置知识-边值问题、打靶法、bvp 系列函数的用法

1.2 边值问题 微分方程边值问题(Boundary Value Problem,简称BVP)是微分方程求解中的一个重要问题。与初值问题(Initial Value Problem,简称IVP)不同,BVP是在某个区间内寻求微分方程解的特定边界条件下的解。 在实际问题中,许多微分方程的解必须满足一些特定的边界条…...

为什么越来越多的企业选择智能客服系统?

现在智能客服系统越来越普遍&#xff0c;但是大部分的企业在配备智能客服系统的同时也会配置人工客服。因为目前为止&#xff0c;智能客服并不可以完全取代人工客服。智能客服系统之所以能够受到众多企业的青睐&#xff0c;主要是存在以下几点原因&#xff1a; 1、反应速度快&a…...

打造一款日志分析工具

一、简介 作为一名安全从业者&#xff0c;网络安全事件的应急响应工作是必不可少的&#xff0c;那么在应急支撑时&#xff0c;针对大量的日志数据便需要借助自动化工具实现快速的归类检测&#xff0c;并提取出所需的关键日志数据。本篇文章主要通过利用python语言编写一款web日…...

网络编程基础知识

套接字类型:1.字节流套接字(stream) 2.数据报接套接字(datagram) 3.原始套接字(raw) 端口:1.周知端口: 0~1023 2.注册端口: 1024~49151 3.动态端口: 49152~65535 OSI七层协议结构应用层表示层会话层...

2023北京老博会(CBIAIE全国老年产业必参盛会)

CBIAIE北京老博会|把握政策导向&#xff0c;迎合市场需求&#xff0c;引导销售渠道建设&#xff0c;搭建国际化的商业平台&#xff1b; 2023第十届中国&#xff08;北京&#xff09;国际老年产业博览会&#xff08;CBIAIE北京老博会&#xff09; The 2023 tenth China (Beijin…...

【字典转模型 Objective-C语言】

一、点按钮,弹出的这个效果,这实际上是个Label, 这实际上是一个Label,点按钮弹出的这个效果, 设置一个Label的背景色、前景色、透明度、等等, 让它加进来,然后通过动画让它隐藏掉, 这就是,这个效果的实现思路, 咱们这个效果,先稍微往后放一放, 这个并不是重点…...

【LeetCode】剑指 Offer(6)

目录 写在前面&#xff1a; 题目&#xff1a;剑指 Offer 12. 矩阵中的路径 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 写在前面&#xff…...

论文投稿指南——中文核心期刊推荐(法律)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…...

Qt音视频开发15-动态切换解码内核的设计

一、前言 动态切换解码内核这个需求也是源自客户的真实需求&#xff0c;既然是动态切换&#xff0c;那肯定是运行期间切换&#xff0c;而不是通过改变标志位重新编译程序来切换&#xff0c;最开始做的就是这种方式&#xff0c;这样就是实现起来简单&#xff0c;但是用起来不够…...

concurrent-map 和 sync.Map,我该选择哪个?

官方的map并不是线程安全的&#xff0c;如果我们在多线程中并发对一个map进行读写操作&#xff0c;是会引发panic的。解决方案除了使用锁来对map进行保护外&#xff0c;还有两种方式&#xff1a;一&#xff0c;开源项目 concurrent-map 提供了可以用来做并发安全的map二&#x…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...