”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 肮脏的代码:避免它的简单规则

肮脏的代码:避免它的简单规则

发布于2025-03-23
浏览:494

Dirty Code: Simple Rules to Avoid It每个开发人员都面对它:肮脏的代码 - 看起来像是急着写的代码,撒上魔术数字,重复的块和隐秘的可变名称。它几乎没有工作。但是要维护吗?那是一场噩梦。

如果您在重构别人的代码(甚至您自己的代码)时曾经喃喃自语,则本文适合您。以下是一些简单的规则,可以使您的代码保持清洁,可读和未来。

什么是肮脏的代码?

肮脏的代码是:

很难读取或理解。
缺乏结构和一致性。

    很难修改或调试而不打破其他内容。
  • 通常会发生开发人员:
  • 在紧迫的截止日期下工作。

跳过代码评论。

    不遵循最佳实践或标准。
  1. 为什么肮脏的代码问题?

团队混乱:新开发人员花费额外的时间,只是试图了解正在发生的事情。 肮脏的代码今天可能会完成工作,但这对您的团队和将来的自我来说是一个滴答滴答的时间炸弹。

1。遵循单个责任原则(srp)
  • 每个功能,方法或类都只能做一件事。如果您发现自己的职责过多,请将其分解为较小的单位。
  • ❌不好示例:
  • def Process_user_data(用户): 用户['age'] =用户['age'] 1 DB.Save(用户) 打印(f“用户{user ['name']}更新))

def update_user_age(用户): 用户['age'] = 1 def save_user_to_db(用户): DB.Save(用户) def log_user_update(用户): 打印(f“用户{user ['name']}更新)) 现在每个函数都有一个清晰的工作,使代码更易于测试和修改。

2。避免魔术数字和字符串 硬编码的值(“魔术数”)使代码不可读且难以维护。改用常数。

❌不好示例:


if(statuscode === 404){ console.log(“未找到”); }
def process_user_data(user):
    user['age'] = user['age']   1  
    db.save(user)  
    print(f"User {user['name']} updated")  

const not_found = 404; if(statuscode === not_found){ console.log(“未找到”); }

常数not_found是自我解释的,使您的代码易于阅读。
def update_user_age(user):
    user['age']  = 1  

def save_user_to_db(user):
    db.save(user)  

def log_user_update(user):
    print(f"User {user['name']} updated")  

3。编写描述性变量和函数名称

您的变量名称应反映其代表。避免缩写和神秘名称。

❌不好示例:

int a = 5; 字符串S =“ John”;


int userage = 5; 字符串用户名=“ John”;
def process_user_data(user):
    user['age'] = user['age']   1  
    db.save(user)  
    print(f"User {user['name']} updated")  

相同的功能也适用。避免使用模糊的名称(例如)或process()。要具体。


4。干燥(不要重复自己)
def update_user_age(user):
    user['age']  = 1  

def save_user_to_db(user):
    db.save(user)  

def log_user_update(user):
    print(f"User {user['name']} updated")  

如果您要复制和粘贴代码,那就做错了。重复的代码使错误修复了噩梦。抽象重复逻辑中的函数或类。

❌不好示例:

print(“欢迎,约翰”) 印刷(“欢迎,玛丽”)

def engret_user(name): 打印(f“欢迎,{name}”) etch_user(“约翰”) etch_user(“玛丽”)


5。保持您的函数短
int a = 5;  
String s = "John";  

长函数使理解和测试特定行为变得更加困难。


6。使用很少的评论
int userAge = 5;  
String userName = "John";  

❌不好示例:

//通过1增量计数器 计数器=计数器1;

counter = 1;


使用评论来阐明为什么做出某个决定,而不是代码在做什么。

print("Welcome, John")  
print("Welcome, Mary")  


遵循一致的编码样式指南(例如,python的pep8,javaScript的eslint)。

使用适当的凹痕。
def greet_user(name):
    print(f"Welcome, {name}")  

greet_user("John")  
greet_user("Mary")  

组相关代码在一起。 良好的格式使代码无需额外的努力即可清洁和可读。


您减少了他人的心理负担。

您使调试,扩展和改进变得更加容易。

您看起来像是一个重视质量的专业开发人员。
[2 避免肮脏的代码并不难 - 只需纪律即可。遵循以下简单的规则:


坚持单一的责任原则。

避免魔术数字。
def greet_user(name):
    print(f"Welcome, {name}")  

greet_user("John")  
greet_user("Mary")  

使用清晰的描述性名称。


干燥重复代码。

保持函数短。
def greet_user(name):
    print(f"Welcome, {name}")  

greet_user("John")  
greet_user("Mary")  

明智地使用注释。

干净的代码与完美无关;这是关于使您的工作可维护和理解。您的未来自我 - 和您的团队 - 将谢谢您。 现在去重构您一直在忽略的凌乱代码! ?

版本声明 本文转载于:https://dev.to/kaankaya/dirty-code-simple-rules-to-avoid-it-1ckm?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在php中使用卷发发送原始帖子请求?
    如何在php中使用卷发发送原始帖子请求?
    如何使用php 创建请求来发送原始帖子请求,开始使用curl_init()开始初始化curl session。然后,配置以下选项: curlopt_url:请求 [要发送的原始数据指定内容类型,为原始的帖子请求指定身体的内容类型很重要。在这种情况下,它是文本/平原。要执行此操作,请使用包含以下标头...
    编程 发布于2025-03-25
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    编程 发布于2025-03-25
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-03-25
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-03-25
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-03-25
  • 如何使用“ JSON”软件包解析JSON阵列?
    如何使用“ JSON”软件包解析JSON阵列?
    parsing JSON与JSON软件包 QUALDALS:考虑以下go代码:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    编程 发布于2025-03-25
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-03-25
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-03-25
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案:的,请访问量很大,并应为procectiquiestate的,并在整个代码上正确格式不多: java.text.simpledateformat; 导入java.util.calendar; 导入java...
    编程 发布于2025-03-25
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-03-25
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,可以更快地搜索这些前缀。了解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-03-25
  • 如何将来自三个MySQL表的数据组合到新表中?
    如何将来自三个MySQL表的数据组合到新表中?
    mysql:从三个表和列的新表创建新表 答案:为了实现这一目标,您可以利用一个3-way Join。 选择p。*,d.content作为年龄 来自人为p的人 加入d.person_id = p.id上的d的详细信息 加入T.Id = d.detail_id的分类法 其中t.taxonomy =...
    编程 发布于2025-03-25
  • 如何在全高布局中有效地将Flexbox和垂直滚动结合在一起?
    如何在全高布局中有效地将Flexbox和垂直滚动结合在一起?
    在全高布局中集成flexbox和垂直滚动传统flexbox方法(旧属性)使用新的FlexBox properties 试图将全新的FlexBox属性应用于全高和可滚动的设计引入限制。使用高度的解决方法:0px;包装器上的元素是不可靠的,并创建了其他问题。一个鲁棒的解决方案涉及为需要垂直滚动的特定高...
    编程 发布于2025-03-25
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-03-25
  • 如何使用Depimal.parse()中的指数表示法中的数字?
    如何使用Depimal.parse()中的指数表示法中的数字?
    在尝试使用Decimal.parse(“ 1.2345e-02”中的指数符号表示法表示的字符串时,您可能会遇到错误。这是因为默认解析方法无法识别指数符号。 成功解析这样的字符串,您需要明确指定它代表浮点数。您可以使用numbersTyles.Float样式进行此操作,如下所示:[&& && && ...
    编程 发布于2025-03-25

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

Copyright© 2022 湘ICP备2022001581号-3