Questions tagged «coding-style»

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

9
“仅返回”的概念从何而来?
我经常跟程序员谁说:“ 不要把多个return语句相同的方法。 ”当我问他们告诉我的原因,我得到的是“ 编码标准是这么说的。 ”或者“ 这是令人困惑的。 ”当他们通过单个return语句向我展示解决方案时,代码对我来说看起来更难看。例如: if (condition) return 42; else return 97; “ 这很丑,您必须使用局部变量! ” int result; if (condition) result = 42; else result = 97; return result; 50%的代码膨胀如何使程序更易于理解?我个人觉得比较困难,因为状态空间刚刚增加了另一个很容易避免的变量。 当然,通常我会写: return (condition) ? 42 : 97; 但是许多程序员避免使用条件运算符,而是喜欢长格式。 “仅返回”的概念从何而来?产生这种约定是否有历史原因?

19
我应该尽早从函数返回还是使用if语句?[关闭]
我经常用两种格式编写这种函数,我想知道一种格式是否比另一种格式更受青睐,为什么。 public void SomeFunction(bool someCondition) { if (someCondition) { // Do Something } } 要么 public void SomeFunction(bool someCondition) { if (!someCondition) return; // Do Something } 我通常使用第一个编码,因为这是我的大脑在编码时的工作方式,尽管我认为我更喜欢第二个编码,因为它可以立即处理所有错误,而且我觉得它更易于阅读

30
大括号应该出现在自己的行上吗?[关闭]
大括号应该放在自己的行上吗?你怎么看待这件事? if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); } 还是应该 if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); } 甚至 if (you.hasAnswer()) you.postAnswer(); else you.doSomething(); 请建设性!解释为什么,分享经验,并以事实和参考作为支持。

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; ... …

15
开发人员坚持认为,语句不应具有否定条件,而应始终具有else块
我有一个相识的人,一个比我经验丰富的开发人员。我们在谈论编程实践,而他对“ if”语句的处理方式让我感到惊讶。他坚持一些关于if陈述的做法,我觉得这很奇怪。 首先,在if语句后应加上else语句,无论是否要放入其中。导致代码如下所示: if(condition) { doStuff(); return whatever; } else { } 其次,最好测试真值而不是假值。这意味着最好测试“ doorClosed”变量而不是“!doorOpened”变量 他的观点是,这使代码的工作更加清晰。 这让我很困惑,因为如果他想在不满足条件的情况下执行某些操作,那么这两个规则的组合会使他编写此类代码。 if(condition) { } else { doStuff(); return whatever; } 我对此的感觉是,它确实很丑陋和/或质量改进(如果有)可忽略不计。但是作为一个大三学生,我很容易怀疑自己的直觉。 所以我的问题是:这是好/坏/“无关紧要”的做法吗?这是惯例吗?

23
编写科学代码时干净编程
我不是真的写大型项目。我不是在维护庞大的数据库,也不是在处理数百万行代码。 我的代码主要是“脚本”类型的东西-测试数学功能或模拟某些东西的东西-“科学编程”。到目前为止,我从事的最长程序是几百行代码,而我从事的大多数程序都在150左右。 我的代码也很烂。前几天,当我试图找到我之前写的一个文件时,我意识到了这一点,但是我可能改写了,并且我没有使用版本控制,这可能使大量的您对我的愚蠢感到痛苦。 我的代码风格令人费解,并填充了过时的注释,这些注释指出了执行某项操作的替代方法或复制了几行代码。尽管变量名总是以非常好的描述性开始,但是当我按照某人想要测试的新内容进行添加或更改时,代码却被覆盖在顶部并被覆盖,因为我觉得这件事应该立即进行测试。有一个框架,我开始使用糟糕的变量名,并且文件进入了pot。 在我现在正在从事的项目中,我正处在所有这些阶段都重新吸引我的阶段。但是问题是(除了使用版本控制,以及为每个新迭代创建一个新文件并将其全部记录在某个地方的文本文件中,这可能会极大地改善这种情况)我真的不知道如何进行改进我实际的编码风格。 编写较小的代码是否需要单元测试?OOP怎么样?相对于处理较大的项目,什么样的方法适合在进行“科学编程”时快速编写优质,清晰的代码? 我之所以问这些问题,是因为编程本身通常并不复杂。它更多地是关于我正在通过编程测试或研究的数学或科学。例如,当两个变量和一个函数可能需要处理时,是否需要一个类?(考虑到一般情况下,程序的速度也应优先考虑更快的情况-当您运行25,000,000+个仿真时间步长时,您一定会希望它是这样。) 也许范围太广了,如果是的话,我对此表示歉意,但是从编程书籍的角度来看,它们似乎经常在大型项目中得到解决。我的代码不需要 OOP,而且已经很短了,所以它不像“哦,但是如果这样做的话,文件将减少一千行!” 我想知道如何在这些较小,更快的项目上“重新开始”并进行干净的编程。 我很乐意提供更多具体细节,但是我认为建议越笼统,就越有用。我正在用Python 3编程。 有人建议重复。让我明确地说,我并不是在谈论完全忽略标准编程标准。显然,存在这些标准是有原因的。但是,另一方面,如果可以完成一些标准的工作,写出说OOP的代码真的有意义吗?程序? 有例外。此外,除了简单的标准外,可能还有科学编程的标准。我也在问那些。这与编写科学代码时是否应忽略常规编码标准无关,而与编写干净的科学代码有关! 更新资料 只是以为我会添加“不超过一个星期以后”的更新。您的所有建议都非常有帮助。我现在使用版本控制-git,其中git kraken用于图形界面。它非常易于使用,并且彻底清理了我的文件-不再需要保留旧文件,也不再需要旧版本的代码“以防万一”。 我还安装了pylint并在所有代码上运行了它。最初,一个文件的分数为负。我什至不知道那怎么可能。我的主文件开始于〜1.83 / 10,现在为〜9.1 / 10。现在,所有代码都非常符合标准。我还用自己的眼睛跑过去,更新了已经消失的变量名,嗯,很糟糕,正在寻找要重构的部分。 特别是,我在这个网站上最近问了一个有关重构我的主要功能的问题,它现在更加整洁和短了很多:它不再是一个冗长,肿的if / else填充功能,现在不到一半的大小,更容易弄清楚发生了什么。 我的下一步是实施各种“单元测试”。我的意思是一个可以在主文件上运行的文件,该文件使用assert语句和try / excepts来查看其中的所有功能,这可能不是最好的方法,并且会导致重复的代码很多,但我会继续阅读并尝试找出如何做得更好。 我还对我已经编写的文档进行了重大更新,并向github存储库添加了补充文件,例如excel电子表格,文档和相关论文。现在看起来有点像一个真正的编程项目。 所以...我想这就是要说的:谢谢。

