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

dart 学习 之 Getters and setters

前言

任何需要对属性进行更多控制而不是允许简单字段访问的时候,你都可以自定义 getter 和 setter。

正文

讲解

Getter(获取器)和Setter(设置器)是面向对象编程中用于控制对类属性访问的特殊方法。Getter用于获取属性的值,而Setter用于设置属性的值。它们允许你在属性访问过程中添加额外的逻辑,例如验证输入、计算属性或记录属性访问。在你提供的示例中,你展示了如何在Dart编程语言中定义Getter和Setter。

首先,让我们来看看Getter的示例:

class MyClass {int _aProperty = 0;// Getter for aPropertyint get aProperty => _aProperty;
}

在上述示例中,我们创建了一个名为_aProperty的私有属性,并定义了一个名为aProperty的Getter。Getter的定义方式是在属性名称前面添加get关键字,后跟Getter的名称。在Getter内部,我们简单地返回了_aProperty的值。这允许外部代码通过myInstance.aProperty来访问_aProperty的值,就像访问普通属性一样,但实际上是通过Getter方法。

接下来,让我们来看看Setter的示例:

class MyClass {int _aProperty = 0;// Setter for aPropertyset aProperty(int value) {if (value >= 0) {_aProperty = value;}}
}

在这个示例中,我们定义了一个名为aProperty的Setter。Setter的定义方式是在属性名称前面添加set关键字,后跟Setter的名称。在Setter内部,我们可以添加额外的逻辑以控制属性的赋值。在这里,我们检查传入的值是否大于等于0,如果是,则将其赋值给_aProperty。这意味着外部代码可以通过myInstance.aProperty = newValue来设置_aProperty的值,但Setter允许我们在赋值时添加验证或其他逻辑。

总结一下,Getter和Setter是用于控制属性访问的特殊方法,允许你在获取和设置属性值时添加额外的逻辑。Getter用于获取属性的值,Setter用于设置属性的值。这些机制有助于封装属性并确保属性值的合法性。在示例中,你展示了如何在Dart中定义Getter和Setter,但这些概念在许多其他面向对象编程语言中也是通用的。

练习

想象你有一个购物车类,其中有一个私有的 List 类型的 prices 属性。添加以下内容:

一个名为 total 的 getter,用于返回总价格。

只要新列表不包含任何负价格, setter 就会用新的列表替换列表(在这种情况下,setter 应该抛出 InvalidPriceException)。

答案:

class InvalidPriceException {}class ShoppingCart {List<double> _prices = [];double get total => _prices.fold(0, (e, t) => e + t);set prices(List<double> value) {if (value.any((p) => p < 0)) {throw InvalidPriceException();}_prices = value;}
}

相关文章:

dart 学习 之 Getters and setters

前言 任何需要对属性进行更多控制而不是允许简单字段访问的时候&#xff0c;你都可以自定义 getter 和 setter。 正文 讲解 Getter&#xff08;获取器&#xff09;和Setter&#xff08;设置器&#xff09;是面向对象编程中用于控制对类属性访问的特殊方法。Getter用于获取属…...

使用融云 CallPlus SDK,一小时实现一款 1V1 视频应用

9 月 21 日&#xff0c;融云直播课 社交泛娱乐出海最短变现路径如何快速实现一款 1V1 视频应用&#xff1f; 欢迎点击小程序报名~ 1V1 音视频、远程服务类应用的实现利器——融云 CallPlus SDK 上线&#xff01; 关注【融云全球互联网通信云】了解更多 作为新一代音视频通话场…...

Redis Part1

单体架构&#xff1a;一台Web服务器、一台数据库服务器。 1.了解NoSql 什么是Nosql&#xff1f; NoSQL&#xff0c;即Not-Only-SQL&#xff0c;意思就是我们干事情不能只用SQL&#xff0c;泛指非关系型的数据库&#xff01;NoSQL定位&#xff1a;作为关系型数据库的补充&am…...

代理HTTP使用不当会出现哪些问题?如何正确使用代理服务?

