Questions tagged «coding-style»

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

14
方法对您来说理想的长度是多少?[关闭]
在面向对象的程序设计中,方法的最大长度当然没有确切的规则,但是我仍然发现这两个引号有些矛盾,因此我想听听您的想法。 罗伯特·马丁(Robert Martin)在《干净代码:敏捷软件工艺手册》中说: 功能的第一个规则是它们应该很小。功能的第二个规则是它们应该小于该值。函数不能长100行。函数几乎不应超过20行。 并列举了肯特·贝克(Kent Beck)的Java代码示例: 他程序中的每个函数只有两行,三行或四行。每个明显透明。每个人都讲一个故事。每个人都以引人注目的顺序将您引向了下一个。那就是您的功能应该有多短! 这听起来不错,但另一方面,在“代码完成”中,史蒂夫·麦康奈尔(Steve McConnell)说了很不一样的话: 例程应允许有机增长到100-200行,数十年的证据表明,这种长度的例程不会比较短的例程容易出错。 他还提到了一项研究,该研究说65行或更长的例程开发起来比较便宜。 因此,尽管对此事有不同意见,但您是否有实用的最佳实践?

8
为什么尾随空格很大?[关闭]
对于程序员来说,尾随空白就足够了,因为像Emacs这样的编辑器具有特殊功能来突出显示或自动删除它,并且许多编码标准都要求您消除它的所有实例。我不确定为什么。我可以想到一个避免不必要的空格的实际原因,那就是如果人们不小心避免使用空格,那么他们可能会在两次提交之间进行更改,然后,由于某些人删除或删除了一些差异,因此我们发现它们之间存在差异添加了一个空间。 听起来这是避免它的一个很好的理由,但是我确实想看看是否还有更多的理由。那么,为什么尾随空格这么大呢?

5
在Java中,即使不必使用“ final”作为参数和局部变量也应如此吗?
Java允许将变量(字段/局部变量/参数)标记为final,以防止重新分配到变量中。我发现它对于字段非常有用,因为它可以帮助我快速查看某些属性(或整个类)是否是不可变的。 另一方面,我发现它对局部变量和参数的用处不大,通常我避免将它们标记为final即使它们永远都不会被重新分配(明显的例外,当它们需要在内部类中使用时) 。但是,最近,我遇到了最终可用的代码,我想从技术上讲,它可以提供更多信息。 不再对我的编程风格充满信心,我想知道在final任何地方应用的其他优点和缺点是什么,最常见的行业风格是什么,为什么。
105 java  coding-style  final 

11
“ goto”语句导致什么样的错误?有历史上重要的例子吗?
我知道,除了打破嵌套在循环中的循环之外,其他方法都是这样。该goto语句是易于出错的编程风格,因此一直被人们回避和谴责。 替代文字: “尼尔·斯蒂芬森(Neal Stephenson)认为给他的唱片公司定名为“ dengo”很可爱”, 请参见以下原始漫画:http://xkcd.com/292/ 因为我很早就学到了 对于什么类型的错误goto实际上导致什么,我真的没有任何见识或经验。那么我们在这里谈论什么: 不稳定吗? 无法维护或无法读取的代码? 安全漏洞? 还有其他东西吗? 实际上,“ goto”语句会导致哪种错误?有历史上重要的例子吗?

