paint-brush
是怎样的寻找编码含有问题的这位置 [第 XXXII 这位置] 由@mcsee
806 讀數
806 讀數

如何找到代码中有问题的部分 [第 XXXII 部分]

經過 Maximiliano Contieri9m2023/03/08
Read on Terminal Reader

太長; 讀書

它闻起来是因为可能有很多情况可以对其进行编辑或改进。大多数这些气味只是一些可能出错的暗示。因此,它们本身不需要修复……(不过您应该研究一下。) 以前的代码味道您可以在这里找到所有以前的代码味道(第 i 部分 - XXXI)。
featured image - 如何找到代码中有问题的部分 [第 XXXII 部分]
Maximiliano Contieri HackerNoon profile picture
它闻来是而是也许有多情形能否对其做添加图片或改进方案。


大多数这些气味只是一些可能出错的暗示。因此,它们本身不需要固定......(不过你应该调查一下。)

以前的代码味道

您可以在此处找到所有以前的代码味道(第一部分 - XXXI)。


令我门立即...

代码味道 156 - 隐式 Else

我们在第一个编程日学习 if/else。然后我们忘记其他的。


TL;DR:要坚定。哪怕有相关人。

问题

解决方案

  1. 写出明确的 else

语境

若是 各位事先退回 IF 语句,各位能够 省略 else 部位。


之后,我们删除 IF并使用多态性。


那我是我门错过歌词真人典例的情况下。

示例代码

错误的

function carBrandImplicit(model) { if (model === 'A4') { return 'audi'; } return 'Mercedes-Benz'; }

正确的

