Questions tagged «coding-style»

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

12
教导自己,作为物理学家,成为一名更好的程序员[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我一直很喜欢物理学,也一直喜欢编码,所以当我获得大学博士学位时提供数值物理学的职位(细节不相关,主要是集群的并行编程)时, -我的脑子 但是,像大多数物理学家一样,我是自学成才的。我没有关于如何以面向对象的方式进行编码的广泛背景知识,也没有在某些kD树中优化搜索的特定算法的名称。 由于到目前为止我的所有工作都更加关注物理学和科学成果,因此毫无疑问我有一些不良习惯- 尤其是因为我的编码是我自己的,而不是真正的团队合作。我主要使用C,因为它非常简单,而且“您写的就是您所得到的”-不需要花哨的抽象。但是,由于我想进一步了解抽象所具有的功能,因此我最近改用了C ++,它非常像C(至少在语法上)。 我该如何像计算机科学专业的毕业生那样以一种良好的抽象方式自学编程呢? 我知道我的代码是高效的,但我希望它也要优雅,可读。请记住,我没有时间阅读关于抽象编程的几本1000页的书。我需要花时间进行与物理相关的实际研究(如果我的主管知道我花时间考虑如何优雅地编程,我的主管会嘲笑我)。如何从程序员的角度评估我的工作是否还不错?

13
#define的适当使用是否可以简化重复代码的键入?
对于使用#define定义完整的代码行来简化编码是否有好的看法还是有什么看法?例如,如果我需要一起打印一堆单词,我会很讨厌打字 << " " << 在cout语句中的单词之间插入空格。我可以做 #define pSpace << " " << 和类型 cout << word1 pSpace word2 << endl; 对我来说,这既不会增加代码的清晰度,也不会减少代码的清晰度,并且使键入变得更加容易。在其他情况下,我可以想到在哪里键入通常会更容易进行调试。 有什么想法吗? 编辑:感谢所有的伟大的答案!在进行了很多重复的键入后,这个问题才出现在我的头上,但是我从没想过会使用其他的,不那么混乱的宏。对于不想阅读所有答案的人,最好的选择是使用IDE的宏来减少重复的键入。

8
什么使代码中的“数据库请求太多”?
这是我本人和我的一些同事所进行的讨论,并认为我会来到这里,看看是否对此达成了普遍共识。 关于数据库调用,基本上可以归结为以下两种观点:1.进行一次大型调用以获取减少数据库调用数量所需的一切信息。2.根据请求的尺寸进行较小的单独调用以减小数据库的大小。数据库调用 这在通用代码中特别有用。我们将使用Employee类的示例,因为这很简单。 假设您的Employee类具有10个值属性(名字,姓氏,雇用日期等),然后具有2个类属性... 1个指向Department类,然后1个主管指向另一个Employee对象。 在心态1中,您将进行一次调用,以返回Employee数据以及填充Department和Supervisor属性所需的字段……或者至少返回那些子对象中最常使用的字段。 在思维方式2中,首先只填充Employee对象,然后仅在实际需要时以及在实际需要时才填充Department和Supervisor对象。 2的态度非常简单明了...最小化请求的大小以及每次发出这些请求中的一个时都要命中多少个数据库对象。#1的立场是,即使可以正确实施,代码必须进行多个连接的纯粹事实也将导致Web服务器和数据库之间的连接受到更大的压力,而不是减少连接。 研究此问题的推动力是我们的Web服务器和数据库服务器之间的通信量已失控。

6
您是否在代码注释中写标题?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我正在浏览我写的一些旧代码(在大学一年级),发现我以前在代码的各个部分之前都写过注释标题。像这样的东西(这是来自“大富翁”游戏): /*Board initialization*/ ...code... /*Player initialization*/ ...code... /*Game logic starts here*/ /*Displaying current situation*/ ...code... /*Executing move*/ ...code... /*Handle special event*/ ...code... /*Commit changes, switch to next player*/ ...code... 如果代码非常清晰,这可能是多余的,并且可以说是不必要的,但是当我浏览文件时,即使我几乎不看实际的代码,我也以为我知道发生了什么,这让我感到非常惊讶。在某些情况下,我绝对可以认为这很合适,所以我想知道-您这样做吗?您认为这是个好主意吗?还是太多?

4
在C#方法中声明返回变量与直接返回值
在关于返回变量的辩论中,团队中的某些成员更喜欢将结果直接返回给调用者的方法,而另一些成员则更喜欢声明一个返回变量,然后将其返回给调用者(请参见下面的代码示例) 后者的论点是,它允许正在调试代码的开发人员在方法返回给调用者之前找到方法的返回值,从而使代码更易于理解:对于以菊花链方式进行的方法调用,尤其如此。 是否有关于哪种方法最有效的准则和/或是否有其他原因导致我们应采用一种风格而不是另一种风格? 谢谢 private bool Is2(int a) { return a == 2; } private bool Is3(int a) { var result = a == 3; return result; }

7
使用空格与{}来表示范围的语言的优缺点是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 5年前关闭。 在使用空白还是使用括号之类的标记来表示范围方面似乎存在冲突。我已经看到许多人赞扬python对不一致的缩进问题的解决方案,但是许多人不同意: 任何将空格作为标记的语言都必​​须消失。 稍后在相同答案上发布: 直到我真正尝试过为止,我还是有点像反空格一样。我的个人空白布局几乎与python-land中的每个人所使用的布局相匹配可能会有所帮助。也许是因为我有点简约,但是如果您要缩进,为什么还要打扰{}? 我可以从两边看到一些明确的论点: 使用空格: 帮助减少代码中不一致的缩进 通过将可见标记替换为空白以达到相同目的来清除屏幕 使用令牌: 将代码剪切和粘贴到不同级别更加容易(您不必修复缩进) 更一致。一些文本编辑器以不同的方式显示空白。 目前比较流行。 我有什么遗漏的地方吗?你喜欢哪个?与彼此长期合作后,有什么智慧的话吗? PS。当语言不为每个控件结构使用相同的标记时,我会讨厌它。VB的End Ifand End While语句确实很烦人,大多数其他语言仅对所有内容使用{}。但这也许是另一个问题的话题...

3
为什么要使用(检查过的)异常之一?
不久之前,我开始使用Scala而不是Java。对我来说,在这些语言之间进行“转换”过程的一部分是学习使用Eithers而不是(checked)Exceptions。我已经用这种方式编码了一段时间,但是最近我开始怀疑这是否真的是更好的方法。 一个主要的优点Either拥有Exception更好的性能; 一个Exception需要建立一个堆栈跟踪和被抛出。据我了解,虽然Exception不是必须的,但构建堆栈跟踪是必需的。 但随后,人们总是可以构建/继承Exceptions的scala.util.control.NoStackTrace,更是这样,我看到很多的情况下,其中的左侧Either实际上是一个Exception(免收性能提升)。 另一个优点Either是编译器安全。Scala编译器不会抱怨未处理Exception的(不同于Java的编译器)。但是,如果我没记错的话,那么这个决定就是用与本主题中讨论的相同的推理来推理的,所以... 在语法方面,我觉得Exception-style更清晰。检查以下代码块(均实现相同的功能): Either 样式: def compute(): Either[String, Int] = { val aEither: Either[String, String] = if (someCondition) Right("good") else Left("bad") val bEithers: Iterable[Either[String, Int]] = someSeq.map { item => if (someCondition(item)) Right(item.toInt) else Left("bad") } for { a <- aEither.right bs <- reduce(bEithers).right ignore <- validate(bs).right …

2
纯粹出于美学原因创建嵌套函数?
我一直想知道其他程序员对创建纯美学功能的想法有何看法。 假设我有一个处理大量数据的函数:Function ProcessBigData。说我需要几个处理步骤,仅适用于数据:Step1,Step2,Step3。 我在源代码中看到最多的普通方法是像这样编写注释: Function ProcessBigData: # Does Step1 Step1.. Step1.. #Does Step2 Step2.. Step2.. 我通常做的是,但由于同伴缺乏这种编码风格,总是感到不对劲: Function ProcessBigData: Function Step1: Step1.. Step1.. Function Step2: Step2.. Step2.. Step1() -> Step2() 我主要担心的是,这种样式在Javascript和Python中是否有缺点 我没有其他替代品吗?

4
我是否应该选择带有或不带有私有字段的属性?
我现在使用的代码库具有使用私有字段和公共属性的约定。例如,大多数类的成员定义如下: // Fields private double _foo; private double _bar; private double _baz; // Properties public double Foo { get{ return _foo; } set{ _foo = value; } } public double Bar { get{ return _bar; } set{ _bar = value; } } public double Baz { get{ return _baz; } …
16 c#  coding-style 

6
方法和函数名称中的“ A”,“ an”和“ the”:您要做什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 5年前关闭。 我敢肯定,我们中的许多人都曾经在某一点看到过这样的方法名称: UploadTheFileToTheServerPlease CreateATemporaryFile WriteTheRecordToTheDatabase ResetTheSystemClock 也就是说,方法名称也应是语法正确的英语句子,并包括纯粹使它们像散文一样阅读的多余单词。就我个人而言,我不是这种“文字”方法名称的忠实拥护者,我更喜欢简洁,但仍要尽可能清楚。在我看来,“ a”,“ an”和“ the”之类的单词在方法名称中看起来很尴尬,这使得方法名称不必要地冗长而没有真正添加任何有用的内容。对于前面的示例,我希望使用以下方法名称: UploadFileToServer CreateTemporaryFile WriteOutRecord ResetSystemClock 以我的经验,这比写出更长的名字的其他方法要普遍得多,但是我既看到了这两种风格,又很想知道其他人对这两种方法有何想法。 那么,您是在“像散文一样阅读的方法名称”阵营中,还是在“说我的意思却像糟糕的外语到英语翻译的大声读出来的方法名称”阵营中?

6
如何推广和鼓励高质量代码?
我在一个由4人组成的小型外包公司中担任iOS开发人员。在我和另外两名开发人员加入该公司之前,我们正在进行的项目开始了几年。在此之前,该项目主要由一个人完成。 当我开始从事该项目时,那真是一团糟。有很多代码重复。我看到相同的500个代码处理了20个不同的文件,但有微小的变化。此外,它的组织方式也不是很好:所有UI创建代码都与逻辑一起混合在视图控制器中。 我尽力在这里和那里进行重构,消除多余的代码,改善项目的文件结构,等等。感觉就像以前的开发人员并不真正在乎所有这些事情,或者没有经验。曾经有一段时间,我一个人从事大型功能几个月。由于此功能的性质,我不得不在整个应用程序中触摸很多代码,因此我确实尝试进行一些改进。 当其他开发人员加入该项目时,我注意到他们使用不同的编码样式(有时是完全不同的样式),并且通常不使用诸如属性访问器之类的现代语言功能(这在Objective-C中相对较新)。有时他们会发明自己的自行车,而不是使用框架的类似功能,或者将他们学到的其他编程语言或模式的概念转移到我们的代码库中。通常,由于英语不正确(Objective-C是您使用长名称的语言),它们有时无法正确命名方法或变量。 有时候,我认为如果不是针对IDE,我认为他们会编写所有代码而没有缩进或格式化。 基本上,我讨厌他们编写的代码。它的格式/组织不好,有时与项目的其余部分完全不同。当他们将意大利面加到我的艺术品中时,我会感到非常沮丧,这会影响我的工作心情和工作效率。 感觉越来越像他们不被学习或不在乎的困扰:他们只是按照他们的要求去回家。有机会时,我尝试给他们一些提示(例如,评论他们的PR或在GitHub上提交)。我曾经很好地要求遵循大多数现有代码的编码风格和格式(很遗憾,我们没有正式的编码风格文档)。但这没用... 我如何解决这种情况而不仅仅是关注“糟糕的公司文化”,“没有经验的毕业生”等,而是开始改善这种情况。

4
将Angular应用放在ASP.NET Web API解决方案中的何处?
我正在启动一个未开发的应用程序,并且我想使用ASP.NET(4.6)和Angular2。对于后端,我已经在Visual Studio中创建了一个项目,现在我想知道将Angular应用程序放在哪里。我真的想在前端使用npm和node-tools,但最终它将托管在同一个Azure App Service实例中,Angular应用程序位于或类似domain.com/的API下domain.com/api/。 如何在Visual Studio中分离应用程序?Angular应用程序应该属于自己的项目吗?我应该在与API相同的项目中使用Angular应用程序吗?即使我不想为此使用nuget和其他VS工具?(对于前端,VS或多或少是美化的代码编辑器)。对于这种组合,我还没有找到任何最佳做法。

3
将函数类型和方法名称放在C中不同行的原因
我刚开始在一家公司工作,在我的第一次代码审阅中,样式注释之一是返回类型和方法名称应该在不同的行上。例如这个 void foo() { } 应该是这个 void foo() { } 我一直使用第一样式,我想知道除了个人喜好之外,还有其他原因为什么人们使用第二样式吗?我认为第一个完全不会影响可读性。在C程序员和大型开源项目中,一种比另一种更普遍吗?
16 c  coding-style 

5
如果有条件,则返回set.add()的布尔值?
set类的add运算符返回一个布尔值,如果元素(要添加的元素)不存在则为true,否则为false。在写字 if (set.add(entry)) { //do some more stuff } 在编写简洁的代码方面被认为是好的风格?我想知道既然您一次执行两项操作。1)添加元素,2)检查元素是否存在。

6
编写源代码时如何遵循80个字符限制的最佳做法?
如您所知,有一个最佳做法是 一行源代码限制为80个字符。 这里有2个链接: 为什么80个字符是代码宽度的“标准”限制? 在宽屏显示器时,80个字符的限制是否仍然有用? 而且,我敢肯定,如果您搜索此最佳做法,可以做得更好。 但是我发现这非常困难,这是一个示例示例: public class MyClass { public void myMethod() { final Map<String, List<MyInterfaceHere>> myReference 因此,您可以缩进每个类,每个方法和每个语句。 在“ myReference”中最后一个“ e”的结尾,我已经在第60列了。 我还有20个空格,实际上是要调用构造函数并将对象分配给我拥有的引用。 我的意思是,这看起来真的更好吗: public class MyClass { public void myMethod() { final Map<String, List<MyInterfaceHere>> myReference = new HashMap<String, List<MyInterfaceHere>>(); 最佳做法是什么?

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.