Questions tagged «coding-style»

编码样式是一组准则,有助于提高可读性和对源代码的理解。

6
虚假代码重复
通常的本能是删除您在代码中看到的所有代码重复。但是,我发现自己处于一种重复的幻象之中。 为了更详细地描述这种情况:我正在开发一个Web应用程序,并且大多数视图基本上是相同的-它们显示用户可以滚动并从中选择的项目列表,包含所选项目的第二个列表以及“保存” ”按钮以保存新列表。 在我看来,这个问题很容易。但是,每个视图都有其自己的怪癖-有时您需要重新计算某些内容,有时您必须存储一些其他数据,等等。这些我通过在主逻辑代码中插入回调挂钩来解决。 有这么多,它是越来越少维护的,因为我需要为所有基本功能提供回调的观点之间的微小差异,主要逻辑开始看起来像回调调用的一个巨大的序列。最后,我没有节省任何时间或代码,因为每个视图都有自己执行的代码-全部在回调中。 问题是: 差异是如此之细,以至于代码在所有视图中看起来几乎都是相似的, 有这么多的差异,当你看细节,代码是不是有一点相像 我应该如何处理这种情况? 具有完全由回调调用组成的核心逻辑是否是一个好的解决方案? 还是我应该复制代码并降低基于回调的代码的复杂性?


10
在什么情况下,更少的代码更好?[关闭]
我最近在工作中重构了一些代码,并且我认为自己做得很好。我将980行代码减少到450行,并将类数量减半。 当向我的同事展示时,有些人不同意这是一种进步。 他们说-“更少的代码行不一定更好” 我可以看到,在某些极端情况下,人们会写很长的行和/或将所有内容放在一个方法中以节省几行,但这不是我要做的。在我看来,由于代码只有一半大小,因此其结构合理且易于理解/维护。 我正在努力地弄清楚为什么有人希望将完成工作所需的代码加倍,而且我想知道是否有人会觉得与我的同事一样,并且可以提出一些理由,使事半功倍?

6
做一个小的改变,进行测试,然后“漂洗并重复”,这是一个坏习惯吗?
我是一位具有多年经验的程序员。我意识到我有一定的习惯。我不确定这是否真的是个坏习惯。 我会列出要为解决方案执行的任务的清单,例如一些小的小任务, 更改此用户控件的资源 更改另一个尺寸 在另一个用户控件上添加一些HTML和编码 所有这些任务都很小。我的意思是,它们可以在10分钟内完成,但是我习惯于进行一些小的更改,然后在Web浏览器中一次又一次地测试它们。这是一个好习惯吗? 还是我应该一次执行所有这些,然后一起测试? 如果这确实是个坏习惯,那么我该如何改正它,因为这就像浪费时间反复测试小变化?

9
代码一致性和代码改进之间的正确平衡是什么?
最近,我与一位同事讨论了代码风格。他在争辩说,您对API的使用以及所使用的一般模式应与周围的代码尽可能地相似,如果与整个代码库无关,则应与代码外观(括号位置,大写字母等)相同。 。例如,如果我要在C#中将方法添加到DAO类中,那么即使该类中的其他任何方法都没有使用LINQ,我也会尝试在适当的地方使用LINQ来帮助使我的代码干净并易于维护。但是,我的同事会争辩说我不应该在这种情况下使用它,因为它会违背该类的现有风格,因此更难以理解。 起初我发现他的立场相当极端,但是经过一会儿的思考,我开始明白他的观点。在假设的LINQ示例中,也许该类不包含它,因为我的同事们不熟悉LINQ?如果是这样的话,如果我不使用我的代码,对我的开发人员来说,它的代码维护起来会更好吗?另一方面,如果我真的相信使用这种技术可以使代码更简洁,那么即使它与周围的代码有很大的不同,我也不应该使用它吗? 我认为,我同事观点的症结在于,如果我们都打算以不同的方式在代码库中实现相似的功能,而我们每个人都认为我们的方式是“最佳”的,那么最终整个代码将变得更加困难了解。但是此刻,我仍然认为,如果我们盲目地遵循现有代码,那么质量将随着时间的流逝而缓慢恶化。 那么,模式在何种程度上成为代码风格的一部分,我们应该在保持一致性和进行改进之间划清界限吗?

