错误代码学院:换行符,空格和缩进

哈Ha!我向你注意文章的翻译“暗码式学院:换行,空格和缩进”由作家zhikin2207



图片



嗨,大家好!让我继续学习我们的错误代码学院。在这篇文章中,我们将揭示另一种减慢代码阅读速度的方法。以下技巧可以帮助您减少对代码的了解,并增加其中的错误几率。准备?开始吧。



换行符,空格和缩进可能会导致死亡。



人们如何读书?从上到下,从左到右(至少大多数)。当开发人员阅读代码时,也会发生同样的情况。一行代码应包含一个思想,因此,每一行应仅包含一个命令。如果您想让其他开发人员感到尴尬,则最好违反这些准则。让我告诉你如何做。



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;


提示:认识你的敌人。



使您的代码不受支持非常困难。当您积累许多小问题时,它们会在没有您参与的情况下增长。年轻的开发人员将根据您的模板编写代码。一天,在代码审查期间,您会听到“到底是什么?” 从您的团队负责人那里,然后您可以使用流行语:“什么?我们总是这样做,”并在代码中向他展示一千个相同的地方。



玩得开心。



All Articles