Questions tagged «readability»

可读性衡量代码易于阅读和理解。

19
您如何知道您是否编写了可读且易于维护的代码?
如何知道一个人创建的代码是否易于阅读,理解和维护?当然,从作者的角度来看,该代码具有可读性和可维护性,因为从一开始,作者就对其进行了编写和编辑。但是,必须有一个客观且可量化的标准,我们的行业可以据此衡量代码。 如果在没有原始作者的专业建议的情况下对代码执行以下操作,则可以达到这些目标: 可以阅读代码并从根本上理解逻辑流程。 可以更深入地了解代码在做什么以包括输入,输出和算法。 其他开发人员可以对原始代码进行有意义的更改,例如错误修复或重构。 可以编写新代码,例如利用原始代码的类或模块。 我们如何量化或衡量代码质量,使我们知道代码的可读性,可理解性和可维护性?

20
“ break”和“ continue”是否是不好的编程习惯?
我的老板一直提满不在乎地那么糟糕的程序员使用break,并continue在循环中。 我一直在使用它们,因为它们很有意义。让我向您展示灵感: function verify(object) { if (object->value < 0) return false; if (object->value > object->max_value) return false; if (object->name == "") return false; ... } 这里的要点是,首先该功能检查条件是否正确,然后执行实际功能。IMO同样适用于循环: while (primary_condition) { if (loop_count > 1000) break; if (time_exect > 3600) break; if (this->data == "undefined") continue; if (this->skip == true) continue; ... …

10
正则表达式语法设计的可读性差是否有特定原因?
程序员似乎都同意,代码的可读性比起短语法的单行代码要重要得多,但是单行代码可以工作,但是需要高级开发人员以任何程度的精度进行解释-但这似乎正是正则表达式设计的方式。有这个原因吗? 大家都同意,那selfDocumentingMethodName()比更好e()。为什么这也不适用于正则表达式? 在我看来,与其设计没有结构组织的单行逻辑语法,不如: var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})(0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/; 而且这甚至不是URL的严格解析! 取而代之的是,我们可以使一些流水线结构井井有条,可读性强,这是一个基本示例: string.regex .isRange('A-Z' || 'a-z') .followedBy('/r'); 除了最短的运算和逻辑语法外,正则表达式的极为简洁的语法还有什么优势?归根结底,正则表达式语法设计的可读性差是否有特定的技术原因?

6
具有单个引用的私有方法是否不好?
通常,我使用私有方法来封装可在类中多个位置重用的功能。但是有时我有一个大型的公共方法,可以将其分解为更小的步骤,每个步骤都使用自己的私有方法。这会使公共方法更短一些,但我担心强迫任何读取该方法的人跳到不同的私有方法会损害可读性。 对此有共识吗?拥有较长的公共方法,还是将它们分解成较小的块(即使每个块都不可重用)会更好吗?


18
长方法总是不好的吗?[关闭]
因此,环顾四周,我注意到一些关于长方法是不好的做法的评论。 我不确定我是否总是同意长方法是不好的(并希望别人提出意见)。 例如,我有一些Django视图,在将对象发送到视图之前会对其进行一些处理,一个长方法是350行代码。我编写了代码,以便处理参数-对查询集进行排序/过滤,然后对查询返回的对象进行一点点处理。 因此,处理主要是条件聚合,它具有足够复杂的规则,无法在数据库中轻松完成,因此我在主循环外部声明了一些变量,然后在循环期间对其进行了更改。 variable_1 = 0 variable_2 = 0 for object in queryset : if object.condition_condition_a and variable_2 > 0 : variable 1+= 1 ..... ... . more conditions to alter the variables return queryset, and context 因此,根据理论,我应该将所有代码分解为较小的方法,以使视图方法的最大长度为一页。 但是,过去曾经在各种代码基础上工作过,当您需要不断地从一种方法跳转到另一种方法来查明代码的所有部分,同时又将最外层的方法放在脑海中时,有时会发现它使代码的可读性降低。 我发现拥有一个格式合理的长方法,您可以更轻松地看到逻辑,因为它不会被内部方法隐藏。 我可以将代码分解为较小的方法,但是通常会有一个内部循环用于两三件事,因此这会导致代码更复杂,或者方法只会做两三件事而不做一件事(或者我可以为每个任务重复内部循环,但是这样会影响性能。 那么是否存在长方法并不总是不好的情况?当只在一个地方使用这些方法时,总会有一种情况吗? 更新:好像一年多以前我问了这个问题。 因此,在这里(混合)响应之后,我重构了代码,将其拆分为方法。这是一个Django应用,可从数据库中检索复杂的相关对象集,因此测试参数不可用(可能一年中的大部分时间都需要为测试用例创建相关对象。我有一个“昨天需要做的事情”类型)工作环境,然后再抱怨)。现在,修复该代码部分中的错误现在稍微容易一些,但并不是那么容易。 之前: #comment 1 bit of …

11
大布尔表达式比分解成谓词方法的同一个表达式更具可读性吗?[关闭]
什么更容易理解,一个大的布尔语句(相当复杂),或同一语句分解为谓词方法(很多额外的代码需要阅读)? 选项1,大布尔表达式: private static bool ContextMatchesProp(CurrentSearchContext context, TValToMatch propVal) { return propVal.PropertyId == context.Definition.Id && !repo.ParentId.HasValue || repo.ParentId == propVal.ParentId && ((propVal.SecondaryFilter.HasValue && context.SecondaryFilter.HasValue && propVal.SecondaryFilter.Value == context.SecondaryFilter) || (!context.SecondaryFilter.HasValue && !propVal.SecondaryFilter.HasValue)); } 选项2,条件分为谓词方法: private static bool ContextMatchesProp(CurrentSearchContext context, TValToMatch propVal) { return MatchesDefinitionId(context, propVal) && MatchesParentId(propVal) && (MatchedSecondaryFilter(context, propVal) …
63 c#  readability 

4
何时以及出于什么目的在C中将const关键字用于变量?
在这里审核我的代码时,const出现了使用关键字的问题。我了解它用于对变量执行只读行为。 我对它可能有用时的各种情况感到困惑。 是否应该在功能原型中为了清楚起见使用它? 在代码开发期间是否应将其用作安全措施? 是否应该在各种函数的范围内使用它们来声明运行时常量? 应该完全使用吗? 这些问题仅仅是我所面临的困惑的例子。一般的困惑是 什么时候const在C编程中使用关键字? 在C语言中使用此关键字可以获得哪些好处? 使用const关键字有什么弊端吗? 有人指出,由于所有这些问题,在我的问题的细节中,这个问题可能太广泛了。我只是想澄清这些问题只是为了澄清对主要问题的困惑。 何时以及出于什么目的在C中将const关键字用于变量? 也可以改写为 const在C`中正确使用关键字具有相同的优缺点。

9
可读性与可维护性,编写嵌套函数调用的特殊情况
我的嵌套函数调用的编码样式如下: var result_h1 = H1(b1); var result_h2 = H2(b2); var result_g1 = G1(result_h1, result_h2); var result_g2 = G2(c1); var a = F(result_g1, result_g2); 我最近转到了一个部门,该部门非常使用以下编码样式: var a = F(G1(H1(b1), H2(b2)), G2(c1)); 我的编码方式的结果是,在功能崩溃的情况下,Visual Studio可以打开相应的转储并指出发生问题的行(我特别担心访问冲突)。 我担心,如果因第一种方式编程的相同问题而导致崩溃,我将无法知道是哪个函数导致了崩溃。 另一方面,行上进行的处理越多,一页上得到的逻辑就越多,从而增强了可读性。 我的恐惧是正确的还是我缺少什么?总的来说,在商业环境中这是首选吗?可读性还是可维护性? 我不知道它是否相关,但是我们正在使用C ++(STL)/ C#。

4
PHP中变量的主要命名约定是什么:驼峰或下划线?[关闭]
人们的共识似乎是,应该遵循他们所开发平台的惯例。看到: 下划线还是驼峰式? 命名约定:camelCase与underscore_case? 然而,PHP似乎没有遵循任何的约定内部(没有惊喜出现),甚至方法和功能(例如mysqli::set_local_infile_default, PDOStatement::debugDumpParams); 但是,下划线似乎在函数名称中占主导地位。 但是,我找不到的是:PHP中变量的主要命名约定是什么?

12
故意拼写错误以避免保留字
我经常看到这样的代码,其中包含常见单词的故意拼写错误,无论好坏,这些单词已成为保留单词: klass或clazz为类:Class clazz = ThisClass.class kount用于计数在SQL:count(*) AS kount 我个人认为这会降低可读性。在我自己的实践中,我发现没有太多案例无法使用更好的名称- itemClass或recordTotal。 JavaDocs for Class中的示例在参数中显示了这一点: public <U> Class<? extends U> asSubclass(Class<U> clazz) 这是否显示合理的用例?

15
用单个下划线命名未使用的变量是不好的做法吗?
通常,当语言的语法要求我命名一个从未使用过的变量时,我将其命名为_。 在我看来,这减少了混乱,让我专注于代码中有意义的变量。我发现它不引人注目,因此可以产生“视线之外,头脑混乱”的效果。 我执行此操作的一个常见示例是在SQL中命名子查询。 SELECT * FROM ( SELECT * FROM TableA JOIN TableB ON TableA.ColumnB = TableB.ColumnB WHERE [ColumnA] > 10 ) _ --This name is required, but never used here ORDER BY ColumnC 另一个示例是未使用的循环变量。 array = [[] for _ in range(n)] # Defines a list of n empty lists …

15
使函数本质上重命名内置函数是否不明智?
在某些情况下,我对最小和最大函数感到困惑。 在一种情况下,当您使用函数取两个值中的更大或更小值时,就没有问题。例如, //how many autographed CD's can I give out? int howManyAutographs(int CDs, int Cases, int Pens) { //if no pens, then I cannot sign any autographs if (Pens == 0) return 0; //I cannot give away a CD without a case or a case without a CD return min(CDs, …

8
使用方法链接时,我是否重用对象或创建对象?
使用方法链接时: var car = new Car().OfBrand(Brand.Ford).OfModel(12345).PaintedIn(Color.Silver).Create(); 可能有两种方法: 重用同一对象,如下所示: public Car PaintedIn(Color color) { this.Color = color; return this; } Car在每个步骤中创建一个新的类型的对象,如下所示: public Car PaintedIn(Color color) { var car = new Car(this); // Clone the current object. car.Color = color; // Assign the values to the clone, not the original object. return …


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.