【Dart】=> [05] Dart初体验-函数

文章目录

    • 函数
    • 函数特点
    • 可选和默认参数
    • 函数对象
    • 箭头函数
    • 匿名函数
    • 综合案例

能够定义并使用Dart函数

学习内容:

  1. 函数定义
  2. 可选和默认参数
  3. 函数对象
  4. 箭头函数
  5. 匿名函数

函数

函数定义

Dart函数的结构:
在这里插入图片描述

调用函数:
在这里插入图片描述

案例:定义计算任意两个整数之和的函数,并返回计算结果

在这里插入图片描述

函数特点

  1. 返回值类型和参数类型都可以省略
  2. 函数都有返回值,如果没有明确指定,默认返回 null
void main() {
  //调用函数
  sum1();

  int ret = sum2(10, 20);
  print(ret);
}

int sum2(int a, int b){
  int ret = a + b;
  return ret;
}

在这里插入图片描述
在这里插入图片描述

可选和默认参数

  1. 可选命名参数:

在这里插入图片描述

void main() {
  printString('zzm', age: 15);
}

// 可选命名参数
void printString(String name, {int? age, String? location = '昌平区'}) {
  print('$name - $age - $location');
}

**注意点:**可选参数必须是可以为空的

  1. 默认参数:在这里插入图片描述

函数对象

在Dart中,一切都是对象,函数也是对象,类型是Function

函数可作为对象赋值给其他变量

在这里插入图片描述

在这里插入图片描述

函数可作为参数传递给其他函数

在这里插入图片描述
在这里插入图片描述

void main() {
  // 定义一个变量接收函数
  // var f = funcDemo1;
  Function f = funcDemo1;
  f();

  funcDemo2(funcDemo3);
}

// 函数可以作为对象赋值给其他变量
void funcDemo1() {
  print('funcDemo1');
}

// 函数可以作为参数传递给其他函数
void funcDemo2(Function func) {
  // 调用外界传入的函数
  func();
}

// 定义作为参数的函数: 把funcDemo3传入到funcDemo2
void funcDemo3() {
  print('funcDemo3');
}

箭头函数

函数体只包含一个表达式时,可以使用箭头函数进行简写
在这里插入图片描述

简写在这里插入图片描述

提示:=> 表达式 是对 { return 表达式 } 的简写

void main() {
  int ret1 = sum1(10, 20);
  print(ret1);

  int ret2 = sum2(30, 40);
  print(ret2);
}

int sum1(int a, int b) {
  return a + b; // 函数体只有一个表达式
}

// 使用箭头函数简写只有一个表达式的函数体
int sum2(int a, int b) => a + b;

匿名函数

匿名函数是一种没有函数名称的函数。
但是和其他函数一样,它也有形参列表,也可以有可选参数。
在这里插入图片描述

特点:

  • 仅在调用时,才临时创建函数对象,调用完立即释放,节省内存空间

使用场景:

  • 可赋值给变量,通过变量进行调用
  • 可当做参数传递给其他函数去调用(回调函数)
    在这里插入图片描述
void main() {
  // 匿名函数
  // 匿名函数赋值给变量,并调用
  Function f = () {
    print('这是一个匿名函数');
  };
  f();

  // 可以作为参数传递给其他函数去调用(回调函数)
  funcDemo(() {
    print('这个匿名函数是个参数');
  });
}

// 定义一个接收函数作为参数的函数
void funcDemo(Function func) {
  func();
}

综合案例

  1. 案例:计算购物车商品是否全选
// 准备购物车数据
  List carts = [
    {"count": 2, "price": 10.0, "selected": true},
    {"count": 1, "price": 30.0, "selected": false},
    {"count": 5, "price": 20.0, "selected": true}
  ];
  1. 核心逻辑:只要有一个商品未勾选那就是非全选

// 案例:计算购物车商品是否全选
// 核心逻辑:只要有任何一个商品是未勾选的,那么就是非全选
bool getSelectedState(List carts) {
  // 购物车初始的状态:默认是全选
  bool isSelectedAll = true;

  carts.forEach((element) {
    bool selected = element['selected'];
    // 核心代码:只要有任何一个商品是非勾选的,则购物车就是非全选
    if (selected == false) {
      isSelectedAll = false;
    }
  });

  return isSelectedAll;
}

整体代码

void main() {
// 准备购物车数据
  List carts = [
    {"count": 2, "price": 10.0, "selected": true},
    {"count": 1, "price": 30.0, "selected": false},
    {"count": 5, "price": 20.0, "selected": true}
  ];

  bool isSelectedAll = getSelectedState(carts);
  if (isSelectedAll) {
    print('全选');
  } else {
    print('非全选');
  }
}