10
我是否应该仅遵循工作场所中已建立的约定而遵循不良编码风格?
我已经工作了大约一年了。我主要在GUI界面中工作,该界面使用C后端的方法,但是除了返回值外,我通常不必处理它们。考虑到我们的局限性,我们的GUI结构相当合理。 我的任务是向程序的命令行部分添加功能。这些功能大多数都长达300行,难以使用。我正在尝试收集其中的一些信息以获取特定的警报信息,但在保持井井有条的过程中遇到了麻烦。我知道我要通过一个长函数来使测试变得更加复杂。 我应该按照现有功能的样式将所有功能都保留在一个巨大的功能中,还是应该将警报封装在它们自己的功能中? 我不确定是否适合违反当前的编码约定,或者我是否应该硬着头皮让代码编写自己的代码更加混乱。 总而言之,我正在比较 showAlarms(){ // tons of code } 反对 showAlarms(){ alarm1(); alarm2(); return; } alarm1(){ ... printf(...); return; } 编辑:谢谢大家的建议,我决定我将设计我的分解代码,然后询问他们想要什么,如果他们想要全部融合在一起,我可以从分解的代码中切下来,然后将其重新变成1大功能。即使他们希望所有代码都在一个定义中,这也应该允许我编写它并更轻松地对其进行测试。 更新:他们最终对分解式代码感到满意,并且有一个以上的人感谢我树立了这一先例。

14
简洁在什么时候不再是一种美德?
最近的错误修复要求我检查其他团队成员编写的代码,在这里发现了这一点(它是C#): return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0; 现在,有充分的理由进行所有这些强制转换,这仍然很难遵循。计算中有一个小错误,我不得不解开它以解决问题。 我从代码审查中知道了此人的编码风格,他的方法是较短的总是更好。当然,这里还有价值:我们都已经看到了不必要的复杂的条件逻辑链,这些逻辑可以与一些位置合理的运算符一起整理。但是他显然比我更擅长追随运营商,他们陷入了一个单一的问题。 当然,这最终是样式问题。但是,是否有任何关于识别代码简洁性不再有用并成为理解障碍的观点的写作或研究? 进行强制转换的原因是实体框架。数据库需要将它们存储为可空类型。小数?不等同于C#中的Decimal,需要进行强制转换。

16
不使用匈牙利表示法的好处是什么?
我苦苦挣扎的事情之一就是不使用匈牙利符号。我不想仅去查看变量类型是什么,就不必去定义变量。当一个项目扩展时,能够查看以'bool'为前缀的变量并知道它正在寻找true / false而不是0/1值,这是一个很好的选择。 我还在SQL Server中做了很多工作。我在存储过程中添加了“ sp”前缀,在表中添加了“ tbl”前缀,更不用说数据库中的所有变量了。 我到处都看到没有人真正想要使用匈牙利符号,以至于避免使用匈牙利符号。我的问题是,不使用匈牙利符号的好处是什么?为什么大多数开发人员都像瘟疫一样避免使用匈牙利符号?

14
即使在没有必要的情况下,我也应该在逻辑语句中使用括号吗?
假设我有一个布尔条件,a AND b OR c AND d并且我使用的语言中AND的操作先例比的先后顺序高OR。我可以编写以下代码行: If (a AND b) OR (c AND d) Then ... 但实际上,这等效于: If a AND b OR c AND d Then ... 是否有支持或反对包含多余括号的论点?实践经验是否表明值得将它们包括在内以提高可读性?还是表明开发人员需要真正坐下来并对他们的语言基础充满信心?

13
如果可以,是否应该消除局部变量?
例如,要在Android中保持CPU开启,我可以使用以下代码: PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "abc"); wakeLock.acquire(); 但我认为局部变量powerManager和wakeLock可以消除: ((PowerManager)getSystemService(POWER_SERVICE)) .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag") .acquire(); 类似的场景出现在iOS警报视图中,例如:from UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"my title" message:@"my message" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil]; [alert show]; -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ [alertView release]; } 至: [[[UIAlertView alloc] initWithTitle:@"my title" message:@"my message" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil] show]; -(void)alertView:(UIAlertView *)alertView …

10
是否有人可以挑战鲍勃叔叔,因为他喜欢移除“无用的牙套”?
我讨厌引用付费墙内容,但是这段视频恰好显示了我在说什么。恰好在罗伯特·马丁(Robert Martin)的12分钟内看了一下: 并说“我最喜欢做的一件事情就是摆脱无用的牙套”,因为他将其变成了这样: 很久以前,在遥远的教育中,我被教导不要这样做,因为它可以通过添加另一条缩进的行以使其很容易引入错误,认为该错误是由if不受时间控制的。 为了公平起见,鲍勃叔叔(Bob)将他的Java长方法重构为微小的小函数,我同意这些小函数的可读性要高得多。当他完成更改后,(22.18)看起来像这样: 我想知道是否应该验证删除括号。我已经熟悉了最佳实践。鲍勃叔叔可以在这一点上受到挑战吗?鲍勃叔叔捍卫了这个主意吗?

2
Python中的相对导入有什么问题?
我最近升级了流行的Python样式检查器pylint的版本。 它贯穿了我的所有代码,指出了在同一软件包中导入模块的位置,而没有指定完整的软件包路径。 新的错误消息是W0403。 W0403:相对导入%r,应为%r 当检测到相对于软件包目录的导入时使用。 例 例如,如果我的软件包的结构如下: /cake /__init__.py /icing.py /sponge.py /drink 然后在海绵包装中写下: import icing 代替 import cake.icing 我会收到此错误。 虽然我知道并非所有的Pylint消息都具有同等重要的地位,并且我不害怕忽略它们,但我不理解为什么这种做法被认为是一个糟糕的主意。 我希望有人可以解释这些陷阱,因此我可以改善自己的编码风格,而不是(按照我目前的计划)关闭此表面上虚假的警告。

20
减少代码中的行数有多重要?
我是从事J2SE(核心Java)的软件开发人员。 通常在我们的代码审查期间,我们被要求减少代码中的行数。 这并不是删除多余的代码,而是遵循一种专注于用更少的代码行来完成相同事情的样式,而我相信即使要增加行数,代码也要清晰。 您认为正确的做事方式是什么? 如果LOC(代码行)很小,它将如何影响代码?如果LOC是一个较大的数字,它将如何影响代码? 网站上的示例:“ javaranch”- public static void happyBirthday(int age) { if ((age == 16) || (age == 21) || ((age > 21) && (((age % 10) == 0) || ((age % 25) == 0)))) { System.out.println("Super special party, this year!"); } else { System.out.println("One year older. Again."); …


12
弹性挡片的缺点是什么?[关闭]
看这里:关于制表符和空格的典型圣战。 现在看这里:弹性的制表符。解决了所有问题,并添加了一堆非常有用的新行为。 在制表符与空格讨论中是否甚至提到了弹性制表符?为什么不?弹性制表符的想法是否存在严重的缺陷,以至于没人能在流行的编辑器中实现它们? 编辑:我很抱歉过于强调“为什么他们没有提到”。那不是我真正想要的。这个问题甚至可能是个话题。我真正的意思是,这种做法最大的弊端是什么阻止了广泛采用明显有益的想法?(在一个理想的世界中,一切已经得到支持) (结果是,Microsoft Connect上已经有一个针对Visual Studio实现的弹性制表符的请求,在Eclipse中也有一个请求。此外,还有一个问题询问其他实现弹性制表符的编辑器)

9
在这种情况下,是否应始终将所需的最少数据传递给函数
假设我有一个IsAdmin检查用户是否为管理员的函数。我们还要说,管理员检查是通过将用户ID,名称和密码与某种规则(不重要)进行匹配来完成的。 在我的脑海中,为此有两个可能的函数签名: public bool IsAdmin(User user); public bool IsAdmin(int id, string name, string password); 我通常会寻求第二种签名,以为: 函数签名为读者提供了更多信息 函数内部包含的逻辑不必了解User类 通常会导致函数内部的代码少一点 但是我有时会质疑这种方法,并且意识到在某些时候它将变得笨拙。例如,如果某个函数将在十个不同的对象字段之间映射成一个结果布尔值,那么我显然会发送整个对象。但是除了这样一个鲜明的例子,我看不到传递实际对象的理由。 对于任何一种风格的论点,以及您可能提供的任何一般性意见,我将不胜感激。 我以面向对象和功能两种风格进行编程,因此应将问题视为关于任何和所有习惯用法。

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.