Flutter基础 -- Dart 语言 -- 注释函数表达式
目录
1. 注释
1.1 单行注释
1.2 多行注释
1.3 文档注释
2. 函数
2.1 定义
2.2 可选参数
2.3 可选参数 默认值
2.4 命名参数 默认值
2.5 函数内定义
2.6 Funcation 返回函数对象
2.7 匿名函数
2.8 作用域
3. 操作符
3.1 操作符表
3.2 算术操作符
3.3 相等相关的操作符
3.4 类型判定操作符
3.5 条件表达式
3.6 位和移位操作符
3.7 级联操作符
3.8 其他操作符
4. 流程控制
5. 异常
错误的两种类型
5.1 Exception 类
5.2 Error 类
5.3 抛出错误
5.4 捕获错误
5.5 重新抛出错误以及finally
5.6 自定义异常
1. 注释
1.1 单行注释
// Symbol libraryName = new Symbol('dart.core');
1.2 多行注释
/*
* Symbol
*
Symbol libraryName = new Symbol('dart.core'); MirrorSystem mirrorSystem = currentMirrorSystem(); LibraryMirror libMirror = mirrorSystem.findLibrary(libraryName); libMirror.declarations.forEach((s, d) => print('$s - $d'));
*/
一般用在需要说明 类 函数 功能 输入 输出
1.3 文档注释
/// `main` 函数
///
/// 符号
/// 枚举
///
void main() {
...
}
类、函数 请用 /// 方式定义,后期导出文档有帮助
2. 函数
2.1 定义
int add(int x) {return x + 1;
}调用
add(1);
2.2 可选参数
int add(int x, [int? y, int? z]) {if (y == null) {y = 1;}if (z == null) {z = 1;}return x + y + z;
}调用
add(1, 2);
可选参数:
使用方括号 [] 来定义可选参数 y 和 z。调用函数时可以选择传入或者不传入这两个参数。
可空类型:
int? 表示 int 类型的值可以是 null。如果没有使用 int?,那么 Dart 不允许把 null 赋值给该参数。
默认值逻辑:
在函数内部,通过 if (y == null) 和 if (z == null) 检查 y 和 z 是否为 null,如果是则赋值为默认的 1。
2.3 可选参数 默认值
int add(int x, [int y = 1, int z = 2]) {return x + y;
}调用
int(1, 2);
就是cpp的缺省值
2.4 命名参数 默认值
int add({int x = 1, int y = 1, int z = 1}) {return x + y + z;
}调用
int(x: 1, y: 2);
这个会比可选参数更灵活,可以调用的时候再指定传参
2.5 函数内定义
void main(){int add(int x){return x + x;}print(add(1));
}
cpp的就是lambda
2.6 Funcation 返回函数对象
Function makeAdd(int x) {return (int y) => x + y;
}调用
var add = makeAdd(1);
print(add(5));
这里是add接收了一个函数对象,然后在print里面调用了返回的函数对象
2.7 匿名函数
下面代码定义了只有一个参数 item 且没有参数类型的匿名方法。 List 中的每个元素都会调用这个函数,打印元素位置和值的字符串:
const list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {print('${list.indexOf(item)}: $item');
});

箭头函数 如果只有一个表达式
list.forEach((item) => print('${list.indexOf(item)}: $item'));
2.8 作用域
下面是一个嵌套函数中变量在多个作用域中的示例:
bool topLevel = true;void main() {var insideMain = true;void myFunction() {var insideFunction = true;void nestedFunction() {var insideNestedFunction = true;assert(topLevel);assert(insideMain);assert(insideFunction);assert(insideNestedFunction);}}
}
注意 nestedFunction() 函数可以访问包括顶层变量在内的所有的变量。简单说就是被包含的作用域内可以访问包含其的外部变量
3. 操作符
3.1 操作符表

优先级顺序 上面左边 优先级高于 右边下面
3.2 算术操作符

3.3 相等相关的操作符

3.4 类型判定操作符

int a = 123;String b = 'ducafecat';String c = 'abc';print(a as Object);print(b is String);print(c is! String);
3.5 条件表达式

bool isFinish = true;String txtVal = isFinish ? 'yes' : 'no';bool isFinish;isFinish = isFinish ?? false;orisFinish ??= false;

3.6 位和移位操作符

3.7 级联操作符

StringBuffer sb = StringBuffer();sb..write('hello')..write('word')..write('\n')..writeln('doucafecat');
如果没有级联操作符,就需要 sb.write(...);sb.write(...);....
3.8 其他操作符