11
有人喜欢比例字体吗?[关闭]
我在阅读有关编程风格的Wikipedia文章,并注意到反对垂直对齐的代码的某个论点: 依靠等宽字体;表格格式假定编辑器使用固定宽度的字体。大多数现代代码编辑器都支持比例字体,程序员可能更喜欢使用比例字体以提高可读性。 老实说,我认为我从未见过喜欢使用比例字体的程序员。我也没有想到使用它们的任何真正好的理由。为什么有人会喜欢比例字体?

7
切换到SOLID后管理和组织大量增加的课程?
在过去的几年中,我们一直在缓慢地转换为逐渐更好的书面代码,每次只需几个小步骤。我们终于开始切换到至少与SOLID类似的东西,但是我们还没有到那儿。自从进行切换以来,开发人员最大的抱怨之一就是他们无法忍受同行审查和遍历数十个文件,而以前的每个任务只需要开发人员触摸5-10个文件即可。 在开始进行转换之前,我们的体系结构非常类似于以下内容(已授予,但又增加了一个或两个数量级的文件): Solution - Business -- AccountLogic -- DocumentLogic -- UsersLogic - Entities (Database entities) - Models (Domain Models) - Repositories -- AccountRepo -- DocumentRepo -- UserRepo - ViewModels -- AccountViewModel -- DocumentViewModel -- UserViewModel - UI 从文件的角度来看,所有内容都非常线性且紧凑。显然有很多代码重复,紧密耦合和令人头疼的问题,但是,每个人都可以遍历并弄清楚。完全的新手,从来没有像以前那样打开过Visual Studio的人,就可以在几周内解决这个问题。缺乏整体文件的复杂性,对于新手开发人员和新员工来说,在不增加太多时间的情况下就开始进行贡献相对容易。但这几乎就是代码风格的任何好处都无法体现的地方。 我全心全意地支持我们为改善代码库所做的一切尝试,但是在这样的大规模范式转换中,从团队的其他成员那里得到一些回击是很普遍的。当前几个最大的症结是: 单元测试 班数 同行评审的复杂性 单元测试对于团队来说是一笔难以置信的辛苦卖点,因为他们所有人都认为这是浪费时间,并且他们能够比单个代码更快地整体测试代码。使用单元测试作为SOLID的认可在大多数情况下是徒劳的,并且在这一点上已经成为一个笑话。 上课人数可能是要克服的最大障碍。过去需要5-10个文件的任务现在可以占用70-100!尽管每个文件都有不同的用途,但文件的数量却是巨大的。团队的反应主要是吟和头部抓挠。以前,一项任务可能需要一个或两个存储库,一个或两个模型,一个逻辑层和一个控制器方法。 现在,要构建一个简单的文件保存应用程序,您需要一个类来检查文件是否已存在,一个类来编写元数据,一个类来进行抽象,DateTime.Now以便您可以投入时间进行单元测试,为每个包含逻辑的文件插入接口,包含每个类的单元测试,以及一个或多个文件以将所有内容添加到您的DI容器中。 对于中小型应用程序,SOLID非常容易出售。每个人都看到了可维护性的好处和便利。但是,他们只是没有看到SOLID在超大型应用程序中具有很好的价值主张。因此,我正在尝试寻找改善组织和管理的方法,以使我们度过不断增长的痛苦。 我以为基于最近完成的任务,可以更详细地说明文件量的示例。我被赋予一项任务,以在我们的一种较新的微服务中实现某些功能,以接收文件同步请求。收到请求后,服务将执行一系列查找和检查,最后将文档以及2个单独的数据库表保存到网络驱动器。 要将文档保存到网络驱动器,我需要一些特定的类: - …

