Questions tagged «coding-standards»

编码标准或编码约定是旨在管理软件项目中代码生成过程的规则或准则集。它们通常基于行业最佳实践或公认的惯例。它们包括命名约定,样式,禁止的功能等。

9
具有自定义属性的JS布尔运算是否不好?
在JS中,您可以返回具有自定义属性的布尔值。例如。当Modernizr测试视频支持时,它返回true,false但是返回的布尔值(布尔是JS中的第一类对象)具有指定支持哪种格式的属性。起初它使我感到有些惊讶,但后来我开始喜欢这个主意,并开始怀疑为什么它似乎很少使用? 它看起来像是一种优雅的方式来处理所有这些情况,在这些情况下,您基本上想知道某件事是对还是错,但是您可能对无需定义自定义返回对象或不准备使用回调函数就可以定义的一些其他信息感兴趣。接受更多参数。这样,您可以保留非常通用的功能签名,而不会影响返回更复杂数据的能力。 我可以想象有3种反对的说法: 当最好使任何界面清晰明了而不棘手时,这是不常见/意外的。 这可能是一个稻草人的论点,但由于它有点极端,我可以想象它在某些JS优化器,uglifier,VM中或在稍作清理语言规范更改后悄然适得其反。 有更好的方法-简洁,清晰和通用-完全相同。 所以我的问题是,有什么充分的理由要避免将布尔值与其他属性一起使用?他们是把戏还是款待? 绘制扭曲警告。 以上是最初的问题。正如Matthew Crumley和senevoldsen都指出,这是基于错误的(虚假的?)前提。按照优良的JS传统,Modernizr所做的只是一种语言技巧而又是一种肮脏的手段。归结为具有原始bool的JS,如果将其设置为false,即使在尝试添加道具后(它会默默失败),布尔对象仍将为false;而布尔对象可以具有自定义道具,但成为对象始终是真实的。Modernizr返回布尔布尔值false或真实布尔值对象。 我最初的问题是假设技巧不一样,因此最流行的答案涉及(完全有效的)编码标准方面。但是,我发现揭穿整个窍门的答案最有帮助(以及反对使用该方法的最终论点),因此我接受其中一个。感谢所有参与者!


13
在工作中处理编码标准(我不是老板)
我在一个约10个开发人员的小团队中工作。我们根本没有编码标准。有些事情已经成为常态,但某些做事方式却完全不同。我最大的是缩进。有些使用制表符,有些使用空格,有些使用不同数量的空格,这会带来很大的问题。合并时,我经常遇到冲突,因为有人使用他们的IDE自动格式化,并且他们使用与我不同的字符来缩进。我不在乎我们使用哪个,我只希望我们所有人都使用相同的。 否则,我将打开一个文件,某些行与条件在同一行上有大括号,而其他行在下一行。再说一次,我不介意哪一个都一样。 我已经将标准的问题一对一地提交给我的直接经理,并在小组会议中提出来,而他对此并不过分担心(还有其他一些人与我有相同的看法)。我提出了关于缩进字符的具体问题,他认为更好的解决方案是“创建某种脚本,当我们从存储库中推入/拉出时可以转换所有内容。” 我怀疑他不想更改,而且此解决方案似乎过于复杂,容易出现维护问题(而且,这仅解决了较大问题的一种表现)。 你们中有人遇到过类似的情况吗?如果是这样,您如何处理?有什么好处可以帮助我按标准出售我的老板?在我们感兴趣的人当中,发起基层运动来创建编码标准是否是一个好主意?我是否太过挑剔,应该放手吗? 谢谢大家的时间。 注意:谢谢大家到目前为止的宝贵反馈!明确地说,我不想规定一种风格来统治所有人。我愿意放弃自己喜欢的做事方式,而选择最适合每个人的方式。我希望保持一致,我希望这是一个民主国家。我希望这是每个人都同意的集体决定。是的,并不是每个人都能如愿以偿,但我希望每个人都能够成熟到足以妥协以改善团队的能力。 注意2:有些人被我上面给出的两个示例所困扰。我更关心这件事。它以许多示例体现出来:命名约定,应该被分解的巨大功能,在util或service中使用某些东西,应该是常量还是注入的东西,我们都应该使用不同版本的依赖项还是相同的版本,接口用于这种情况,应如何设置单元测试,应如何进行单元测试(特定于Java),如果我们使用批注或外部配置。我可以继续。

5
避免使用命名空间进行Smurf命名类的问题
我从这里取消了“蓝精灵命名”一词(21号)。为了省去不熟悉的人的麻烦,Smurf命名是为一堆相关的类,变量等添加通用前缀的行为,因此您最终将“ a SmurfAccountView传递SmurfAccountDTO给SmurfAccountController”,等等。 我通常听到的解决方案是创建一个smurf名称空间并删除smurf前缀。通常,这对我来说很好,但是我遇到了两个问题。 我正在与一个图书馆一起Configuration上课。它可以被调用,WartmongerConfiguration但是在Wartmonger命名空间中,因此它被称为Configuration。我同样有一个Configuration可以调用的类SmurfConfiguration,但是它在Smurf命名空间中,因此是多余的。我的代码中有些地方Smurf.Configuration出现在旁边,Wartmonger.Configuration并键入完全限定的名称比较笨拙,并且使代码的可读性较差。处理一个SmurfConfigurationand 会更好(如果这是我的代码而不是一个库)WartmongerConfiguration。 我Service在Smurf命名空间中有一个可能称为的类SmurfService。Service是运行Smurf作业的复杂Smurf库顶部的外观。SmurfService似乎是一个更好的名字,因为Service没有Smurf前缀是非常通用的。我可以接受的是,这SmurfService已经是一个通用且无用的名称,而去除蓝精灵只是使这一点更加明显。但是它本来可以命名为Runner,Launcher等等,但对我来说仍然会“感觉更好”,SmurfLauncher因为我不知道a的Launcher作用,但是我知道a的SmurfLauncher作用。您可能会争辩说a的Smurf.Launcher行为应该与a的行为一样明显Smurf.SmurfLauncher,但我可以看到`Smurf.Launcher是某种与安装相关的类,而不是启动smurfs的类。 如果有一种开放和封闭的方式来处理这两种情况,那将是很好的。如果不是,有什么常用的方法可以减轻他们的烦恼?

13
您是否在变量名称前加上变量类型的缩写?(匈牙利表示法)
在我目前的工作中,没有编码准则。每个人几乎都按照他想要的方式进行编码。很好,因为公司很小。 但是,最近有一个新手提议始终使用匈牙利表示法。到目前为止,我们中的一些人使用了某种匈牙利符号,而我们中的某些人则没有。您知道,这是一家工程公司,因此只要算法是合理的,编码样式就并不重要。 我个人认为这些小写缩写是多余的。一个经过深思熟虑的名字通常会传达相同的信息。(此外,大多数的我们的代码必须运行一些怪人的DSP,在那里同样的一个概念bool或float不存在反正)。 那么,您如何看待匈牙利符号?你用吗?为什么?

5
仅通过参数名称(而不是类型)来区分方法是否足够?
仅通过参数名称(而不是类型)来区分方法就足够了吗?还是更明确地命名呢? 例如T Find<T>(int id)VS T FindById<T>(int id)。 是否有充分的理由更明确地命名(即添加ById)而不是仅保留参数名称? 我能想到的一个原因是方法的签名相同但含义不同。 FindByFirstName(string name) 和 FindByLastName(string name)

7
我是否应该不再使用不赞成使用的多线程和多处理器编程实践?
在FORTRAN和BASIC的早期,基本上所有程序都是使用GOTO语句编写的。结果是意大利面条代码,解决方案是结构化编程。 同样,指针可能很难控制我们程序中的特征。C ++从大量的指针开始,但是建议使用引用。像STL这样的库可以减少我们的依赖。还有一些习惯用法来创建具有更好特性的智能指针,并且某些版本的C ++允许引用和托管代码。 诸如继承和多态性之类的编程实践在幕后使用了许多指针(就像结构化编程生成充满分支指令的代码一样)。像Java这样的语言消除了指针,并使用垃圾回收来管理动态分配的数据,而不是依赖程序员来匹配其所有new和delete语句。 在我的阅读中,我看到了似乎不使用信号量的多进程和多线程编程的示例。他们是使用同一名称使用不同的名称还是使用新的方法来保护资源并发使用? 例如,使用多核处理器进行多线程编程的系统的特定示例是OpenMP。它代表以下一个关键区域,不使用信号量,该信号量似乎不包含在环境中。 th_id = omp_get_thread_num(); #pragma omp critical { cout << "Hello World from thread " << th_id << '\n'; } 本示例摘自:http : //en.wikipedia.org/wiki/OpenMP 或者,使用带有功能wait()和signal()的信号量对线程进行类似的保护,如下所示: wait(sem); th_id = get_thread_num(); cout << "Hello World from thread " << th_id << '\n'; signal(sem); 在此示例中,事情非常简单,只需简单的回顾就足以显示wait()和signal()调用是匹配的,即使有很多并发,也可以提供线程安全性。但是其他算法更复杂,并且使用多个信号量(二进制和计数),这些信号量分布在具有复杂条件的多个函数中,可以被许多线程调用。创建死锁或无法使线程安全的后果很难管理。 这些系统(例如OpenMP)是否消除了信号量的问题? 他们是否将问题转移到其他地方? 如何使用算法将自己喜欢的信号量转换为不再使用信号量?

10
消除魔术数字:什么时候该说“不”?
我们都知道,幻数(硬编码值)会对您的程序造成严重破坏,尤其是当需要修改没有注释的一段代码时,您会在哪里划清界线? 例如,如果您有一个计算两天之间的秒数的函数,您是否要替换 seconds = num_days * 24 * 60 * 60 与 seconds = num_days * HOURS_PER_DAY * MINUTES_PER_HOUR * SECONDS_PER_MINUTE 您在什么时候确定硬编码值意味着什么是完全显而易见的,而不管它呢?

10
我应该使用switch语句还是if ... else链较长?
通常,当我听说switch语句时,将它推迟以替换长if ... else链。但是似乎当我使用switch语句时,我正在写更多的代码,而如果...否则我会写。您还遇到其他问题,例如将所有调用的所有变量都保持在同一范围内。 这是一些代表我通常编写的流程的代码(感谢diam) String comment; // The generated insult. int which = (int)(Math.random() * 3); // Result is 0, 1, or 2. if (which == 0) { comment = "You look so much better than usual."; } else if (which == 1) { comment = "Your work is up …

3
这是象征性的不断过度使用吗?
我刚接触软件工程,因此作为一项学习练习,我写了一个国际象棋游戏。我的朋友看了一下,并指出我的代码看起来像 for (int i = 0; i < 8; i++){ for (int j = 0; j < 8; j++){ 他坚持认为应该改为 for (int i = 0; i < CHESS_CONST; i++){ for (int j = 0; j < CHESS_CONST; j++){ 带有一些更好的符号名称,我现在就不用考虑了。 现在,我当然知道通常会避免使用幻数,但是我觉得 这个数字永远不会改变; 该名称无论如何都不能这么具有描述性,因为在整个代码中很多地方都使用了该数字;和 任何经过国际象棋程序源代码的人都应该对国际象棋有足够的了解,以便知道8是什么, 确实不需要符号常量。 那么你们怎么看?这是矫kill过正吗,还是我应该遵循惯例并使用符号?

20
编码标准应该是什么?[关闭]
一个好的(有用的)编码标准应该是什么? 代码应具备的内容。 代码不应该包含的内容。 编码标准是否应包括语言,编译器或代码格式化程序强制执行的内容的定义? 圈复杂度,每个文件行数等指标如何?

4
我是否应该对常数全部使用大写?
我是一名Python程序员,主要使用pylint整理源代码。我可以消除除以下警告以外的所有警告:常量名称无效。将名称更改为全部大写可以解决此问题,但是我真的应该这样做吗?如果这样做,我发现我的代码看起来很丑陋,因为大多数变量都是常量(根据pylint)。

2
为什么软件使用Win32名称?
如果软件/库对Windows平台有某种支持,则它们几乎总是将其目录和变量命名为win32。这在C / C ++项目中最为普遍。甚至MinGW项目的目标是三重用途win32。是否有一个原因?为什么不使用Windows或Microsoft Windows这样的专有名称?命名选择是否存在法律障碍? 这个问题不是关于API的,而是正在使用的命名约定。当一个库支持其他操作系统时,它们通常使用适当的名称,例如linux,freebsd或需要的任何特殊支持。但是当涉及到Windows时,它通常被缩写为win32,与其他语言相比显得有些奇怪。

5
我编程太慢了吗?[关闭]
我从事该行业只有一年,在评估特定任务时遇到一些问题。是的,在您关闭此内容之前,我已经读过此内容:当要求您提供估算值时如何应对?那就是我遇到的同样的问题。但是我正在寻找更具体的经验指标,这些东西应该是可量化的,或者可能是其他程序员的平均表现,我应该以此为基础并进行估算。答案从几周开始不等,我一直在寻找有关一天左右分配的任务级别的答案。(请注意,这不包括提交质量检查或文档,仅包括从编写测试(如果使用TDD到编写页面)到提交测试之前的实际开发时间) 我现在的当前速度如下(在ASP.NET网络表单上): 现在,在一天的时间(8小时)内,我已经能够在一个已经构建的架构上开发一个简单的数据输入页面,其中包含一个网格列表(没有复杂的逻辑,只有创建和读取)。 添加复杂的功能以及“更新”和“删除”页面会使任务再增加一整天。 如果我必须从头开始页面(没有解决方案,没有现有网站),那又要花整整一天的时间。 (并非总是如此),但是如果我遇到新的东西或尚未完成的事情,则需要我整整一整天。 每当我做出比预期更长的估计时,我都会感到其他人认为我与其他所有人相比落后很多。我只是担心,因为人们一直期望只有一页,而这一天只需要我一整天。是的,肯定还有更多的改进空间。总有。我有很多要学习的。但是我想知道我目前的速度是太慢了,还是平均水平,还是行业内不超过一年的人的平均水平。

10
贵公司有编码标准吗?[关闭]
最近,我看到Microsoft发布了编码标准文档(“多合一编码框架编码标准”),这让我开始思考...我工作的公司根本没有正式的编码标准。仅有几个开发人员,我们在一起的时间已经足够长,已经演变成类似的样式,这从来都不是问题。 您工作的公司是否有书面的编码标准?如果没有,为什么不呢?有标准会有所作为吗?是否值得从头开始编写标准,还是应该采用其他标准作为自己的标准(即使Microsoft的标准成为您的标准)?

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.