代理HTTP是一种常见的网络代理方式&#xff0c;它为客户端和服务器之间提供中间层&#xff0c;转发上下游的请求和响应。正确使用代理HTTP可以提高采集效率、增加网络安全性、加速网络速度、保护用户隐私。但是&#xff0c;使用不当就难以达到预期的效果&#xff0c;在使用代理…...

利用芯片74hc165为单片机增加输入扩展端口proteus仿真arduino

我们前面的博文《输入端口少如何扩展&#xff1f;74hc148或74ls148级联在arduino中实现16转4的应用》介绍了148,148输入后可以立即输出到数码管&#xff0c;可以说它是自带编BCD编码器的。而今天这里我们主要介绍的74hc165是没有编码器&#xff0c;这里我们以proteus为仿真环境…...

docker真实IP解决

背景 在微服务的环境中使用docker部署各个应用&#xff0c;部分应用使用容器内的真实ip暴露出服务。会导致微服务之间调用出现网络超时&#xff0c;要解决这个问题需要让微服务暴露为宿主机的ip 解决 方式一 使用docker-compose的配置 network_mode: "host" emq…...

Linux 内存泄漏检测的基本原理

一、mtrace分析内存泄露 mtrace&#xff08;memory trace&#xff09;&#xff0c;是 GNU Glibc 自带的内存问题检测工具&#xff0c;它可以用来协助定位内存泄露问题。 它的实现源码在glibc源码的malloc目录下&#xff0c;其基本设计原理为设计一个函数 void mtrace ()&…...

Ubuntu下Nginx配置ModSecurity详细思路及过程

下面是一个简介&#xff1a; Ubuntu是一个linux操作系统&#xff0c;Nginx是一个web服务器软件&#xff0c;ModSecurity是一款开源的web应用防火墙&#xff08;江湖人称“WAF”&#xff09;。 如果上面的概念没有一定的了解&#xff0c;下面的内容其实也能看。就是不好操作。…...

入职美团近三个月,闲聊几句

校招入职美团近3个月&#xff0c;随便聊聊 今天和组内的小伙伴们团建来着&#xff0c;聊了很多&#xff0c;感触颇深&#xff0c;碎碎念一下。 作为组内的唯一的校招生&#xff0c;刚入职时面对复杂的业务&#xff0c;各种不熟悉的工具&#xff0c;真的是一脸懵。至少对我自己…...

setInterval倒计时切换页面后不准

背景 最近在做一个倒计时时&#xff0c;发现当切换浏览器tab后&#xff0c;再切回倒计时页面&#xff0c;倒计时的数据不准&#xff0c;比真正的剩余时间多&#xff0c;短时间还好&#xff0c;时间长了&#xff0c;计时器的误差会很大。 原因 倒计时是用setInterval每1000毫…...

信息安全三级概述

信息安全三级概述...

深入JVM:探索Java虚拟机

文章目录 1. JVM简介1.1 定义与核心作用1.2 JVM的跨平台特性 2. JVM内部结构深度探索2.1 类加载机制2.1.1 双亲委派模型2.1.2 OSGI框架2.1.3 类加载器分类 2.2 JVM运行时数据区2.2.1 程序计数器2.2.2 本地方法栈2.2.3 Java虚拟机栈 2.2.4 堆2.2.5 元数据区 2.3 JVM内存区域的性…...

【计算机网络】 RTT和RTO

文章目录 RTT——往返时延RTO&#xff08;Retransmission Timeout&#xff09;——超时重传时间 RTT——往返时延 RTT&#xff08;Round-Trip Time&#xff09;是计算机网络中的一个重要的性能指标&#xff0c;表示从发送端发送数据开始&#xff0c;到发送端接收到来自接收端的…...

Zabbix监控组件及流程

Zabbix 由5大组件构成 Zabbix Web、Zabbix Server、Zabbix Proxy、Zabbix Database、Zabbix Agent Zabbix监控系统具体监控系统流程如图&#xff1a; Zabbix Web Zabbix Web是基于PHP语言编写的WEB UI界面&#xff0c;展示Zabbix整个监控平台监控数据、配置信息、方便对整个…...

Type-C协议Ver2.0(学习笔记)

题记 本文以TYPE-C协议Ver2.0版本为基础&#xff0c;以直译为主&#xff0c;同时备注作者学习中遇到的问题与理解&#xff0c;如发现文中描述和协议原文有误&#xff0c;欢迎批评指正&#xff0c;感谢&#xff01; 1 简介 随着USB接口的持续成功&#xff0c;需要调整USB技术…...

智慧工地:实现作业区域安全管控

智慧工地是围绕工程现场人、机、料、法、环及施工过程中质量、安全、进度、成本等各项数据满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效。 建设工程安全文明施工与质量提升,全方位的监测施工人员、各类器械设备、消防安全隐患&#xff0c;并提前对风险进行预警…...

【Unity插件】实现多人在线游戏——Mirror插件的使用介绍

文章目录 前言导入Mirror插件 简单介绍一、RPC调用二、错误注意 基本使用一、创建场景的网络管理器二、创建一个玩家三、添加玩家初始生成位置四、玩家控制五、同步摄像机六、同步不同角色的名字和颜色修改七、同步动画八、同步子弹方法一方法二 九、聊天功能十、场景同步切换十…...

GeoSOS-FLUS未来土地利用变化情景模拟模型

软件简介 适用场景 GeoSOS-FLUS软件能较好的应用于土地利用变化模拟与未来土地利用情景 的预测和分析中&#xff0c;是进行地理空间模拟、参与空间优化、辅助决策制定的有效工 具。FLUS 模型可直接用于&#xff1a; 城市发展模拟及城市增长边界划定&#xff1b;城市内 部高分…...

IntelliJ IDEA使用_Debug操作

文章目录 版本说明图标和快捷键查看变量计算表达式条件断点多线程调试 版本说明 当前的IntelliJ IDEA 的版本是2021.2.2&#xff08;下载IntelliJ IDEA&#xff09; ps&#xff1a;不同版本一些图标和设置位置可能会存在差异&#xff0c;但应该大部分都差不多。 图标和快捷键…...

市场的新宠:4G智能手表

现在人们提到智能手表&#xff0c;健康监测、运动记录、接打电话等定是他不可或缺的功能&#xff0c;而其中通讯功能在绝大数多的智能手表上都是通过蓝牙实现的&#xff0c;需要让手表通过蓝牙连接到手机端来进行。在没有手机的情况下&#xff0c;配置再高的蓝牙智能手表也是“…...

Pytorch Advanced(一) Generative Adversarial Networks

生成对抗神经网络GAN&#xff0c;发挥神经网络的想象力&#xff0c;可以说是十分厉害了 参考 1、AI作家 2、将模糊图变清晰(去雨&#xff0c;去雾&#xff0c;去抖动&#xff0c;去马赛克等)&#xff0c;这需要AI具有“想象力”&#xff0c;能脑补情节&#xff1b; 3、进行数…...

Python实操如何去除EXCEL表格中的公式并保留原有的数值

import xlwings as xw app xw.App(visibleTrue, add_bookFalse) # 创建一个不可见的Excel应用程序实例 wb app.books.open(rE:\公式.xlsx) # 打开Excel文件 sheet wb.sheets[DC] # 修改为你的工作表名称 # 假设需要清除公式的范围是A1到B10range_to_clear sheet.range(A…...

MFC串口通信控件MSCOMM32.OCX的安装注册

MSCOMM32.OCX是一个与Microsoft Corporation开发的MSComm控件相关联的文件。MSComm控件是软件应用程序用来与调制解调器、条形码读取器和其他串行设备等设备建立串行通信的通信控件。 下载地址1 https://download.csdn.net/download/m0_60352504/88345092 下载地址2 https://ww…...

27.顺序表练习题目(1)(2023王道数据结构2.2.3前8题)

【这里所有解答都写的是全部代码&#xff0c;目的是让大家能够直接复制上手运行&#xff0c;感受代码的运行过程&#xff0c;而不单单只是写了一个函数】 试题1&#xff1a;&#xff08;王道2023数据结构综合应用题1&#xff09; 从顺序表中删除具有最小值的元素&#xff08;…...

Unity VideoPlayer 指定位置开始播放

如果 source是 videoclip&#xff08;以下两种方式都可以&#xff09;&#xff1a; _videoPlayer.Play();Debug.Log("time: " _videoPlayer.clip.length);_videoPlayer.time 10; [SerializeField] VideoPlayer videoPlayer;public void SetClipWithTime(VideoClip…...

美团多场景建模的探索与实践

本文介绍了美团到家/站外投放团队在多场景建模技术方向上的探索与实践。基于外部投放的业务背景&#xff0c;本文提出了一种自适应的场景知识迁移和场景聚合技术&#xff0c;解决了在投放中面临外部海量流量带来的场景数量丰富、场景间差异大的问题&#xff0c;取得了明显的效果…...

第11篇:ESP32vscode_platformio_idf框架helloworld点亮LED

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 ​​​​​​第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验 第6篇:ESP32连接无源喇叭播…...

React中的页面跳转方式详解

在React中&#xff0c;页面跳转通常通过路由来实现。React有多种路由库可供选择&#xff0c;其中最常用的是React Router。React Router提供了几种不同的跳转方式&#xff0c;包括使用组件进行页面跳转、使用组件进行重定向&#xff0c;以及使用编程式导航进行跳转。 使用组件进…...

Golang代码漏洞扫描工具介绍——govulncheck

Golang Golang作为一款近年来最火热的服务端语言之一&#xff0c;深受广大程序员的喜爱&#xff0c;笔者最近也在用&#xff0c;特别是高并发的场景下&#xff0c;golang易用性的优势十分明显&#xff0c;但笔者这次想要介绍的并不是golang本身&#xff0c;而且golang代码的漏洞…...

第31章_瑞萨MCU零基础入门系列教程之WIFI蓝牙模块驱动实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…...

宁波网站建设seo/制作一个网站步骤

自动曝光 Widget 这是一个能自动监听子Widget是否曝光的组件 当发现子Widget在视窗内&#xff0c;停留时长超过设置的曝光时长条件&#xff08;默认为0.5s&#xff09;和曝光面积大于曝光展示比例条件&#xff08;默认50%&#xff09; 就会触发曝光回调并且将Key值记录到一个队…...

安卓软件怎么开发/seo关键词推广公司

第四次工业革命已经开始&#xff0c;AI还能为此做些什么&#xff1f; 从18世纪60年代至今&#xff0c;250余年&#xff0c;三次工业革命&#xff0c;每一次&#xff0c;革命的先行者都在探索&#xff0c;究竟怎样的技术和设备才能彻底改变当前的社会生产现状&#xff0c;开启另…...

网站底部导航菜单/windows优化大师是什么

一、问题描述 多项目启动&#xff0c;tomcat报错内存溢出“PermGen space” 二、原理 tomcat启动的时候出现这种错误一般是项目引用了太多的jar包&#xff0c;或者反射生成了太多的类&#xff0c;或者有太多的常量池&#xff0c;导致非堆内存中永久保存区域不够。这种情况可以…...

拓者设计吧室内设计官网下载/安徽网站推广优化

vmware中为虚拟机添加硬盘空间 Vmware有自己的硬盘管理工具&#xff0c;其所在位置是/vmware/vmware workstation/&#xff0c;名称为vmware-vdiskmanager.exe&#xff0c;具体的参数及命令格式可以参照帮助文档。其使用方法如下&#xff1a;假设虚拟机装有Linux操作系统&#…...

seo网站推广优化/中文域名查询官网

2019独角兽企业重金招聘Python工程师标准>>> UDP是一种高速&#xff0c;无连接的数据交换方式&#xff0c;他的特点是&#xff0c;即使没有连接到&#xff08;也不许要连接&#xff09;接收方也可以封包发送&#xff0c;就像在一个多人使用的步话机环境中&#xff0…...

衡水专业做网站/武汉网站推广优化

push()/pop() -- shift()/unshift() 不建议使用delete concat() sort()排序 reverse()反转 数组迭代 Array.map()创建一个和原数组一一对应的新数组 Array.Filter()过滤掉不符合条件的元素 Array.every() / Array.some()返回bool类型值 Array.find()返回值 返回索引...