Questions tagged «readability»

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

4
我们应该重命名重载的方法吗?
假定包含以下方法的接口: Car find(long id); List<Car> find(String model); 像这样重命名它们更好吗? Car findById(long id); List findByModel(String model); 实际上,使用此API的任何开发人员都无需查看接口即可知道初始find()方法的可能参数。 所以我的问题更笼统:在代码中使用重载方法有什么好处,因为它会降低可读性?

4
自引用方法链接有任何实际缺点吗?
我最近建议为某个项目中的某个类实施链接方法,以便可以提高代码的可读性。我得到了一个“流畅的接口,不应该只是为了方便而实现,而是为了语义”,并拒绝了我的建议。我回答我不是在建议使用流畅的界面,而是将方法自身链接(可以相互混淆,请在底部阅读)以提高可读性和编码舒适度,但该建议再次遭到拒绝。 无论如何,这让我想到也许总是以不应该返回任何内容的方法(例如,setter)返回“ this”,这可能会导致一种不好的做法。 我的问题是:可以将先前的惯例视为不良做法或滥用吗?为什么?我认为没有任何性能缺陷,还是存在?

4
如何为不返回任何内容的纯方法编写测试?
我有一堆处理值验证的类。例如,一个RangeValidator类检查一个值是否在指定范围内。 每个验证器类都包含两个方法:is_valid(value),该方法返回True或False取决于值,并ensure_valid(value)检查指定的值,如果值有效,则不执行任何操作,或者,如果值与预定义的规则不匹配,则抛出特定的异常。 当前有两种与此方法关联的单元测试: 传递无效值并确保引发异常的代码。 def test_outside_range(self): with self.assertRaises(demo.ValidationException): demo.RangeValidator(0, 100).ensure_valid(-5) 传递有效值的那个。 def test_in_range(self): demo.RangeValidator(0, 100).ensure_valid(25) 尽管第二项测试已完成工作-如果抛出异常,则失败,如果ensure_valid没有抛出异常,则成功,但assert内部没有s 的事实看起来很奇怪。读过此类代码的人会立即问自己,为什么要进行似乎无所事事的测试。 当测试不返回值且没有副作用的方法时,这是当前的做法吗?还是应该以其他方式重写测试?或者只是发表评论以解释我在做什么?

