C# .net代码的可读性和可维护性
目前,关于哪种代码更具可读性,当地存在着争论 我们有一个来自c语言背景的程序员,当这个程序员编写代码时,它看起来像C# .net代码的可读性和可维护性,c#,.net,C#,.net,目前,关于哪种代码更具可读性,当地存在着争论 我们有一个来自c语言背景的程序员,当这个程序员编写代码时,它看起来像 string foo = "bar"; if (foo[foo.Length - 1] == 'r') { } 我们有另一个程序员不喜欢这种方法,而宁愿使用 if (foo.EndsWith("r")) { } 哪种操作方式更好?我来自C/C++背景,我投票支持Endswith>P>对从未见过C或C++、C等任何编程语言的人来说,EnthSoad更可读。 第二个是多,但我
string foo = "bar";
if (foo[foo.Length - 1] == 'r')
{
}
我们有另一个程序员不喜欢这种方法,而宁愿使用
if (foo.EndsWith("r"))
{
}
哪种操作方式更好?我来自C/C++背景,我投票支持Endswith>P>对从未见过C或C++、C等任何编程语言的人来说,EnthSoad更可读。
第二个是多,但我不能客观地告诉你,如果它更可读,可读性很主观。我个人觉得第二本书更具可读性,但这只是我的观点
以下是我文章的摘录: 大多数C#开发人员都非常熟悉 编写命令式代码(偶数) 虽然他们可能不知道这一点 姓名)。在本文中,我将 给你介绍另一种风格 一种称为声明式的编程方法 编程。正确的声明性代码 更容易阅读、理解和理解 维持 作为专业人士,我们应该 努力编写更好的代码 白天如果你看不到代码,你就会 三个月前写了一篇评论文章 观察并注意可能发生的事情 更好的话,你就没有进步和进步 不要挑战自己。我 挑战您编写的代码 通过使用更易于阅读和理解 声明性代码我认为第二种方法更好,因为它更易于阅读,并且因为第一种方法使用方法复制了
EndsWith的逻辑,这是一种不好的做法。IMO,在第二个示例中,原始作者的意图更为清晰。首先,读者必须通过提取最后一个索引来评估作者试图完成的任务。这并不难,但需要读者付出更多的努力。EndsWith可能更安全。但是索引器可能更快
Endswith可能会检查输入字符串是否为空。它们可能都会抛出空引用异常。如果长度为0,索引器将失败
至于可读性,他们都对我说了同样的话,但我已经编程一段时间了。.EndsWith(…)
在不考虑上下文的情况下可能会更快地理解。它几乎做了同样的事情。但是,如果endswith参数中有多个字符,则会变得更复杂。但是,第一个示例稍微快一点,因为它不使用实际函数,因此不需要堆栈。您可能需要定义一个宏,该宏可以用来简单地使所有内容一致。这两种方法都是有效的,但在我看来,endswith方法更容易阅读。它还消除了使用更复杂的表单时可能出现的键入错误等问题。我认为主要标准应该是哪一项最清楚地说明了开发人员想要做什么。每个样本实际上说了什么
1) 访问小于长度的位置1处的字符,并检查其是否等于字符“r”
2) 检查是否以字符串“r”结尾
我认为这清楚地表明了哪一个是更易于维护的答案。除非并且直到它不影响程序性能,否则您可以使用任何一种方法。但是添加代码注释对于传达正在完成的工作非常重要。“编写代码是为了让人阅读,顺便让计算机运行”SICP
EndsWith FTW
善良
Dan从错误处理的角度来看,EndsWith。我认为正确的答案实际上是正确的<对于空字符串输入,code>EndsWith
正确地返回false
,而另一个测试将抛出一个异常,试图使用-1进行索引。我更喜欢第二个(EndsWith
)版本。连我的经理都能明白 第二个更好的方法是阅读和阅读。
示例:验证最后2个字符
备选方案1)
备选方案2)
最后三个?最后4条?..可读性规则,尤其是当它暗示意图时 对于第一个例子,我必须发现意图——这是留给解释的。如果它似乎有一个bug,我怎么知道这不是故意的呢
第二个例子是告诉我意图。我们想找到最终角色。有了这些知识,我可以继续评估实现。不仅更具可读性,而且更“正确”。 通常,如果提供了一个框架方法来完成这项工作。。。使用它
如果foo==string.Empty怎么办 最佳实践是编写易于阅读的代码。如果使用第一种方法,调试代码的开发人员可能会说,“这个开发人员想做什么?”您需要使用易于解释的方法。如果一个方法太复杂而无法理解,那么可以从中收回几个方法 我肯定会说第二点,易读性和简单性是关键
另外,如果“if”语句只有一行,不要麻烦使用大括号,使用一个缩进。记住,在经典C语言中,“string”和字符数组之间的唯一区别是终止空字符“\0”,因此我们必须更积极地相应地处理它们,并确保没有从数组的末尾跑出来。因此,第一段代码的思想过程基于字符数组的概念 第二段代码将思考过程建立在如何更抽象地处理字符串的基础上,而较少考虑其在幕后的实现 因此,简而言之,如果您正在谈论将字符处理作为项目背后的主要思想,那么就开始第一部分。如果你说的是为更大的东西准备一根弦,那不一定需要关注力学
if (foo[foo.Length - 1] == 'r' && foo[foo.Length - 2] == 'a')
{
}
if (foo.EndsWith("ar"))
{
}