什么更具可读性?

时间:2008-10-14 12:35:41

标签: c# linq lambda readability

我有这两段代码,哪一个更具可读性?

  1. 的foreach

    decimal technicalPremium = 0;
    foreach (Risk risk in risks)
    {
         technicalPremium = technicalPremium + risk.TechnicalPremium;
    }
    return technicalPremium;
    
  2. LINQ

    return risks.Sum(risk => risk.TechnicalPremium);
    

21 个答案:

答案 0 :(得分:16)

如果负责代码的团队知道Linq版本的功能并知道其内部工作原理,那么它就更具可读性。

答案 1 :(得分:15)

使用您喜欢的方法,但将其隐藏在方法中:

return risks.SumTechnicalPremium();

答案 2 :(得分:12)

都不是。第一个更冗长,每个人都可能理解。第二个更简洁,更容易理解,即使是对linq的传递知识。

我想你可以根据自己的环境做出选择。

答案 3 :(得分:4)

对于能够阅读LINQ的LINQ的人。

对于必须逐步解释代码的人(通过使用intellisense / documentation更短的代码。

答案 4 :(得分:2)

使用linq。如果您认为需要解释,那么一行注释就会解决这个问题。随着人们越来越习惯linq,评论的需求将会消失。

答案 5 :(得分:1)

LINQ代码非常易读且可自我记录。

答案 6 :(得分:1)

第一种选择对更广泛的人群更具可读性。第二个选项有一个“进入障碍”,读者可能或可能知道并理解LINQ。它更简洁,因此如果您的观众超过了这个障碍,可能会更好。

答案 7 :(得分:0)

这里没有可读性问题。单击Sum并点击F1。

Linq获胜。

答案 8 :(得分:0)

第二个,绝对是。拥有如此庞大的代码块来执行像求和这样简单的操作只是不必要的。我也不知道LINQ是什么,但它对我来说是完全可读的。

答案 9 :(得分:0)

我认为这取决于你所说的“可读”。第一个例子清楚地表明了程序逻辑,任何具有编程背景的人都应该能理解。

对我来说,第二个示例基于上下文更直观(即,您正在采用数组(或其他一些集合类型)并在该数组的每个元素上执行名为Sum的方法)。第二个例子唯一可以变得不那么清楚的地方就是实际的lambda表达式本身,特别是对于没有lambdas经验或者alraedy有功能编程背景的人。

我认为随着lambdas在.NET编程中越来越普遍,这将成为一个问题。就目前而言,我认为理解如何在.NET中使用lambda表达式的基础知识有一个非常小的学习曲线。

答案 10 :(得分:0)

我同意那些说Linq变得更广泛采用的第二个将被轻易理解的人。它当然更简洁。

但是,我对调试的简易性感到担忧。在foreach中逐步执行代码似乎要容易得多,以确切了解它在每次传递中的作用。

答案 11 :(得分:0)

我会说第一段代码肯定更具可读性,如果你至少重新命名变量风险,那么它将更具可读性,以便它与类具有不同的名称。如果重命名阵列风险可能会更好。

答案 12 :(得分:0)

如果您的目标是让对任何可能追随您的“任何人”更具可读性,那么请使用foreach。我将“更具可读性”解释为意味着任何具有该语言基础知识经验的人都应该能够掌握。对于不熟悉linq且仍在使用VS2005或更早版本的人来说,linq语法会让人感到困惑。

答案 13 :(得分:0)

我看到有人说他们喜欢第一个“如果你不懂Linq”。是的,如果你不了解C#,第一个是不可读的。这不是“哪个更具可读性”的问题,而是“我们使用哪种语言功能?”

首先与您的团队讨论每个人都讨厌的语言/框架/工具集部分,然后宣布它们不受限制。其他一切都被认为是标准词汇的一部分,每个人都应该流利。此列表应放在您的编码标准文档中,紧挨着“never make mutable value types”和“don't bother with trivial properties for non-public members”。

只要Linq不在您的“排除”列表中,第二个示例比第一个更易读。为什么?因为它声明了代码的意图,而不仅仅是为读者提供解密机制。

答案 14 :(得分:0)

decimal technicalPremium = 0;

foreach(风险风险)technicalPremium = technicalPremium + risk.TechnicalPremium;

返回technicalPremium;

答案 15 :(得分:0)

我不知道c#但第二种选择对我来说看起来更干净,我能理解它的作用(好吧,通过猜测和第一版的交叉检查)。可能是因为一些功能背景。但首先你需要在4(!)位置寻找technicalPremium。如果您只是阅读代码,第二个更短更容易理解。

答案 16 :(得分:0)

每种语言都有对这些事物进行编码的最佳方式的约定,因此对于经常使用该语言的人来说,最具可读性的并不是通用的。对于Java或普通的C#程序员,第一个选项更具可读性。对于习惯于LINQ或函数式编程的人来说,第二个更具可读性。

答案 17 :(得分:0)

第一个如果你不了解Linq。任何开发人员都可以阅读并理解第一个。

答案 18 :(得分:0)

如果您提供解释其目的的评论,那么我会选择Linq选项。

答案 19 :(得分:0)

我会说第一个因为我不知道linq。有过度记录的风险,我会使用那个简短描述正在发生的事情。或者只是说对于那些可能不知道的人来说,这是个不错的选择。

答案 20 :(得分:0)

我认为第二种选择更好,因为它应该更有效率。然而,现在发生的事情并不那么明显(至少对我而言)。