function carBrandExplicit(model) { if (model === 'A4') { return 'audi'; } if (model === 'AMG') { return 'Mercedes-Benz'; } // Fail Fast throw new Exception('Model not found); }

检测

  • [x]自动


我们的需要诊断句型树并解读二者并禁告漏掉一些项目。


各位也能够 重写想一想并举行进化试验。

标签

  • 条件句

结论

这种气味带来了很多公众的争论和仇恨


小编肯定交易建议原则视每一位个利与弊。

关系

Code Smell 102 - 箭头代码

Code Smell 36 - Switch/case/else if/else/if 语句

更多信息

快速失败

如何永远摆脱烦人的 IF

学分

在上扫描拍摄的张片
app专业团队最明显的话题是狠抓每台人都理解某个人困什么样样的。


马丁福勒


Code Smell 157 - 余额为 0

今天,我希望钱包里有一笔付款。余额为0,我慌了。


TL;DR:Null 不再是 0。报错不再是 0。就 0 是 0。

问题

解决方案

  1. 明确区分零和错误。

语境

我读了一些就防护难题的内容。


非常是在密码保护营销上。


上星期,我读在了一些。


如果你的长款钱包信息显示现金余额为 0 时,我不知所措失措。


这仅是这种用户账户vr体验的气味儿。


板块链无发登陆💩

示例代码

错误的

""" Below code is automatically generated by code-davinci-002 on GTP3 Codex 1. check balance with blockchain 2. If blockchain is unreachable show 0 as the balance """ import requests import json def get_balance(address): url = "//blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: return 0

正确的

""" Below code is automatically generated by code-davinci-002 on GTP3 Codex 1. check balance with blockchain 2. If blockchain is unreachable throw an error """ import requests import json def get_balance(address): url = "//blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: raise BlockchainNotReachableError("Error reaching blockchain")

检测

  • [x]手册


那是是一种结构设计气味儿。


当抛出异常返回代码并用 0 屏蔽时,我们可以找到模式。

标签

  • 用户体验

结论

仍旧但要遵循当做访谈提纲。

关系

Code Smell 12 - 空

Code Smell 139 - 用户界面中的业务代码

Code Smell 73 - 预期情况的异常

Code Smell 72 - 返回代码

更多信息

无效:十亿美元的错误

信用

在上影视拍摄的图片视频

免责声明

代码味道只是我的意见


我对 Null 的真切进行批评是,它不用要地多次获得了须得进行是我不检杳的实际情况下下尽快执行程度是在检杳的实际情况下下慢慢的执行程度的所以生不如死。


托尼·霍尔(Null Inventor)


软件工程名言


Code Smell 158 - 变量不可变


您为变量赋值并使用它,但从不更改它。


TL;DR:声明书可调性。

问题

  • 可读性
  • 尊重双射可变性。
  • 潜在的性能和内存问题。

解决方案

  1. 将并明确其范围。

重构

重构003——提取常量

语境

他们总从研究方向小学习。


有时我们猜测一个值可以随MAPPER改变。


就这样,.我了解它没有变。


因为,小编必须将其加快为常量。


这也将避免Magic Constants

示例代码

错误的

<?php function configureUser() { $password = '123456'; // Setting a password on a variable is another vulnerability // And Code Smell $user = new User($password); // Notice Variable doesn't change }

正确的

<?php define("USER_PASSWORD", '123456') function configureUser() { $user = new User(USER_PASSWORD); } // or function configureUser() { $user = new User(userPassword()); } function userPassword() : string { return '123456'; } // Case is an oversimplification as usual

检测

  • [x]自动


好多 linter 檢查数组可不可以不过1个赋值。


人们还应该实施进化检查,并试 改进数组以看看检查是不是也不成功。

标签

  • 可变性

结论

我们必须在变量作用域清晰时挑战自我并重构,并且我们更多地了解它的属性和可变性

关系

Code Smell 116 - 使用“var”声明的变量

Code Smell 127 - 可变常量

Code Smell 107——变量重用

Code Smell 02 - 常量和幻数

更多信息

变种人的邪恶力量

免责声明

代码味道只是我的意见

学分

在上扫描拍摄的照片图片
一家有郊的复杂性系统软件老是被出现 要到一家有郊的容易系统软件演进来的的。


约翰高尔


代码气味 159 - mixEd_cASeI

严肃的开发是由许多不同的人完成的。我们必须开始同意。


TL;DR:不能结合有所差异的规模写转为

问题

  • 可读性
  • 可维护性

解决方案

  1. 取舍的例子标


  2. 努力起来

语境

当区别的人我们一起开放app软件时,用户可能性有 我之间的关系或人文精神之间的关系。有一点人更习惯 🐫,其余人更习惯 🐍,MACRO_CASE🗣️, 。


代碼需要简简单单易读。

示例代码

错误的

{ "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "UPDATED_AT": "2023-01-07T02:23:41.305Z", "created_at": "2020-01-07T02:23:41.305Z", "deleted at": "2023-01-07T02:23:41.305Z" }

正确的

{ "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "updatedAt": "2023-01-07T02:23:41.305Z", "createdAt": "2020-01-07T02:23:41.305Z", "deletedAt": "2023-01-07T02:23:41.305Z" // This doesn't mean THIS standard is the right one }

检测

  • [x]自动

我们可以告诉我们的 linters 我们公司广泛的命名标准并执行它们。


当遇到新进员工触达组织开展时,重新化测式理应尊重地需要他/她/..变更代码怎么用。

例外情况

想起了你企业须要与达到企业的范围的代码怎么用展开交互技术时,企业须得安全使用业主的基准,而如果不是企业的基准。

标签

  • 命名

结论

治理 细则很特别容易。


当我们还要硬性实行它是。

关系

Code Smell 48 - 没有标准的代码

更多信息

名字到底是什么 - 第一部分 The Quest

免责声明

代码味道只是我的意见

学分

在上摄像的照片集
若是 你有没有不多异常原因,而你就犯错误了。


克雷格·泽鲁尼


代码味道 160 - 无效 ID = 9999

Maxint 是一个非常适合无效 ID 的数字。我们永远达不到。


TL;DR:也不要将真 ID 与无效的 ID 融入选用。史实上:预防 ID。

问题


  • 您可能比您想象的更快到达无效 ID。


  • 也不要对无效 ID 使用null


  • 从调用者到函数的耦合标志。

解决方案

  1. 便用异常人群对异常问题做出模型制作。


  2. 应对用到 9999、-1 和 0,因此鸟卵是行之有效的域喜欢的人和实行交叉耦合。


  3. 建立空喜欢的人

语境

在算出的过去,参数型是从紧的。


然后我们发明了十亿美元的错误


那么小编长大以后了,用多态的唯一性值对唯一性游戏场景完成设计。

示例代码

错误的

#include "stdio.h" #include "stdlib.h" #include "stdbool.h" #define INVALID_VALUE 999 int main(void) { int id = get_value(); if (id==INVALID_VALUE) { return EXIT_FAILURE; // id is a flag and also a valid domain value } return id; } int get_value() { // something bad happened return INVALID_VALUE; } // returns EXIT_FAILURE (1)

正确的

#include "stdio.h" #include "stdlib.h" #include "stdbool.h" // No INVALID_VALUE defined int main(void) { int id; id = get_value(); if (!id) { return EXIT_FAILURE; // Sadly, C Programming Language has no exceptions } return id; } get_value() { // something bad happened return false; } // returns EXIT_FAILURE (1)

检测

  • [x]半自动


小编就能够诊断源代码中的独特常量和独特值。

标签

  • 无效的

结论

咱们必须选择阿拉伯数字来相关间接标记符。


倘若不有外边标志符,则它是不阿拉伯数字。

关系

Code Smell 120 - 顺序 ID

Code Smell 12 - 空

更多信息

无效:十亿美元的错误

Y2K22 - 让我们尴尬的错误

免责声明

代码味道只是我的意见

学分

在上拍出的照片儿
小虫电视剧潜伏在边上里,聚合在边际处。


鲍里斯·贝泽


将会投入市场 5 种编号韵味……
바카라사이트 바카라사이트 온라인바카라