10
“如果(0 ==值)…”弊大于利吗?[关闭]
当我在别人的代码中看到它时,这是我最讨厌的事情之一。我知道它的含义以及为什么有人这样做(例如,如果我不小心放了'='怎么办?”)。对我来说,这就像一个孩子下楼,大声地数步。 无论如何,这是我反对的论点: 它破坏了读取程序代码的自然流程。我们人类说“如果值等于零”而不是“如果值等于零”。 当您的条件中有一个赋值,或者实际上您的条件仅由该赋值组成时,现代编译器会警告您,是的,无论如何看起来都是可疑的 如果您是程序员,则在比较值时不要忘了加双'='。您可能会忘记加上“!”。测试不平等时。


16
在for循环内,如果可能,是否应该将中断条件移到条件字段中?[关闭]
有时我需要循环,需要这样的中断: for(int i=0;i<array.length;i++){ //some other code if(condition){ break; } } 我对写作感到不舒服 if(condition){ break; } 因为它消耗3行代码。我发现循环可以重写为: ↓ for(int i=0;i<array.length && !condition;i++){ //some other code } 所以我的问题是,如果可能的话,将条件移至条件字段以减少代码行是否是一种好习惯?


4
if('constant'== $ variable)与if($ variable =='constant')
最近,我已经在PHP中进行了大量工作,尤其是在WordPress框架中。我注意到许多形式的代码: if ( 1 == $options['postlink'] ) 我本来希望看到的地方: if ( $options['postlink'] == 1 ) 这是某些语言/框架中的约定吗?是否有任何理由使前一种方法比后者更好(从处理角度,解析角度甚至人的角度来看)? 还是仅仅是口味问题?我一直认为执行测试时会更好,因为针对某个常量测试的变量项位于左侧。似乎更好地映射了我们用自然语言提出问题的方式:“如果蛋糕是巧克力”而不是“如果巧克力是蛋糕”。

4
为什么#include <iostream.h>不好?
我正在阅读另一个线程,一个人向初学者询问有关C ++的书籍,一个回答的程序员写道: 警告:请避免所有带有“ hello world”字样的书都标明 #include &lt;iostream.h&gt; 我打开了我的C ++书,并确定它像上面的示例一样包含iostream标头。 为什么这么糟?学习C ++时,我还应牢记其他哪些指针? 背景:我精通C语言,下学期将开始学习C ++。

10
为什么要避免内联脚本编写?
一位知识渊博的朋友最近浏览了我帮助启动的网站,并评论了诸如“非常酷的网站,对源代码中的内联脚本感到羞耻”之类的内容。 我绝对可以删除发生内联脚本的位置;我隐约意识到这是“一件坏事”。我的问题是:内联脚本的真正问题是什么?是否存在重大的性能问题,还是仅是良好风格的问题?当还有其他事情需要处理时,我可以证明对上级的内联脚本方面立即采取行动是合理的吗?如果您打开一个网站并看了一眼源代码,什么因素会导致您说“嗯,在这里从事专业工作”,什么原因会使您从显然业余的工作中退缩? 好的,在写作中那个问题变成了多个问题。但是基本上,内联脚本-有什么关系?

6
检查`c> ='0'`或`c> = 48`更好吗?
与我的一些同事讨论之后,我遇到了一个“哲学上的”问题,即如何按照最佳实践来对待Java中的char数据类型。 假设有一个简单的场景(显然,这只是一个非常简单的示例,目的是为我的问题赋予实践意义),在给定String's'作为输入的情况下,您必须计算其中存在的数字字符的数量。 这些是2种可能的解决方案: 1) for(int i=0; i&lt;s.length(); i++) { if(s.charAt(i) &gt;= 48 &amp;&amp; s.charAt(i) &lt;= 57) { n++; } } 2) for(int i=0; i&lt;s.length(); i++) { if(s.charAt(i) &gt;= '0' &amp;&amp; s.charAt(i) &lt;= '9' ) { n++; } } 两者中哪一个更“干净”并符合Java最佳实践?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.