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

Flutter---函数

怎么理解Flutter中的函数?Dart是一门面向对象的编程语言,所以函数也是对象,而函数属于Function类型,所以Dart可以把函数当成变量传给另外一个函数,也可以把Dart类的实例当作方法来调用。

一.函数赋值给变量

在 Dart 中,你可以将一个函数直接赋值给一个变量,这个变量的类型就是 Function。之后,你可以通过这个变量来调用函数。

// 1. 定义一个普通的函数
String greet(String name) {return 'Hello, $name!';
}void main() {// 2. 将函数 greet 赋值给变量 myFunction// 注意:这里是 greet,不是 greet(),我们赋值的是函数本身,而不是调用它的结果Function myFunction = greet; // 3. 通过变量调用函数print(myFunction('Alice')); // 输出:Hello, Alice!print(myFunction('Bob'));   // 输出:Hello, Bob!
}

在这个例子中,myFunction变量就成为了 greet函数的一个引用,你可以像使用原函数一样使用它。

二.函数作为参数传递

这是函数式编程的一个核心概念,非常强大。你可以把一个函数(通常称为回调函数)作为参数传递给另一个函数,让后者在适当的时机(比如完成某项任务后、或者某个事件发生时)来调用你传入的函数。

// 1. 定义一个函数,它接受一个字符串和一个函数作为参数
// 第二个参数 `action` 是一个 Function 类型,它自己接受一个 String 参数并不返回内容(void)
void processString(String message, Function(String) action) {// 在 processString 函数内部,调用传入的 action 函数action(message.toUpperCase()); // 例如,将消息转为大写后处理
}void main() {// 2. 定义一个匹配 `Function(String)` 签名的函数,比如一个简单的打印函数void myPrint(String text) {print('打印结果: $text');}// 3. 调用 processString,并将 myPrint 函数作为参数传入processString('This is a message', myPrint); // 最终输出:打印结果: THIS IS A MESSAGE,又大写又打印// 4. 更常见的做法:直接传入一个匿名函数(或箭头函数)processString('Another message', (text) {print('匿名函数处理: $text');});// 输出:匿名函数处理: ANOTHER MESSAGE// 使用箭头函数简写processString('Last message', (text) => print('箭头函数: $text'));// 输出:箭头函数: LAST MESSAGE
}

这种模式在 Flutter 中极其常见,例如按钮的 onPressed参数就是接受一个回调函数,用来定义按钮被点击时的行为。

三.函数作为返回值

一个函数可以返回另一个函数。返回的函数通常形成了一个“闭包”,意味着它可以记住并访问创建它的词法作用域中的变量,即使函数在其原始作用域之外被调用。

// 1. 定义一个函数,它返回一个 Function
// 返回的函数类型是:int Function(int) (接受一个int参数,返回一个int)
Function makeAdder(int addBy) {// 2. 在 makeAdder 内部定义并返回一个匿名函数int adder(int number) {return addBy + number;}return adder; // 返回这个函数,注意不是调用它
}void main() {// 3. 调用 makeAdder 来“制造”特定的加法函数var addTwo = makeAdder(2);   // 得到一个“加2”的函数var addTen = makeAdder(10);  // 得到一个“加10”的函数// 4. 使用这些被返回的函数print(addTwo(3));   // 输出:5 (3 + 2)print(addTen(3));   // 输出:13 (3 + 10)print(addTwo(10));  // 输出:12 (10 + 2)
}

这里,addTwo和 addTen就是被“制造”出来的新函数。它们“记住”了创建时传入的 addBy值(分别是2和10)。

四.类的实例作为方法调用

通过在一个类中实现 call()方法,你可以让这个类的实例像函数一样被调用。这为你的对象提供了类似函数的行为。

// 1. 定义一个类,并实现 call 方法
class Greeter {final String greeting;Greeter(this.greeting); // 构造函数// 2. 实现 call 方法。当实例被“调用”时,这个方法会被执行String call(String name) {return '$greeting, $name!';}
}void main() {// 3. 创建类的实例var formalGreeter = Greeter('Hello');var casualGreeter = Greeter('Hi there');// 4. 像调用函数一样调用这些实例!print(formalGreeter('Alice'));    // 输出:Hello, Alice!print(casualGreeter('Bob'));       // 输出:Hi there, Bob!// 当然,你仍然可以像普通对象一样使用它们print(formalGreeter.greeting);     // 输出:Hello
}

这种方式让你的对象在具备数据和状态(类的普通属性)的同时,也拥有了可执行的行为(call方法),非常灵活。

http://www.dtcms.com/a/601153.html

相关文章:

  • 《Flutter全栈开发实战指南:从零到高级》- 13 -状态管理GetX
  • HarmonyOS:ArkTS 页导航
  • 网站开发要学哪些国际跨境电商平台排名
  • 万网站长seo外链优化
  • 【Algorithm】前缀和算法
  • 信息架构学视角下的个人商业操作系统:Notion中央化控制台的系统设计
  • Java版社交系统/聊天系统/im/即时通信/社交通讯
  • 秋招备战day8
  • 网站推广的公司哪家好在百度上做个网站多少合适
  • 网站和域名的区别哪个门户网站做推广好
  • JavaScript 中被遗忘的关键字(with)
  • MySQL: 数据库性能优化核心要素:硬件选型与配置策略
  • 支付宝网站接口申请浙江省住房建设厅网站首页
  • C++笔记-26-类模板
  • SAP FICO工单周毛利报表
  • 聚美网站开发开题报告织梦帝国wordpress
  • SpringCloud03-Eureka02-搭建Eureka服务
  • PySide6/PyQt Ctrl 滚轮 实现文本缩放功能
  • 南通企业网站建设网络营销培训哪个好点
  • Elasticsearch-4--倒排索引的原理?
  • 一个基于Python Streamlit sqlite3 的销售单管理系统,提供商品管理、客户管理、销售单管理及打印,和应收对账单等功能
  • 网站权重是什么华大基因背景调查
  • 华为桌面图标模糊问题解决方案
  • MotionTrans: 从人类VR数据学习机器人操作的运动级迁移
  • [Dify 实战案例] 构建一个 CV 内容优化与润色助手:让 AI 成为你的简历教练
  • 【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 B
  • Kanass实战教程系列(3) - 项目经理如何使用kanass有效管理项目
  • 成都网站建设 网络公司建设工程中标查询网站
  • C语言编译程序属于应用软件 | 理解编译原理与应用场景
  • 蛋糕网站模板汕头网络营销公司