Questions tagged «coding-style»

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

3
在测试和生产代码之间复制常量?
在测试和真实代码之间复制数据是好是坏?例如,假设我有一个Python类FooSaver,该类将具有特定名称的文件保存到给定目录: class FooSaver(object): def __init__(self, out_dir): self.out_dir = out_dir def _save_foo_named(self, type_, name): to_save = None if type_ == FOOTYPE_A: to_save = make_footype_a() elif type == FOOTYPE_B: to_save = make_footype_b() # etc, repeated with open(self.out_dir + name, "w") as f: f.write(str(to_save)) def save_type_a(self): self._save_foo_named(a, "a.foo_file") def save_type_b(self): self._save_foo_named(b, "b.foo_file") 现在,在我的测试中,我想确保所有这些文件均已创建,因此我想说一下这样的话: …

7
保持我的类和方法尽可能小?
几天前,我正在与一名软件工程博士候选人交谈,在某个时候她对我说: 保持类和方法尽可能的小 我想知道这是否总是一个好习惯。 我的意思是,举个例子,只上两副服装值得吗?例如,在某些方法中,我需要使用成对的整数。我应该写一个“ PairOfIntgers”类吗? 这种思维方式可以将代码“破坏”太多吗?

9
仅使用功能集中通用代码是否是一种好习惯?
我经常遇到这个问题。例如,我目前正在编写一个读取函数和一个写入函数,它们都检查是否buf为NULL指针以及mode变量是否在一定范围内。 这是代码重复。可以通过将其移入其自身的功能来解决。但是我应该吗?这将是一个非常贫乏的功能(不会做很多事情),而是局部化的(所以不是通用的),并且不能很好地独立运行(除非您知道它的位置,否则无法确定您的需求)用过的)。另一个选择是使用宏,但我想在这篇文章中谈谈功能。 那么,您应该使用类似这样的功能吗?优缺点都有什么?

12
要为“ false”的布尔函数参数添加正确的注释?
从一些开源项目中,我收集了以下编码样式 void someFunction(bool forget); void ourFunction() { someFunction(false /* forget */); } 我一直对false这里的含义感到怀疑。它的意思是“忘记”,还是“忘记”是指它的相应参数(如上述情况),而“假”是要否定它? 哪种风格最常用,什么是避免歧义的最佳方法(或某些更好的方法)?

7
编码样式问题:我们是否应该具有接受参数,修改参数然后返回该参数的函数?
关于这两种做法仅仅是同一枚硬币的两个方面,还是一个真的更好,我正在和我的朋友进行辩论。 我们有一个函数,该函数需要一个参数,填写其中的一个成员,然后返回它: Item predictPrice(Item item) 我相信,由于它可以处理传入的同一对象,因此没有必要继续返回该项目。实际上,从调用者的角度来看,如果有任何事情,它将使您感到困惑,因为您可以期望它返回一个新项目,而不会。 他声称这没有什么区别,即使它确实创建了一个新Item并返回它也没有关系。我强烈不同意,原因如下: 如果您对传入的项有多个引用(或使用指针或其他方式),则分配一个新对象并返回该对象具有重要意义,因为这些引用将是不正确的。 在非内存托管语言中,分配新实例的函数声明了内存的所有权,因此我们将必须实现在某个时候调用的清理方法。 在堆上分配可能很昂贵,因此,对于被调用函数是否执行此操作很重要。 因此,我认为能够通过方法签名查看是修改对象还是分配新对象非常重要。结果,我认为由于函数仅修改传入的对象,因此签名应为: void predictPrice(Item item) 在我使用过的每个代码库中(公认的C和C ++代码库,而不是Java,这都是我们正在使用的语言),上述样式基本上得到了遵守,并且由经验更为丰富的程序员所遵循。他声称,由于我的代码库和同事的样本量在所有可能的代码库和同事中所占的比例很小,因此,我的经验不能真正表明一个人是否优越。 那么,有什么想法吗?

