百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

「初探Dart编程语言」-构建一个成绩查询系统之二

yuyutoo 2024-10-12 00:40 14 浏览 0 评论

「初探Dart编程语言」-构建一个成绩查询系统之一

上一篇文章中,我们定义了一个Repo抽象类,它提供了5种行为,如下图1所示

图1中声明的5个方法由实现者决定具体的实现方式,可以将数据的操作对象存放在内存中,也可以将数据的存放对象放置于数据库中,设置可以将数据存放在网路上。第一篇文章中并没有提供这5个抽象方法的实现代码,本文将以数据存放在内存中为例,实现Repo抽象类所定义的所有方法。

Collection

Dart提供了多种不同的Collection实现方式,有列表(List)、集合(Set)和映射(Map)等。这些数据类型都可以实现存放数据的目的,列表对象可以通过索引的方式快速地访问元素,集合对象对于同一个元素只能存放一份,映射对象则采用键值对的方式存储数据。本项目使用列表对象进行存储数据,实现对数据的“增删改查”四类操作。

save方法

save方法用于新增一条记录并将其保存至列表。下面图2中实现保存成绩对象至当前scores列表,第22行代码传递一个Score对象,Score对象存储了各科的成绩信息,但是,并没有表示此对象的Id值,通过调用私有成员函数_nextId生成一个新的Id值,并将其赋值给Score对象的id成员,见图2中第27行代码。

_nextId函数的名称以下划线为起始字符,这种用法表示此方法为一个私有方法,Dart的私有方法作用范围并不是当前的类,而是这个文件。在同一个文件中的其它类也是可以直接调用_nextId方法的,这样的用法与Java或C++语言是不同的。在下图3中,_nextId方法通过判断scores列表是否为空来决定其返回值,如果当前列表中没有任何内容,那么,_nextId方法的返回值为0,否则,取出scores列表对象中的最后一个元素,将这个元素的Id值进行加1再作为返回值。

remove方法

remove方法用于删除列表对象中特定的元素。下图4中第35行代码调用列表对象的removeWhere方法执行删除操作,但是,removeWhere删除方法的参数为一个断言函数,对于满足这个断言函数的所有元素都会被从scores列表对象中删除。第35行的断言函数通过比较每一个元素的id值是否与remove函数的参数id值相同,如果二者相同,则进行删除操作;否则,保留对应的Score元素。

remove函数的返回值为已删除元素的个数,图4中第34行代码首先记录下列表对象未执行删除操作之前元素的个数,待删除操作完成之后再通过第37行代码计算列表删除操作执行前后的元素个数差,其值就表示remove操作所删除的元素个数。

update方法

update方法用于更新列表中的一个元素。图5中定义了更新函数,此函数含有两个参数:第一个参数id表示待更新的元素id值,第二个参数item表示新的对象。第43行代码调用列表对象的firstWhere方法查找对象id值与参数id值相同元素。如果存在这样的元素,那么执行第45-49行代码将原有对象使用新对象按成员进行逐个赋值,更新完成之后返回1值,表示更新了1条记录;如果通过firstWhere没有找到对应的对象,那么,它将会抛出一个异常,第52行代码将捕获此异常,第53行代码返回0值,表示update方法未对列表中的数据做任何更新。

findOne方法

findOne查找按照Id在列表对象中查找一个元素。图6中第60行代码调用列表firstWhere方法查找符合指定条件的第一个元素,对于findOne方法来说,其断言函数为元素id值与参数id值相同。如果列表中存在这样的元素,那么,firstWhere将返回对应的元素;否则,抛出一个异常,这个异常通过第61行代码被捕获,之后将在第63行代码返回null值。

图6 findOne函数的返回值类型为Score?(注意Score后面的问号),它表示返回值可能为一个Score对象,也可能为一个null值。Dart语言将null视为一个独立的类型,如果没有“?”符号,那么它表示findOne返回值必须为一个合法的Score类型对象,无法使用null值。

findAll方法

findAll方法表示返回列表对象中的所有数据。本例中我们将scores列表对象直接返回即可,无额外的处理逻辑,如下图7所示。

总结

Dart语言Collection提供了不同实现方式的数据类型,可以是列表、集合或映射,每一种类型都有其对应的应用场景。本文使用列表实现了对分数对象的“增删改查”4类操作操作,通过这些例子,我们可以看到,列表对象所内置的方法完全可以满足我们的基本需求,而无需再通过调用第三方库来实现这些常用的功能,由此也可以感受到Dart语言对于开发者来说是一种很友好的编程语言。