24
处理if(if else)else的优雅方法
这是个小问题,但是每次我必须编写类似这样的代码时,重复都会困扰我,但是我不确定任何解决方案都不会更糟。 if(FileExists(file)) { contents = OpenFile(file); // <-- prevents inclusion in if if(SomeTest(contents)) { DoSomething(contents); } else { DefaultAction(); } } else { DefaultAction(); } 这种逻辑有名称吗? 我也有点强迫症吗? 如果出于好奇,我愿意接受邪恶的代码建议...

14
循环引用有什么问题?
我今天参加了一次编程讨论,在那儿我做了一些声明,这些声明基本上是不合逻辑地假定循环引用(在模块,类之间,无论如何)通常是不好的。一经讲完,我的同事就会问:“循环引用有什么问题?” 我对此有很强烈的感觉,但我很难简洁而具体地表达自己的观点。我可能提出的任何解释都倾向于依赖于我也考虑过公理的其他项目(“不能孤立使用,因此无法测试”,“参与对象中状态发生变化时的未知/不确定行为”,等等。 。),但是我很想听听一个简洁的原因,为什么循环引用很糟糕,却没有我自己的大脑所经历的那种信念飞跃,多年来花了很多时间来弄清它们的理解,修正,并扩展各种代码。 编辑:我不是在问同质的循环引用,就像那些在双链表或指向父母的指针。这个问题的确是在询问“更大范围”的循环引用,例如libA调用libB,后者又回调libA。如果愿意,可将“模块”替换为“库”。到目前为止,感谢您提供所有答案!

18
短变量名有借口吗?
对于我目前正在使用的代码库,这已经变得非常沮丧。我们的许多变量名都很简短且没有描述性。我是该项目上剩下的唯一一名开发人员,并且没有关于它们大多数功能的文档,因此我不得不花更多的时间来跟踪它们的含义。 例如,我正在阅读一些更新光学表面定义的代码。开始时设置的变量如下: double dR, dCV, dK, dDin, dDout, dRin, dRout dR = Convert.ToDouble(_tblAsphere.Rows[0].ItemArray.GetValue(1)); dCV = convert.ToDouble(_tblAsphere.Rows[1].ItemArray.GetValue(1)); ... and so on 也许只是我一个人,但实际上它们告诉我的内容并没有告诉我,这使得进一步理解代码变得困难。我所知道的是,它是一个变量,该变量从某个地方的特定表中解析出特定行。经过一番搜索,我发现了它们的含义: dR = radius dCV = curvature dK = conic constant dDin = inner aperture dDout = outer aperture dRin = inner radius dRout = outer radius 我将它们重命名为基本上我在那里所拥有的。它延长了一些行,但是我觉得这是一个公平的权衡。但是,在许多代码中都使用了这种命名方案。我不确定这是来自开发人员的作品,他们是通过使用较旧的系统而学习的,还是背后有更深层的原因。是否有充分的理由以这种方式命名变量,还是我在遇到变量时将其更新为更具描述性的名称是否合理?

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

2
Python文件命名约定?
我已经看到了PEP-8的这一部分https://www.python.org/dev/peps/pep-0008/#package-and-module-names 我不清楚这是否指向模块/类/包的文件名。 如果我每个都有一个示例,文件名是否应该全部使用小写并带有下划线?或者是其他东西?

5
我是否也“聪明”,无法被小开发人员阅读?我的JS中的函数式编程过多?[关闭]
我是一名高级前端开发人员,使用Babel ES6进行编码。我们的应用程序的一部分进行了API调用,根据我们从API调用获得的数据模型,需要填写某些表格。 这些表格存储在一个双向链接的列表中(如果后端说某些数据无效,我们可以通过简单地修改清单。) 无论如何,有很多用于添加页面的函数,我想知道我是否太聪明了。这只是一个基本概述-实际的算法要复杂得多,有大量不同的页面和页面类型,但这将为您提供示例。 我认为,这是新手程序员处理该问题的方式。 export const addPages = (apiData) => { let pagesList = new PagesList(); if(apiData.pages.foo){ pagesList.add('foo', apiData.pages.foo){ } if (apiData.pages.arrayOfBars){ let bars = apiData.pages.arrayOfBars; bars.forEach((bar) => { pagesList.add(bar.name, bar.data); }) } if (apiData.pages.customBazes) { let bazes = apiData.pages.customBazes; bazes.forEach((baz) => { pagesList.add(customBazParser(baz)); }) } return pagesList; } …

15
为需要重复两次的函数编写函数始终是最佳实践吗?
我自己,当我需要做两次以上的事情时,我迫不及待地想编写一个函数。但是,当涉及到仅出现两次的事情时,就会有些棘手。 对于需要两行以上的代码,我将编写一个函数。但是当面对这样的事情时: print "Hi, Tom" print "Hi, Mary" 我很犹豫地写: def greeting(name): print "Hi, " + name greeting('Tom') greeting('Mary') 第二个似乎太多了,不是吗? 但是,如果我们有: for name in vip_list: print name for name in guest_list: print name 这是替代方法: def print_name(name_list): for name in name_list: print name print_name(vip_list) print_name(guest_list) 事情变得棘手,不是吗?现在很难决定。 您对此有何看法?

6
变量应命名为ID还是ID?[关闭]
这有点花哨,但我已经看到有人使用Id了: private int userId; public int getUserId(); 其他使用: private int userID; public int getUserID(); 其中一个比另一个更好吗?为什么?我在大型项目中看到这种做法非常不一致。如果我要设定一个大多数人会熟悉的标准?哪个是常规标准?

10
为什么我们大多数人都将“ i”用作循环计数器变量?
有没有人想过为什么我们中的很多人使用相同的变量名重复相同的模式? for (int i = 0; i < foo; i++) { // ... } 看来我曾经看着用途大多数代码i,j,k等为迭代变量。 我想我是从某个地方捡来的,但是我想知道为什么这在软件开发中如此普遍。是我们所有人都从C中获得的东西还是类似的东西? 我的脑后已经痒了一段时间。

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.