嗨,大家好!让我继续学习我们的错误代码学院。在这篇文章中,我们将揭示另一种减慢代码阅读速度的方法。以下技巧可以帮助您减少对代码的了解,并增加其中的错误几率。准备?开始吧。
换行符,空格和缩进可能会导致死亡。
人们如何读书?从上到下,从左到右(至少大多数)。当开发人员阅读代码时,也会发生同样的情况。一行代码应包含一个思想,因此,每一行应仅包含一个命令。如果您想让其他开发人员感到尴尬,则最好违反这些准则。让我告诉你如何做。
Example#1
看一下这段代码。在一条线上的一个想法。代码很干净,让我感到恶心。
return elements
.Where(element => !element.Disabled)
.OrderBy(element => element.UpdatedAt)
.GroupBy(element => element.Type)
.Select(@group => @group.First());
我们可以将所有语句合并为一行,但这太容易了。在这种情况下,开发人员的大脑将了解这里出了点问题,并将操作员从左到右分开。十分简单!
最好将某些语句放在同一行上,而另一些则要分开。最好的选择是当开发人员甚至没有注意到某些操作员时,这将导致误解,并最终导致错误。另一种选择是慢慢降低对这段代码的理解,直到他大喊“这到底是什么!?”。
return elements.Where(e => !e.Disabled)
.OrderBy(e => e.UpdatedAt).GroupBy(e => e.Type)
.Select(g => g.First());
你觉得如何?您可以添加一些缩进,以便其他开发人员在需要重命名elements变量的情况下格式化您的代码数十年。
return elements.Where(e => !e.Disabled)
.OrderBy(e => e.UpdatedAt).GroupBy(e => e.Type)
.Select(g => g.First());
如果您的团队对这种方法进行了代码审查,请给我寄一张明信片。
提示:在一行上保留几条语句,在单独的行上保留几条语句。
Example#2
绝对是一样的想法 这是您经常看到的唯一代码。
var result =
(condition1 && condition2) ||
condition3 ||
(condition4 && condition5);
步骤是一样的。单独的行尽可能使读者感到困惑。玩一些换行符以获得最佳结果。
var result = (condition1 && condition2) || condition3 ||
(condition4 && condition5);
并添加一些缩进以使代码看起来正常。
var result = (condition1 && condition2) || condition3 ||
(condition4 && condition5);
请记住,您必须在代码的可读性和样式的可信度之间取得平衡。
提示:玩换行符可获得最佳效果。
Example#3
怎么样?
if (isValid)
{
_unitOfWork.Save();
return true;
}
else
{
return false;
}
同样的问题,但另一方面。在这里,最好的选择当然是将运算符组合成一行,方法是放置花括号。
if (isValid) { _unitOfWork.Save(); return true; } else { return false; }
仅当then和else块中的语句很少时,此方法才有效。否则,您的代码可能会在代码审查阶段被拒绝。
提示:将小的if / for / foreach语句合并为一行。
Example#4
当前建议的标准是每行80个字符。这使您可以在开发人员阅读代码时保持专注。此外,您可以根据需要在同一屏幕上同时打开两个文档,从而为解决方案资源管理器留出空间。
bool IsProductValid(
ComplexProduct complexProduct,
bool hasAllRequiredElements,
ValidationSettings validationSettings)
{
// code
}
减慢代码读取速度的最简单方法是强制其他开发人员水平滚动代码。只需忽略80个字符的规则即可。
bool IsProductValid(ComplexProduct complexProduct, bool hasAllRequiredElements, ValidationSettings validationSettings)
{
// code
}
这非常容易:忘记开始滚动之前发生的事情,或者跳过开始的那一行。绝招
提示:故意忽略80个字符的规则。
Example#5
在正确的地方空行是一种强大的工具,可用于对代码进行分组并使其读取更快。
ValidateAndThrow(product);
product.UpdatedBy = _currentUser;
product.UpdatedAt = DateTime.UtcNow;
product.DisplayStatus = DisplayStatus.New;
_unitOfWork.Products.Add(product);
_unitOfWork.Save();
return product.Key;
错误位置的空白行以及本文中的其他提示可以帮助您节省工作。您更喜欢哪个空白行?
ValidateAndThrow(product);
product.UpdatedBy = _currentUser;
product.UpdatedAt = DateTime.UtcNow;
product.DisplayStatus = DisplayStatus.New;
_unitOfWork.Products.Add(product);
_unitOfWork.Save();
return product.Key;
提示:随机插入空白行。
Example#6
当您提交到存储库时,您几乎没有机会查看要提交的内容。不要那样做!可以在此处添加一个额外的空白行。
private Product Get(string key)
{
// code
}
private void Save(Product product)
{
// code
}
或者,甚至更好的是,在空白行上添加了一些空格(要了解不同之处,请高亮显示第5行)。
private Product Get(string key)
{
// code
}
private void Save(Product product)
{
// code
}
你为什么需要这个?该代码继续有效(但不确定)。您将继续理解您的代码,但是其他开发人员将更少地了解您的代码。您不能立即在通用方法中添加一些额外的空格(代码审查是我们的敌人),但是使用这种做法会在几周的积极开发后造成混乱。
在字符串中使用多余空格的另一个附加好处是,当其他开发人员提交相关功能时,他们的IDE可以自动更正格式。在代码审查中,他们将看到一千个红线和绿线。如果您理解我的意思;)
出于相同的原因,如果在项目中使用空格,则可以在IDE中设置选项卡,反之亦然。
提示:提交之前请勿查看代码。
Example#7
绕过那些可能在代码中看到多余空格的开发人员。它们对您的职业有害。
product.Name = model.Name;
product.Price = model.Price;
product.Count = model.Count;
提示:认识你的敌人。
使您的代码不受支持非常困难。当您积累许多小问题时,它们会在没有您参与的情况下增长。年轻的开发人员将根据您的模板编写代码。一天,在代码审查期间,您会听到“到底是什么?” 从您的团队负责人那里,然后您可以使用流行语:“什么?我们总是这样做,”并在代码中向他展示一千个相同的地方。
玩得开心。