String a;print(a?.length);
4. 流程控制
if else;for;while;do while;switch case;break;continue;相信这些就不用博主多说了哈
值得一提的是 continue 有一点不一样
continue 跳转指定位置(就像cpp的go to,新增了这个功能)
String command = "close";
switch (command) {case "open":print("open");break;case "close":print("close");continue doClear;case "close2":print("close2");continue doClear;doClear:case "doClose":print("doClose");break;default:print("other");
}
5. 异常
错误的两种类型
5.1 Exception 类
Exception class

可以捕获,可以安全处理
5.2 Error 类
Error class

一般用在不可恢复,容易崩溃的情况
5.3 抛出错误
// Exception 对象throw new FormatException('这是一个格式错误提示');// Error 对象throw new OutOfMemoryError();// 任意对象throw '这是一个异常';
5.4 捕获错误
try {// throw new FormatException('这是一个格式错误提示');throw new OutOfMemoryError();} on OutOfMemoryError {print('没有内存了');} catch (e) {print(e);}
5.5 重新抛出错误以及finally
try {throw new OutOfMemoryError();} on OutOfMemoryError {print('没有内存了');rethrow;} catch (e) {print(e);} finally {print('end');}
try里面是抛出错误,on是捕获特定错误,catch是捕获所有错误,retgrow是重新抛出异常,finally是不管有没有错都会走的!
5.6 自定义异常
implements关键字可以自定义异常
class DioError implements Exception {DioError(this.message, this.type);final String message;final String type;@overrideString toString() {return 'DioError{message: $message, type: $type}';}
}void main(List<String> args) {throw DioError("error", "type");
}
创作不易,希望读者三连支持 💖
赠人玫瑰,手有余香 💖
相关文章:
Flutter基础 -- Dart 语言 -- 注释函数表达式
目录 1. 注释 1.1 单行注释 1.2 多行注释 1.3 文档注释 2. 函数 2.1 定义 2.2 可选参数 2.3 可选参数 默认值 2.4 命名参数 默认值 2.5 函数内定义 2.6 Funcation 返回函数对象 2.7 匿名函数 2.8 作用域 3. 操作符 3.1 操作符表 3.2 算术操作符 3.3 相等相关的…...
“仿RabbitMQ实现消息队列”---整体架构与模块说明
顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、概念性框架理解 我们主要实现的内容: 1.Broker服务器:消息队列服务器(服务端&…...
springboot如何快速接入minio对象存储
1.在项目中添加 Minio 的依赖,在使用 Minio 之前,需要在项目中添加 Minio 的依赖。可以在 Maven 的 pom.xml 文件中添加以下依赖: <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId>&l…...
第六届“智能设计+运维”国产工业软件研讨会暨2024年天洑软件用户大会圆满召开
2024年5月23-24日,第六届“智能设计运维”国产工业软件研讨会暨2024年天洑软件用户大会在南京举办。来自国产工业软件研发企业、制造业企业、高校、科研院所的业内大咖,能源动力、船舶海事、车辆运载、航空航天、新能源汽车、动力电池、消费电子、石油石…...
05.k8s弹性伸缩
5.k8s弹性伸缩 k8s弹性伸缩,需要附加插件heapster监控 弹性伸缩:随着业务访问量的大小,k8s系统中的pod比较弹性,会自动增加或者减少pod数量; 5.1 安装heapster监控 1:上传并导入镜像,打标签 ls *.tar.gz for n in ls *.tar.gz…...
【数据结构】详解二叉树
文章目录 1.树的结构及概念1.1树的概念1.2树的相关结构概念1.3树的表示1.4树在实际中的应用 2.二叉树的结构及概念2.1二叉树的概念2.2特殊的二叉树2.2.1满二叉树2.2.2完全二叉树 2.3 二叉树的性质2.4二叉树的存储结构2.4.1顺序结构2.4.2链表结构 1.树的结构及概念 1.1树的概念…...
MapDB:轻量级、高性能的Java嵌入式数据库引擎
MapDB:轻量级、高性能的Java嵌入式数据库引擎 在今天的软件开发中,嵌入式数据库因其轻便、高效和易于集成而备受欢迎。对于Java开发者来说,MapDB无疑是一个值得关注的选项。MapDB是一个纯Java编写的嵌入式数据库引擎,它提供了高性…...
Rye: 一个革新的Python包管理工具
文章目录 Rye: 一个革新的Python包管理工具Rye的诞生背景Rye的核心特性Rye的安装与使用Rye的优势与挑战Rye的未来展望结语 Rye: 一个革新的Python包管理工具 在Python生态系统中,包管理一直是一个复杂且令人头疼的问题。随着Python社区的不断发展,出现了…...
如何在C#代码中判断当前C#的版本和dotnet版本
代码如下: using System.Reflection; using System.Runtime.InteropServices;var csharpVersion typeof(string).Assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false).OfType<AssemblyFileVersionAttribute>().FirstOrDefault()?.…...
Linux 36.3@Jetson Orin Nano之系统安装
Linux 36.3Jetson Orin Nano之系统安装 1. 源由2. 命令行烧录Step 1:下载Linux 36.3安装程序Step 2:下载Linux 36.3根文件系统Step 3:解压Linux 36.3安装程序Step 4:解压Linux 36.3根文件系统Step 5:安装应用程序Step …...
案例实践 | 基于长安链的首钢供应链金融科技服务平台
案例名称-首钢供应链金融科技服务平台 ■ 建设单位 首惠产业金融服务集团有限公司 ■ 用户群体 核心企业、资金方(多为银行)等合作方 ■ 应用成效 三大业务场景,共计关联29个业务节点,覆盖京票项目全部关键业务 案例背景…...
Vue3实战笔记(55)—Vue3.4新特性揭秘:defineModel重塑v-model,拥抱高效双向数据流!
文章目录 前言defineModel() 基本用法总结 前言 v-model 可以在组件上使用以实现双向绑定。 从 Vue 3.4 开始,推荐的实现方式是使用 defineModel() 宏 defineModel() 基本用法 定义defineModel(): <!-- Child.vue --> <script setup> con…...
C++ | Leetcode C++题解之第123题买卖股票的最佳时机III
题目: 题解: class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();int buy1 -prices[0], sell1 0;int buy2 -prices[0], sell2 0;for (int i 1; i < n; i) {buy1 max(buy1, -prices[i]);sell1 max(…...
微信小程序中Button组件的属性值和用法详解
在微信小程序开发中,Button组件是非常常用的UI组件之一,它可以让用户进行交互操作,比如提交表单、跳转页面等。了解Button组件的属性值和用法对于开发者来说至关重要。 1. Button组件简介 简要介绍Button组件在小程序中的作用和重要性&…...
等保测评 | 等保测评简介及流程具体是什么?
等保测评是指对信息系统进行安全性评估和测试,以确保其符合国家相关等级保护要求。在当前信息时代,各类机构和企业面临着日益严峻的网络安全风险,等保测评成为了保障信息系统安全的重要手段之一。本文将介绍等保测评的基本概念、流程和重要性…...
CompassArena 司南大模型测评--代码编写
测试角度 要说测试模型,对咱们程序员来说,那自然是写代码的能力强不强比较重要了。那么下面我们以 leetcode 中的一道表面上是困难题的题目来考考各家大模型,看看哪个才应该是咱们日常写程序的帮手。 部分模型回答 问题部分如下截图&#…...
叉积和法向量学习笔记
目录 叉积用的内积 相似点 给定平面上的两个向量 A 和 B,叉积和法向量相等吗 理解这点的关键: 结论: 叉积判断平面内两个向量是否相交 叉积(Cross Product)和法向量(Normal Vector)确实有…...
YZW900规格书
title: “深圳市沃进科技有限公司” 深圳市沃进科技有限公司 TOP视图 特性 异地组网,远程访问有线/无线备份单模双卡备份5G转有线,5G转WIFI2.4G5.8G双频WIFI三网口,WAN/LAN可切换软硬件看门狗智能防掉线云平台、客户端远程管理安装支架安装铝…...
9岁学生学什么编程好一些:探索编程启蒙的奥秘
9岁学生学什么编程好一些:探索编程启蒙的奥秘 在数字时代,编程已逐渐成为一项基本技能。对于9岁的学生来说,选择适合的编程课程或平台,对于培养逻辑思维、创新思维以及解决问题的能力至关重要。那么,9岁学生学什么编程…...
Java反射实战指南:反射机制的终极指南
1. 反射机制简介 在Java中,反射机制提供了一种强大的工具,用于在运行时检查类、接口、字段和方法。但它的重要性不止于此,它允许程序动态加载、探索和使用编译时完全未知的代码。这种能力是Java语言支持的一种“动态”特性,使得J…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
