Questions tagged «coding-style»

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

12
如果长函数具有内部结构,是否可以接受?
当使用支持嵌套函数(例如Python和D)的语言处理复杂算法时,我经常编写大型函数(因为算法很复杂),但是通过使用嵌套函数来构造复杂代码来减轻这种情况。即使大型功能(超过100行)仍通过使用嵌套功能在内部进行了结构合理,仍然被认为是邪恶的? 编辑:对于那些不熟悉Python或D的人,这些语言中的嵌套函数还允许访问外部函数范围。在D中,此访问权限允许外部范围内的变量发生突变。在Python中,它仅允许读取。在D中,可以通过声明显式禁用对嵌套函数中的外部范围的访问static。

7
在C和C ++中使用无符号整数
我有一个很简单的问题,困扰了我很长时间。我正在处理网络和数据库,因此要处理的许多数据是32位和64位计数器(无符号),32位和64位标识ID(也没有用于符号的有意义的映射)。我几乎从不处理任何可以表示为负数的实际单词问题。 我和我的同事经常使用无符号的类型,如uint32_t和uint64_t对这些问题,并因为它发生如此频繁,我们也将它们用于数组索引和其他常见的整数用途。 同时,我正在阅读的各种编码指南(例如Google)都不鼓励使用无符号整数类型,据我所知,Java和Scala都没有无符号整数类型。 因此,我想不出正确的做法:在我们的环境中使用带符号的值将非常不便,同时编码指南要求严格执行此操作。
23 c  coding-style 

5
重新格式化和版本控制
代码格式很重要。甚至缩进也很重要。一致性比微小的改进更为重要。但是,项目通常从第一天起就没有清晰,完整,可验证和强制的样式指南,并且重大改进可能会在任何一天出现。也许你发现 SELECT id, name, address FROM persons JOIN addresses ON persons.id = addresses.person_id; 可以更好地写成/比 SELECT persons.id, persons.name, addresses.address FROM persons JOIN addresses ON persons.id = addresses.person_id; 同时在查询中添加更多列。也许这是代码中所有四个查询中最复杂的查询,或者成千上万个简单查询。无论过渡有多困难,您都认为值得。但是,如何跟踪主要格式更改中的代码更改?您可以放弃并说“这是我们再次开始的地方”,也可以重新格式化整个存储库历史记录中的所有查询。 如果您正在使用像Git这样的分布式版本控制系统,则可以还原到有史以来的第一次提交,然后从那里重新格式化为当前状态。但这是一项艰巨的工作,其他所有人都必须在工作进行期间暂停工作(或为所有合并的母亲做好准备)。有没有更好的方法可以更改历史记录,从而获得最好的结果: 所有提交中的样式相同 最少的合并工作 ? 需要澄清的是,这与启动项目时的最佳实践无关,而是在大型重构被视为Good Thing™却又想获得可追溯的历史时应该怎么做?如果这是确保您的版本始终保持相同工作的唯一方法,则永远不要重写历史记录,这是伟大的,但是对于开发人员而言,全新重写的好处是什么?特别是如果您有方法(测试,语法定义或编译后的相同二进制文件)可以确保重写后的版本与原始版本完全一样?


10
可空类型是否比魔术数字更可取?
最近我一直在和一位同事辩论。我们专门使用C#,但这可以应用于具有可空类型的任何语言。假设您有一个代表最大值的值。但是,此最大值是可选的。我认为可为空的数字是可取的。我的同事援引先例,赞成使用零。当然,诸如网络套接字之类的东西通常使用零来表示无限超时。如果我今天要编写处理套接字的代码,我个人会使用可为空的值,因为我认为它可以更好地表示没有超时这一事实。 哪个代表更好?两者都需要条件检查其含义为“ none”的值,但是我相信可以为null的类型可以更好地传达意图。

15
在新行上列出每个函数/方法参数是一个坏主意,为什么?
我与某人合作,每当他们调用一个函数时,他们会将参数放在换行符上,例如 aFunction( byte1, short1, int1, int2, int3, int4, int5 ) ; 我觉得这很烦人,因为这意味着代码不是很紧凑,因此我必须上下扫描更多内容才能真正理解逻辑。我很想知道这是否真的是不好的做法,如果是,我如何说服他们不要这样做?

6
sizeof样式:sizeof(type)或sizeof变量?
我已经看到了两种sizeof用于与内存相关的操作的样式(例如in memset或malloc): sizeof(type)和 sizeof variable 要么 sizeof(variable) 您希望使用哪种样式,还是将两种样式混合使用?何时使用每种样式?每种样式的优缺点是什么,以及何时使用它们? 作为示例,我可以看到以下两种情况,其中一种样式有帮助,而另一种则无济于事: 当您得到错误的指针间接指示时: type *var; ... memset(var, 0, sizeof var); /* oops */ 当类型更改时: new_type var; /* changed from old_type to new_type */ ... memset(&var, 0, sizeof(old_type)); /* oops */
22 c  coding-style 

5
非平凡的条件语句是否应移至循环的初始化部分?
我从stackoverflow.com上的这个问题中得到了这个主意 以下是常见的模式: final x = 10;//whatever constant value for(int i = 0; i < Math.floor(Math.sqrt(x)) + 1; i++) { //...do something } 我要说明的一点是条件语句有些复杂,不会改变。 这样,是否最好在循环的初始化部分中声明它? final x = 10;//whatever constant value for(int i = 0, j = Math.floor(Math.sqrt(x)) + 1; i < j; i++) { //...do something } 这更清楚吗? 如果条件表达式很简单怎么办 final …

