”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 理解干净的代码:对象和数据结构⚡

理解干净的代码:对象和数据结构⚡

发布于2024-08-24
浏览:873

Understanding Clean Code: Objects and Data Structures⚡

理解对象和数据结构之间的区别对于编写干净的代码至关重要。

两者在软件设计中都有自己的地位,但服务于不同的目的,并且最适合各种场景。

在本文中,我们将深入探讨对象和数据结构之间的差异,并探讨何时使用它们,并使用 JavaScript 示例来说明概念。


?什么是对象?

对象是面向对象编程(OOP)的基础。

它们封装了数据和行为,这意味着它们不仅保存信息,还提供与该信息交互的方法。

对象背后的核心思想是将数据与操作该数据的函数捆绑在一起,确保对象的内部状态只能通过其方法进行操作。

对象示例:

class Rectangle {
  constructor(width, height) {
    this.width = width;
    this.height = height;
  }

  getArea() {
    return this.width * this.height;
  }

  getPerimeter() {
    return 2 * (this.width   this.height);
  }
}

const myRectangle = new Rectangle(5, 10);
console.log(myRectangle.getArea());       // Output: 50
console.log(myRectangle.getPerimeter());  // Output: 30

在本例中, Rectangle 类是一个封装了宽度和高度数据的对象,以及 getArea() 和 getPerimeter() 方法。

内部数据(宽度和高度)受到保护,只能通过这些方法访问或修改。


?什么是数据结构?

相比之下,数据结构是没有任何关联行为的数据集合。

它们专注于公开数据而不是保护数据,使外部函数可以对其进行操作。

数据结构更多的是以一种易于检索和修改的方式存储和组织数据。

数据结构示例:

const rectangle = {
  width: 5,
  height: 10
};

function getArea(rectangle) {
  return rectangle.width * rectangle.height;
}

function getPerimeter(rectangle) {
  return 2 * (rectangle.width   rectangle.height);
}

console.log(getArea(rectangle));       // Output: 50
console.log(getPerimeter(rectangle));  // Output: 30

这里,矩​​形是一种数据结构。它直接公开其数据,并且函数 getArea() 和 getPerimeter() 对此公开的数据进行操作。

与对象不同,没有封装性,数据可以被任何外部函数自由访问和修改。


?何时使用对象

当您想要将行为与数据一起封装时,对象是理想的选择。

这种封装允许您控制数据的访问和修改方式,提供一层保护。

对象也非常适合不同类型的对象需要通过明确定义的接口相互交互的情况。

⚡ 在以下情况下使用对象:

  • 你需要保护内部状态并确保它只能通过特定的方法改变。
  • 您想要定义与数据密切相关的行为。
  • 您正在使用一个复杂的系统,其中封装和抽象非常重要。

?何时使用数据结构

当您需要简单地存储和组织数据而不附加行为时,数据结构非常有用。

它们允许轻松直接地访问数据,这在性能和简单性至关重要的场景中非常有用。

⚡ 在以下情况下使用数据结构:

  • 您需要直接公开数据以供外部函数操作。
  • 您希望保持设计简单明了。
  • 行为与数据分离,可以在外部函数中实现。

要点?

  • 对象封装数据和行为,保护内部状态并通过方法提供受控访问。
  • 数据结构直接暴露数据,允许外部函数对其进行操作而无需任何封装。
  • 当您需要封装并希望将行为与数据捆绑在一起时,请使用对象。
  • 当您需要存储数据而不附加行为,并且简单性和直接访问是优先考虑时,请使用数据结构。

理解对象和数据结构之间的区别对于编写干净、可维护的代码至关重要。

通过根据应用程序的需求选择正确的方法,您可以创建高效且易于理解的系统。

快乐编码!

版本声明 本文转载于:https://dev.to/alisamir/understanding-clean-code-objects-and-data-structures-j4f?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    编程 发布于2025-05-22
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    编程 发布于2025-05-22
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-05-22
  • 如何将来自三个MySQL表的数据组合到新表中?
    如何将来自三个MySQL表的数据组合到新表中?
    mysql:从三个表和列的新表创建新表 答案:为了实现这一目标,您可以利用一个3-way Join。 选择p。*,d.content作为年龄 来自人为p的人 加入d.person_id = p.id上的d的详细信息 加入T.Id = d.detail_id的分类法 其中t.taxonomy =...
    编程 发布于2025-05-22
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    编程 发布于2025-05-22
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-05-22
  • 将图片浮动到底部右侧并环绕文字的技巧
    将图片浮动到底部右侧并环绕文字的技巧
    在Web设计中围绕在Web设计中,有时可以将图像浮动到页面右下角,从而使文本围绕它缠绕。这可以在有效地展示图像的同时创建一个吸引人的视觉效果。 css位置在右下角,使用css float and clear properties: img { 浮点:对; ...
    编程 发布于2025-05-22
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-05-22
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-05-22
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-05-22
  • Java中假唤醒真的会发生吗?
    Java中假唤醒真的会发生吗?
    在Java中的浪费唤醒:真实性或神话?在Java同步中伪装唤醒的概念已经是讨论的主题。尽管存在这种行为的潜力,但问题仍然存在:它们实际上是在实践中发生的吗? Linux的唤醒机制根据Wikipedia关于伪造唤醒的文章,linux实现了pthread_cond_wait()功能的Linux实现,利用...
    编程 发布于2025-05-22
  • Python不会对超范围子串切片报错的原因
    Python不会对超范围子串切片报错的原因
    在python中用索引切片范围:二重性和空序列索引单个元素不同,该元素会引起错误,切片在序列的边界之外没有。这种行为源于索引和切片之间的基本差异。索引一个序列,例如“示例” [3],返回一个项目。但是,切片序列(例如“示例” [3:4])返回项目的子序列。索引不存在的元素时,例如“示例” [9] ...
    编程 发布于2025-05-22
  • 如何使用node-mysql在单个查询中执行多个SQL语句?
    如何使用node-mysql在单个查询中执行多个SQL语句?
    Multi-Statement Query Support in Node-MySQLIn Node.js, the question arises when executing multiple SQL statements in a single query using the node-mys...
    编程 发布于2025-05-22
  • 如何在php中使用卷发发送原始帖子请求?
    如何在php中使用卷发发送原始帖子请求?
    如何使用php 创建请求来发送原始帖子请求,开始使用curl_init()开始初始化curl session。然后,配置以下选项: curlopt_url:请求 [要发送的原始数据指定内容类型,为原始的帖子请求指定身体的内容类型很重要。在这种情况下,它是文本/平原。要执行此操作,请使用包含以下标头...
    编程 发布于2025-05-22

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3