// 案例:计算购物车商品是否全选
// 核心逻辑:只要有任何一个商品是未勾选的,那么就是非全选
bool getSelectedState(List carts) {
  // 购物车初始的状态:默认是全选
  bool isSelectedAll = true;

  carts.forEach((element) {
    bool selected = element['selected'];
    // 核心代码:只要有任何一个商品是非勾选的,则购物车就是非全选
    if (selected == false) {
      isSelectedAll = false;
    }
  });

  return isSelectedAll;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/325903.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java SSM框架实现学生综合考评管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现学生学生综合考评管理系统演示 摘要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 学生综合考评管理系统,主要的模块包括查看;管理员;个…

[GXYCTF2019]Ping Ping Ping

1.访问页面,提示传参为ip。2.?ip明显存在命令执行注入,使用 ; 或者 | 闭合上一条命令。 经过fuzz测试,过滤了空格、bash字符、flag字符、以及一些特殊符号。?ip;ls时,发现flag.php就在当前目录下。 3.构造POC,获取…

知识分享:一文读懂AIGC与大模型

什么是大模型? 关于大模型,有学者称之为“大规模预训练模型”(large pretrained language model),也有学者进一步提出”基础模型”(Foundation Models)的概念。 “小模型”:针对特定应用场景需求进行训练&a…

Vue3中使用自定义指令

一,自定义指令: 应用场景:禁用按钮多次点击 1.vue2 a. src/libs/preventClick.js import Vue from vue const preventClick Vue.directive(preventClick, {inserted: function (el, binding) {el.addEventListener(click, () > {if (!el…

05.阿里Java开发手册——前后端规约

【强制】前后端交互的 API,需要明确协议、域名、路径、请求方法、请求内容、状态码、响 应体。 说明: 协议:生产环境必须使用 HTTPS。路径:每一个 API 需对应一个路径,表示 API 具体的请求地址: a&#xff…

【SpringBoot3】Spring Boot 3.0 介绍以及新特性

文章目录 一、Spring Boot 3.01、介绍2、Spring Boot 核心概念3、Spring Boot 3.0 新特性 二、Spring Boot Starter1、介绍2、Starter 命名规则3、官方提供了哪些Starter 三、spring-boot-starter-parent 说明四、示例:创建web项目参考 一、Spring Boot 3.0 1、介绍…

【经典算法】有趣的算法之---遗传算法梳理

every blog every motto: You can do more than you think. 0. 前言 遗传算法是一种基于自然选择和遗传机制的优化算法,因此它通常被用于求解各种最优化问题,例如函数优化、特征选择、图像处理等。 一言以蔽之: 将数学中的优化问题&#xf…

compose部署

目录 本章目标: 自定义网络数据库 正文: 注:创建两个网络mynet和mynetwork 1. 自定义网络-mynet 创建自定义网络: docker network create --subnet172.33.0.0/16 mynet 查看网络信息 docker network list 查看指定网络的详细信…

Leetcode1441.用栈操作构建数组

文章目录 题目原题链接思路代码 题目 给你一个数组 target 和一个整数 n。每次迭代,需要从 list { 1 , 2 , 3 …, n } 中依次读取一个数字。 请使用下述操作来构建目标数组 target : “Push”:从 list 中读取一个新元素, 并将其…

Java中常用的加密算法及其实现原理详解

目录 1、前言 2、对称加密算法 2.1 对称加密算法的工作原理 2.2 DES、AES、RC4算法的原理及其在Java中的实现 2.3 对称加密算法的优缺点 3、非对称加密算法 3.1 非对称加密算法的工作原理 3.2 RSA、DSA算法的原理及其在Java中的实现 3.3 非对称加密算法的优缺点 4、散…

Lamp架构从入门到精通

系列文章目录 lnmp架构 lnmp架构-nginx负载均衡以及高可用 系列文章目录一、源码编译configure(检测预编译环境是否可行)makemake install优化关闭Debug 二、 nginx负载均衡三、nginx的高并发nginx work数量的设定nginx work进程与cpu的静态绑定压力测试nginx高并发修改操作系…

这三款内网管理监控软件让你事半功倍

在当今高度信息化的时代,企业内部网络(内网)已经成为企业运营和发展的重要支撑。 然而,随着内网规模的扩大和复杂性的增加,内网的管理和监控也变得越来越困难。 为了提高内网的管理效率和工作效率,许多企…

仅用三张图片实现任意场景三维重建:ReconFusion

论文题目: ReconFusion: 3D Reconstruction with Diffusion Priors 论文作者: Rundi Wu, Ben Mildenhall, Philipp Henzler, Keunhong Park, Ruiqi Gao, Daniel Watson, Pratul P. Srinivasan, Dor Verbin, Jonathan T. Barron, Ben Poole, Aleksande…

exFAT文件系统识别不了怎么办?

一般存储驱动器通常会使用几种文件系统,其中比较常见的是FAT32、NTFS和exFAT,那么它们之间有什么区别呢?exFAT文件系统识别不了怎么办? 常用文件系统之间的区别有哪些? FAT32文件系统:它是一个兼容性非常强…

关联系统-智能集成制动系统IPB

整车制动原理 在讲述IPB之前,需要先了解一下整车的制动原理: 如上图所示: 驾驶员踩下制动踏板,由于制动踏板和真空助力器连接,踏板下降的同时会导致真空助力器内压力增大,真空助力器推动制动液进入ESP&am…

九、Qt C++ 数据库开发

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时,几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计》 《九、Qt …

2024 1.6~1.12 周报

一、上周工作 论文研读 二、本周计划 思考毕业论文要用到的方法或者思想,多查多看积累可取之处。学习ppt和上周组会内容、卷积神经网络。 三、完成情况 1. 数据训练的方式 1.1 迁移学习 迁移学习是一种机器学习方法,把任务 A 训练出的模型作为初始模…

【剑指offer】替换空格

👑专栏内容:力扣刷题⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、题目描述1、题目2、示例 二、题目分析1、replaceAll 方法2、StringBuilder3、临时数组 一、题目描述 1、题目 剑指of…

【Python3】【力扣题】387. 字符串中的第一个唯一字符

【力扣题】题目描述: 【Python3】代码: 1、解题思路:遍历字符串,依次判断元素在字符串中的个数是否为1,第一个为1的返回该元素的索引号,若整个字符串都没有个数为1的,则返回-1。 知识点&#…

武汉灰京文化:抓住用户心理,游戏推广不可或缺的前提

在当今激烈竞争的游戏市场中,了解目标用户成为游戏推广的不可或缺的前提。不同类型的游戏适合不同的用户群体,因此通过深入研究用户画像,准确定位目标用户群体,成为游戏成功推广的关键一环。游戏推广不仅仅是让更多的人知道游戏的…