「初探Dart编程语言」-构建一个成绩查询系统之一

相关推荐

从零搭建高可用的 MySQL 主从复制架构(基于 Linux 实战指南)

背景在生产环境中,单点MySQL数据库容易成为性能瓶颈或单点故障源。搭建MySQL主从复制架构,可以实现读写分离、高可用,提升系统的整体稳定性与扩展性。...

国外大神成功让Nexus4吃上安卓6.0:基本可正常使用

IT之家讯10月9日消息谷歌已经于10月6日正式开启了Nexus设备Android6.0Marshmallow系统的OTA升级推送。根据之前报道的消息,老一批的Nexus手机如Nexus4/Ne...

急死!CPU被挖矿了,却找不到哪个进程

CPU起飞了最近有朋友在群里反馈,自己服务器的CPU一直处于高占用状态,但用...

甜甜的安卓5.0却让手机ROOT难度大大增加

IT之家(www.ithome.com):甜甜的安卓5.0却让手机ROOT难度大大增加对设备进行ROOT,毫无疑问,这是安卓最美丽的地方之一,不管是对于消费者来说还是开发者。Root意味着掌握更多的权...

Linux基础知识(linux基础知识点及答案)

系统目录结构/bin:命令和应用程序。/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev:dev是Device(设备)的缩写,该目录...

Linux 内核 6.15 发布:内存、网络、文件系统全面升级!

核心增强:性能与安全双飞升!Linux内核6.15的正式版!虽然因一个临门一脚的Bug晚了几小时,但最终还是带着一堆硬核更新闪亮登场!...

AlmaLinux 9.6 发布,新增功能亮点纷呈!

距离上一版本AlmaLinux9.5发布六个月后,基于5.14内核的AlmaLinux正式宣布其企业级Linux发行版的9.x系列第六个更新——AlmaLinux9.6(Sag...

理解Linux下的SELinux(linux seccomp)

理解Linux下的SELinux长久以来,每当遇到授权问题或者新安装的主机,我的第一反应是通过setenforce0命令禁用SELinux,来减少产生的权限问题,但是这并不是一个良好的习惯。这篇文章...

3个简单实用的网址导航网站(简洁的网站导航)

在我们使用电脑上网的时候经常会访问某些常用的网站,每一次都去通过搜索访问就比较浪费时间,添加在浏览器收藏夹不方便在其他电脑使用。找一个好用的网址导航网站就可以帮我们把所有常用的网址集合在一个页面,方便...

整点不一样的网站制作教程,教你怎么用网站模板制作网站#...

网站制作教程整点不一样的网站。不要再问我网站制作教程了,今天给你整个怎么用网站模板制作网站的教程。·1、登录账号进入后台。·2、选择模板。自助建站平台通常提供各种各样的网站模板,可以根据自己的需求和喜...

5个最好的外贸独立站模板,让你的网站更加专业

作为外贸行业从业者,一个专业且具有吸引力的网站是必不可少的。然而,建立一个专业的网站需要耗费大量的时间和精力,尤其是在设计和开发方面。为了帮助您缩短网站建设的时间和成本,以下是5个最好的外贸独立站模板...

网站建设模板 **网站建设模板:全面指南与创意构思*

网站建设模板**网站建设模板:全面指南与创意构思**随着互联网技术的迅猛发展,网站已成为企业、机构和个人展示自身形象、传递信息、实现交流的重要平台。本文将详细介绍网站建设的基本模板,并提供创意...

原地封神!一个只用套模板即可制作电子相册的网站

对于忙碌的年轻人来说,一键操作的模板意味着无需复杂的操作步骤,就能轻松制作出精美的电子相册。但是一个好的工具也是事关重要,最近发现了一款非常适合年轻人的模板---FLBOOK在线制作电子杂志平台,只需...

跨屏建站网kpfree免费网站模板2023.1.14发布更新

跨屏建站网kpfree免费网站模板2023.1.14发布更新,摒弃了之前的卡片式设计,采用了移动优先的设计原则,简化了页面设计风格,优化了代码,优化了图片质量,确保网页打开速度。砍掉了一些花哨而无用的...

响应式大型电子企业集团类网站模板源码-青柠资源网qnziyw.cn

模板信息:模板编号:10964模板编码:UTF8模板颜色:红色模板分类:科技、电子、数码设备适合行业:电子设备类企业模板介绍:本模板自带eyoucms内核,无需再下载eyou系统,原创设计、手工书写D...

取消回复欢迎 发表评论: