C# 为了维护',应该避免某些编程结构(和其他结构);看在上帝的份上?

C# 为了维护',应该避免某些编程结构(和其他结构);看在上帝的份上?,c#,maintenance,language-construct,C#,Maintenance,Language Construct,我正在从事一个非个人项目,所以可以肯定地说维护程序员不会是我,否则我就不需要问这个问题了 现在,我想在代码中尝试一些构造(委托、lambda表达式),并不是故意让代码更难阅读,而是因为它们适合这种情况(需要输入的代码也更少),并且因为我对这种语言不熟悉,所以也要练习使用它们 然而,我不确定维护程序员是否了解每一种构造,因为我们中的许多人都不是c#出身,我也不确定他是否像我一样热衷于编程,或者只是把编程当作日常工作。所以我的问题是: 是否应该避免某些编程结构以提高可维护性 如果以上问题的答案是肯

我正在从事一个非个人项目,所以可以肯定地说维护程序员不会是我,否则我就不需要问这个问题了

现在,我想在代码中尝试一些构造(委托、lambda表达式),并不是故意让代码更难阅读,而是因为它们适合这种情况(需要输入的代码也更少),并且因为我对这种语言不熟悉,所以也要练习使用它们

然而,我不确定维护程序员是否了解每一种构造,因为我们中的许多人都不是c#出身,我也不确定他是否像我一样热衷于编程,或者只是把编程当作日常工作。所以我的问题是:

    • 是否应该避免某些编程结构以提高可维护性

    • 如果以上问题的答案是肯定的,那么应该避免使用的构造子集是什么

    • 维护程序员是否有责任全面学习一门语言?


我反对最小公分母编码。我们是专业人士,我们应该学习一些我们不知道的东西


另一方面,我也反对荣耀编码。使用能够完成任务的最简单的构造—调试代码的难度是编写代码的两倍,因此您最好只编写一半聪明的代码

我认为一般的经验法则是确保你的代码是可读的,有很多注释,特别是在你做任何不直接的事情的地方

避免某些构造(如委托和lambda表达式)不应该是一个好办法,如果正确和明智地使用,这些语言功能可以大大降低代码的复杂性,并使它们更加简洁和表达。毕竟,这就是林克的美,不是吗?;-)


我认为,无论其他程序员是否具备理解您的代码所需的所有知识,您都应该将精力集中在尽可能最好地完成您的部分工作上。如果那个维护程序员离开了,而其他人进来了,那怎么办?你不应该为维护程序员量身定制代码,而应该为你要解决的问题量身定制代码。

我认为,即使你在自己的项目上写作,也应该尽可能地坚持使用任何语言的通用/标准习惯用法

我自己也遇到过这样的陷阱——写了一些代码做了一些“聪明”的事情,没有充分地记录它,并且在几个月后我回来更改代码时引入了一个严重的错误

我的经验法则是——尽可能多地使用“核心语言”,当你偏离这一点时,请彻底记录你的方法。除非代码是真正标准的习惯用法(例如C#中的属性),否则不要利用语法糖分来缩短代码。可读性应该胜过每次打字的速度


如果您希望维护编码人员接管您的工作,那么所有这些都是双重事实。在大多数组织中,您不能期望维护编码人员精通多种范例。因此,如果你开始在面向对象的代码中使用逻辑/函数式编程结构,比如lambdas,那么这有点像在英语书中用德语写一章。您可能希望您的读者是多语言爱好者,但很可能他们不是。

我相信特别是lambda表达式使代码更易于阅读。与使用大量条件的多个for-each不同,一个干净的lambda几乎可以被读取

根据我的经验,让代码难以阅读的是聪明的泛型Func参数。。。这些函数通常只取出tw0+易于阅读的函数,并用一个通用的难读函数替换它


因此,在我的书中,拥有好名字的方法比避免某些构造更重要。但是,不要担心他们不了解它们——他们无论如何都应该学习它们。

+1不要因为担心继任者不了解它们而避开编程语言的某些部分。但是请遵循公认的编码准则,并确保您编写的是惯用C#。@Helper方法:呵呵。如果我不是在凌晨3点回答的话,我会查这句话是谁写的:)