4
哪种方法可以终止阅读循环?
当您需要遍历读取器的地方时,要读取的项目数是未知的,唯一的方法是保持读取直到结束。 这通常是您需要无限循环的地方。 还有就是始终true表示必须有一个break或return声明的某处块内。 int offset = 0; while(true) { Record r = Read(offset); if(r == null) { break; } // do work offset++; } 有双读for循环方法。 Record r = Read(0); for(int offset = 0; r != null; offset++) { r = Read(offset); if(r != null) { // do work } } …

6
信号是否使源代码更易于阅读?
在大多数编程语言中,变量没有像PHP中那样具有识别字符。在PHP中,必须在变量前面加上$字符。 例; var $foo = "something"; echo $foo; 我正在为业务应用程序开发一种新的脚本语言,而我的目标用户没有编程背景。这些字符是否使代码更易于阅读和使用? PHP使用的原因之一$是因为没有它,PHP无法分辨名称是函数引用还是变量引用。这是因为该语言允许奇怪地引用函数。因此,该$符号可帮助解析器分隔名称空间。 我的解析器中没有这个问题。因此,我的问题仅在于可读性和易用性。我已经用PHP编写了多年代码,以至于我$foo很容易将其识别为变量。我只是给该标识符一个偏见偏好吗?

1
如何编写可读的Clojure代码?
我是Clojure的新手。我可以理解我编写的代码,但是以后很难理解。 括号很难匹配。 在各种情况下,有关命名约定和缩进的通用约定是什么? 例如,我写了一个示例性的解构示例来理解,但是第二次看起来却完全不可读。 (defn f [{x :x y :y z :z [a b c] :coll}] (print x " " y " " z " " a " " b " " c)) 在进行解构的情况下,最好直接在参数级别执行此操作,还是启动一个let表格然后再继续执行?

4
强调否定
我只是在编写带有相当长的属性名称的if语句,并且遇到了这个问题。 假设我们有一个if语句,如下所示: if(_someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue && !_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant) { //Do something } 第二个属性是布尔类型,像 if(boleanValue == true) 有没有更好的方法来强调否定然后放在!前面。在我看来,在阅读代码时可以很容易地对此进行监督,并且可能会导致调试问题

5
函数式程序的可读性
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 我对此感到很好奇,因为我在学习任何功能语言之前都回想起它们,我认为它们全都是可怕,可怕,难以理解的。既然我已经知道Haskell和f#,我发现花更少的时间来阅读更少的代码,但是那一点代码的功能远比命令语言中的等效功能要多得多,因此感觉像是纯收益,而且我并不是很极端在功能上练习。 这是我的问题,我不断地从OOP人士那里听到,功能样式非常难以理解。我很好奇是否是这种情况,并且我在自欺欺人,或者如果他们花时间学习一种功能语言,那么整个样式将不再比OOP更难以理解? 是否有人看到过任何证据或轶事,他们以一种或另一种方式频繁地说这句话?如果实际上编写功能的可读性较低,那么我不想继续使用它,但是我真的不知道是否是这种情况。

4
将标志用于“分组”枚举是否错误?
我的理解是,[Flag]枚举通常用于可以组合的事物,其中各个值并不相互排斥。 例如: [Flags] public enum SomeAttributes { Foo = 1 << 0, Bar = 1 << 1, Baz = 1 << 2, } 凡SomeAttributes值可以是一个组合Foo,Bar和Baz。 在更复杂的现实场景中,我使用一个枚举来描述DeclarationType: [Flags] public enum DeclarationType { Project = 1 << 0, Module = 1 << 1, ProceduralModule = 1 << 2 | Module, ClassModule = 1 …
12 c#  .net  readability  enum 

5
代码重复与多负责任的方法
我尝试遵循“单一职责原则”(SRP),并且也省略代码重复。但是,通常在某些地方存在代码重复,这些代码重复不过是调用的代码块,这些代码块无法将其提取到至少有意义的命名方法中: DoAction1(); DoAction2(); if (value) DoAction3(); DoAction4(); 将此类代码提取到方法中的最佳方法是什么?如何命名?

3
“静态”作为关于无状态的语义线索?
我最近在Java中进行了一个中型项目的重构,以返回并添加单元测试。当我意识到模拟单例和静态模型是多么痛苦时,我终于“明白了”我一直以来一直在阅读的内容。(我是需要从经验中学习的人之一。哦。) 因此,既然我正在使用Spring创建对象并将它们连接在一起,那么我就不用去左右static关键字了。(如果我有可能要模拟它,那么它在与Math.abs()相同的意义上并不是真正的静态,对吧?)问题是,我已经习惯于使用static来表示方法不依赖在任何对象状态下。例如: //Before import com.thirdparty.ThirdPartyLibrary.Thingy; public class ThirdPartyLibraryWrapper { public static Thingy newThingy(InputType input) { new Thingy.Builder().withInput(input).alwaysFrobnicate().build(); } } //called as... ThirdPartyLibraryWrapper.newThingy(input); //After public class ThirdPartyFactory { public Thingy newThingy(InputType input) { new Thingy.Builder().withInput(input).alwaysFrobnicate().build(); } } //called as... thirdPartyFactoryInstance.newThingy(input); 因此,这就是敏感的地方。我喜欢旧方法,因为大写字母告诉我,就像Math.sin(x)一样,ThirdPartyLibraryWrapper.newThingy(x)每次都以相同的方式执行相同的操作。没有对象状态可以更改对象执行我要执行的操作的方式。这是我正在考虑的一些可能的答案。 没有其他人有这种感觉,所以我有问题。也许我只是还没有真正内部化OO的做事方式!也许我在用Java编写,但在FORTRAN或类似语言中思考。(由于我从未写过FORTRAN,这会给人留下深刻的印象。) 也许出于论证代码的目的,我正在使用静态作为不变性的一种代理。话虽这么说,有什么线索 要我在我的人一起,以保持它的到来代码知道什么是有状态的,什么不是? 如果我选择好的对象隐喻,也许应该只是免费提供?例如thingyWrapper,听起来好像它的包装状态是独立的,而包装状态Thingy本身可能是可变的。同样,thingyFactory听起来应该是不变的,但在创建时可能会选择不同的策略。

6
哪个更易于维护-通过if / else或布尔表达式进行布尔赋值?
哪个将更易于维护? if (a == b) c = true; else c = false; 要么 c = (a == b); 我尝试在“代码完成”中查找,但是找不到答案。 我认为第一个更具可读性(您可以从字面上大声读出来),我也认为这使其更易于维护。第二个当然更有意义并减少了代码,但是我不确定它对于C#开发人员是否可维护(我希望在Python中会更多地看到这种用法)。

6
需要使我的代码对团队中的其他程序员更具可读性
我正在delphi中工作一个项目,并且正在为该应用程序创建安装程序,主要包括三个部分。 PostgreSQL安装/卸载 myapplication(使用nsi创建myapplication的安装程序)安装/卸载。 通过脚本(批处理文件)在Postgres中创建表。 一切正常运行,但是如果出现故障,我创建了一个LogToFileger,它将在过程的每个步骤中记录LogToFile, 如下所示 LogToFileToFile.LogToFile('[DatabaseInstallation] : [ACTION]:Postgres installation started'); 函数LogToFileToFile.LogToFile()This将内容写入文件。这工作得很好,但是问题是这使代码混乱了,因为它变得很难读取代码,因为一个ca只能LogToFileToFile.LogToFile()在代码中到处看到函数调用。 一个例子 if Not FileExists(SystemDrive+'\FileName.txt') then begin if CopyFile(PChar(FilePathBase+'FileName.txt'), PChar(SystemDrive+'\FileName.txt'), False) then LogToFileToFile.LogToFile('[DatabaseInstallation] : copying FileName.txt to '+SystemDrive+'\ done') else LogToFileToFile.LogToFile('[DatabaseInstallation] : copying FileName.txt to '+SystemDrive+'\ Failed'); end; if Not FileExists(SystemDrive+'\SecondFileName.txt') then begin if CopyFile(PChar(FilePathBase+'SecondFileName.txt'), PChar('c:\SecondFileName.txt'), False) then LogToFileToFile.LogToFile('[DatabaseInstallation] …

10
“数学”函数应该遵循数学符号吗?
我想这个问题将立即被标记为主观的,但是您认为哪个更好: double volume(double pressure, double n_moles, double temperature) { return n_moles * BOLTZMANN_CONSTANT * temperature / pressure; } 要么 double volume(double P, double n, double T) { return n*R*T/P; } 换句话说,实现某些方程式的函数应该遵循该方程式的符号,还是应该使用更多详细的名称?

12
布尔逻辑的可维护性-是否需要语句嵌套?
其中哪一个对可维护性更好? if (byteArrayVariable != null) if (byteArrayVariable .Length != 0) //Do something with byteArrayVariable 要么 if ((byteArrayVariable != null) && (byteArrayVariable.Length != 0)) //Do something with byteArrayVariable 我更喜欢阅读和编写第二篇文章,但我想起在代码中阅读完整内容是,这样做不利于可维护性。 这是因为if如果第一部分为假,并且并非所有语言都这样做,则您依赖语言来不评估第二部分。(第二部分如果使用null评估,将引发异常byteArrayVariable。) 我不知道这是否真的值得担心,我想就这个问题提供一般反馈。 谢谢。

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.