3
在Python中的同一文件中可以有多个类吗?
经过数年的Java和PHP生涯,我才刚刚进入Python世界。尽管语言本身非常简单明了,但我仍在努力解决一些我无法解决的“小问题”,并且到目前为止,我在众多文档和教程中都找不到答案。 对于有经验的Python从业者来说,这个问题似乎很愚蠢,但是我确实想要一个答案,因此我可以继续使用该语言: 在Java和PHP中(虽然不是严格要求),但您最好将每个class文件写在自己的文件中,class最佳做法是使用文件名。 但是在Python,至少在我检查的教程,这是确定要在同一个文件中的多类。 该规则是在生产型,可部署的代码中保留吗?还是为了简洁起见,仅在具有教育意义的代码中执行?

7
是否应根据案件的稀有性或处理困难来安排陈述?
在我现在正在编写的一些代码中,我有类似以下内容: if (uncommon_condition) { do_something_simple(); } else { do(); something(); long(); and(); complicated(); } 我的一部分认为“编写的方式很好。应该先处理简单的案例,然后再处理更复杂的案例。” 但是另一部分说:“不!else代码应该放在之下if,因为它if是用于处理异常情况,else并且用于处理所有其他情况。” 哪个是正确的或更可取的?

15
我讨厌我们的一种编码标准,这使我发疯,如何处理它?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 免责声明:标题没有夸张,但仍然让我感到不舒服。我只是要诚实地表达,所以要加一点盐。只是假装我谈论的是编码标准,你不喜欢的工作。 编辑:我不喜欢它的事实,并不意味着我不使用它或不执行它。 我决定本着如何超越您不喜欢的标准的精神来问这个问题,而不是寻求有关如何更好地争论如何进行更改的帮助(尽管对最后一部分的任何评论都值得赞赏)。此外,我在一家大公司工作,这种改变已经存在了很长时间,而且影响很小的事情是不可能的。 该标准是专用线路上的开口弯括号标准: somefunction() { //... } 代替*明显优越*(注意开玩笑/沮丧的语气): somefunction() { //... } 我个人反对该标准: 它使代码膨胀:多余的多余行 很难键入:尽管这可能只是我在标准方面的苦苦挣扎,但我知道额外的一次击键并没有那么糟糕。 不容易阅读:我开始阅读函数声明,if语句或任何其他范围堆叠语句,而我不必寻找左括号。嵌套块与此标准只是出于某种原因使我生气。 由具有Microsoft IDE背景的人使用:我认为标准背后应该有一个有争议的理由(或更多理由),而不仅仅是范式。 他们的论点(以及我内部反驳他们的方式): 易于阅读,因为您可以立即看到块的开始和结束位置:我不明白这一点,如果您不知道块的所有权,那么块有什么用,所以您必须向后阅读。 我在Microsoft IDE中使用它,然后我喜欢它:呃...好吗? 在标准中:*压脚* 我是唯一一个对特定标准持固执己见的人吗?您如何克服这些标准?您对此特殊标准应该是什么持保留意见(只是为了好玩)?

5
有众所周知的PowerShell编码约定吗?
在PowerShell中编程时是否有任何定义明确的约定? 例如,在要长期维护的脚本中,我们是否需要: 使用真实的cmdlet名称还是别名? 完整或部分指定cmdlet参数名称(dir -Recurse与相对dir -r) 在为cmdlet指定字符串参数时,是否将它们括在引号(New-Object 'System.Int32'与New-Object System.Int32 在编写函数和过滤器时,是否指定参数的类型? 您是否在(正式)正确的情况下编写cmdlet? 对于像BEGIN...PROCESS...END这样的关键字,您仅将它们写为大写吗? 似乎MSDN缺少用于PowerShell的编码约定文档,而对于C#,则存在这样的文档。

9
代码格式准则有多重要?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 编码标准在任何软件开发组织中都很常见,但是遵循这些标准有多重要?我可以理解需要一些一致性,但是当处理简单的事情(例如花括号的位置,行长等)时,我不确定过于严格的标准会对软件开发做出很大的贡献。 您的代码可读性不是更重要,不符合预先定义的标准吗?无论如何,它们似乎更像是……准则。

16
否则块会增加代码复杂度吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 这是一个非常简化的示例。这不一定是特定于语言的问题,我想请您忽略函数编写的许多其他方式以及可以对其进行的更改。。颜色是一种独特的类型 string CanLeaveWithoutUmbrella() { if(sky.Color.Equals(Color.Blue)) { return "Yes you can"; } else { return "No you can't"; } } 我遇到的很多人,ReSharper和这个人(其评论提醒我我一直想问这个问题已经有一段时间了)建议重构代码以删除else留下的代码块: (我不记得大多数人所说的话,否则我可能不会问这个) string CanLeaveWithoutUmbrella() { if(sky.Color.Equals(Color.Blue)) { return "Yes you can"; } return "No you can't"; } 问题:不包括else块会导致复杂性增加吗? else通过说明两个模块中的代码直接相关的事实,我给人的印象更直接地表明了意图。 另外,我发现我可以防止逻辑上的细微错误,尤其是在以后对代码进行修改之后。 以我的简化示例的这种变化形式为例(or由于这是故意简化的示例,因此请忽略运算符): bool CanLeaveWithoutUmbrella() { if(sky.Color != Color.Blue) { …

8
一个名为Class的Class?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 这更多是一个风格问题,但这是我目前正在考虑的我的一个项目。 假设您正在创建对学校进行建模的应用程序。因此存在诸如学生,学校等实体。现在,一切都很好而且很直观,直到您上课为止,因为(在大多数语言中)Class是保留字。那么,如果这Class是一个保留关键字,那么您将如何称呼这种模拟学校课程的实体?

4
前向声明与包含
Reduce the number of #include files in header files. It will reduce build times. Instead, put include files in source code files and use forward declarations in header files. 我在这里阅读。http://www.yolinux.com/TUTORIALS/LinuxTutorialC++CodingStyle.html。 因此它说如果头文件中的类(类A)不需要使用某个类(类B)的实际定义。那时我们可以使用前向声明,而不是包括特定的(B类)头文件。 问题:如果标头中的类(类A)没有使用特定类(类B)的实际定义,那么正向声明如何帮助减少编译时间?
18 c++  coding-style 

6
带中断/返回的Foreach循环与带显式不变和后置条件的while循环
这是检查值是否在数组中的最流行的方法(在我看来): for (int x : array) { if (x == value) return true; } return false; 但是,在我也许是Wirth或Dijkstra读过的一本书中,据说这种风格更好(与内部退出的while循环相比): int i = 0; while (i < array.length && array[i] != value) i++; return i < array.length; 这样,附加的退出条件就成为循环不变式的显式部分,没有隐藏的条件,并且在循环内退出,一切都变得更加明显,并且结构化编程的方式更加明显。我通常优选后者的图案尽可能和所使用的for从-loop只迭代a到b。 但是我不能说第一个版本不太清楚。至少对于初学者来说,它甚至更清晰,更容易理解。所以我仍然在问自己一个问题哪个更好? 也许有人可以对其中一种方法给出很好的理由? 更新:这不是多个函数返回点,lambda或本身在数组中查找元素的问题。这是关于如何编写具有比单个不等式更复杂的不变式的循环。 更新:好的,我看到回答和评论的人的观点:我在这里混入了foreach循环,它本身已经比while循环更加清晰易读。我不应该那样做。但这也是一个有趣的问题,因此我们将其保留为:foreach循环和内部一个额外条件,或者while循环具有一个显式循环不变性和after后置条件。看来带有条件和退出/中断的foreach循环是成功的。我将创建一个没有foreach循环的附加问题(用于链接列表)。

6
我是否为了较长的“列”代码而牺牲了较短的变量名?
我是CS课的业余程序员,试图学习适当的编程技能。这就是我的代码的样子,它的边缘扩展到103列。 int extractMessage(char keyWord[25], char cipherText[17424], int rowSize, char message[388]) { int keyColumn = 0; int cipherColumn = 0; int offset = 1; int nextWord = 1; int lengthOfWord = 0; int lengthOfCipher = 0; lengthOfWord = length(keyWord); lengthOfCipher = length(cipherText); while (keyWord[keyColumn] != cipherText[cipherColumn]) { cipherColumn++; if (keyWord[keyColumn + …
17 c  coding-style 

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.