6
科学代码是一个足以忽略普通编码标准的领域吗?
最近,我一直在努力思考以下事实。 一方面,对于所谓的“健康”,“干净”,“编写良好”等代码,有大量的编码准则和标准。参见似乎也在此处广泛讨论的“清洁代码”。规则示例:7行长方法和1或2级缩进。不遵循的代码将因可维护性差而死亡。 另一方面,我可以使用OpenCV,OpenCascade,VTK等。这是科学代码。他们有2页长的方法(我自己说),OpenCascade的方法或类分为10个文件(这里没有笑话),VTK有时也很混乱。然而,这些项目繁荣起来,得到了维护和广泛使用! 哪里有收获?我们是否被允许以一种可以正常工作的方式编写科学的,繁重的代码,并且我们可以对其进行维护?您是否为此类项目制定了一套单独的标准? 也许这是一个幼稚的问题,但是我似乎在一个编程空白中试图建立一套规则,该如何做和不做某事,这就是我在高中时被教导要工作的方式。自从我毕业以来,我对所要做的事情(主要是编程)几乎没有指导性的支持-没人会教。

5
如何分解构造函数?
可以说我有一个Enemy类,构造函数如下所示: public Enemy(String name, float width, float height, Vector2 position, float speed, int maxHp, int attackDamage, int defense... etc.){} 这看起来很糟糕,因为构造函数有很多参数,但是当我创建一个Enemy实例时,我需要指定所有这些内容。我还希望在Enemy类中具有这些属性,以便可以遍历它们的列表并获取/设置这些参数。我当时想也许可以将Enemy子类化为EnemyB,EnemyA,同时对它们的maxHp和其他特定属性进行硬编码,但是如果我想遍历一个Enemy列表(由EnemyA,EnemyB和EnemyC)。 我只是想学习如何干净地编码。如果有所作为,我将使用Java / C ++ / C#。朝正确方向的任何观点表示赞赏。

3
连续单词有数字的情况下如何驼峰?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 只是想知道是否有人在这个拐角处就可以遵循惯例。我确实使用过Java,但认为C#人员也可能有一些不错的见识。 假设我正在尝试命名一个类,其中该类名称中的两个连续单词均为数字(请注意,同一问题可能会问到标识符名称)。无法得到一个很好的例子,但请考虑一下“ IEEE 802 16位值”之类的内容。 如果接受诸如的类名,则可以将连续的首字母缩写词组合在一起HttpUrlConnection。但这严重地使我有点想上课的名字IEEE80216BitValue。如果我必须选择,那会比IEEE802_16BitValue看起来像是一个严重的错误还要糟糕。对于较小的数字,我会考虑,IEEE802SixteenBitValue但这并不能很好地扩展。 外面有公约吗?似乎只有Microsoft的命名准则是对缩略语命名进行足够详细描述以完成工作的准则,但是没有人解决过类名中的数字。

4
使用方法链接构建对象的成语叫什么名字?
我经常使用一种模式,在该模式下,我使用方法链来设置一个对象,类似于Builder或Prototype模式,但没有在每个方法调用中创建新对象,而是修改了原始对象。 例: new Menu().withItem("Eggs").withItem("Hash Browns").withStyle("Diner"); 只是想知道这种模式是否有名称,以及是否将其视为反模式,因为尽管它可以更流畅地阅读,但它可能导致较长的方法链。

12
“一件事情”范例何时会变得有害?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 为了便于讨论,下面是一个示例函数,该函数逐行打印给定文件的内容。 版本1: void printFile(const string & filePath) { fstream file(filePath, ios::in); string line; while (std::getline(file, line)) { cout << line << endl; } } 我知道建议函数在一个抽象级别上做一件事。对我来说,尽管上面的代码几乎做一件事,而且是原子的。 一些书(例如Robert C. Martin的Clean Code)似乎建议将上述代码分解为单独的函数。 版本2: void printFile(const string & filePath) { fstream file(filePath, ios::in); printLines(file); } …

9
LINQ样式首选项[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我每天都在编程中经常使用LINQ。实际上,我很少(如果有的话)使用显式循环。但是,我发现我不再使用类似SQL的语法。我只是使用扩展功能。所以宁愿说: from x in y select datatransform where filter 我用: x.Where(c => filter).Select(c => datatransform) 您更喜欢哪种LINQ风格,团队中的其他人对此感到满意?
21 c#  coding-style  linq 

3
什么时候在Groovy中编写显式的return语句?
目前,我正在研究Groovy / Grails项目(这是我的新手),我想知道return在Groovy方法中省略关键字是否是一种好习惯。据我所知,您必须显式插入关键字(即用于保护子句),那么在其他地方也应该使用该关键字吗?在我看来,附加return关键字可提高可读性。还是只需要习惯一下?您对该主题有何经验? 一些例子: def foo(boolean bar) { // Not consistent if (bar) { return positiveBar() } negativeBar() } def foo2() { // Special Grails example def entitiy = new Entity(foo: 'Foo', bar: 'Bar') entity.save flush: true // Looks strange to me this way entity }

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.