是什么使Java中的“好风格”?[关闭]


9

我曾在Stackoverflow上问过这个问题,在它被嘘之前,我收到了PéterTörök的有用建议,这可能是发布它的更好地方。

我从事Java编程已有几年了。我经常根据什么构成“好风格”与同事讨论设计决策。确实,有很多StackOverflow问题/答案根据某件商品是否为“好风格”来讨论设计。

但是什么才是“好风格”?就像很多东西一样,我一看到它就知道了……但是我想有一个更好的主意,不仅仅是我的良心说这种设计不正确。

您想到什么才能生成良好的,设计良好的代码?

(我承认这有点主观,因为什么是“好的风格”将取决于手头的任务)。(此外,我应该补充一点,我对团队样式不感兴趣-例如“我们使用2个空格而不是4个缩进” ...,并且我对Java代码约定不感兴趣。)

编辑:谢谢到目前为止所有好的答案/评论。我特别热衷于寻找答案,这些答案将有助于使那些使程序员的良心(甚至是肠胃疾病)变得难以理解的事情得以整理?


在这里列出的许多其他事情中,我一定会确保简单地声明计算机可以用您编写代码的几乎任何方式来编译代码,但是最终,代码必须是人类可读的。评论像疯了似的!我喜欢使用一个很好的测试:一个人可以阅读我的注释来了解代码的功能,输入和输出的内容以及用于执行此操作的算法吗?
布莱恩

1
@布赖恩,使你的代码解释 如何。留下实际评论以解释原因。换句话说,不要像疯了一样发表评论(在一般情况下)

4
布莱恩:绝对不认为这种技术是好的做法。常见的良好做法是使您的代码尽可能地具有自记录性(具有清晰的变量名和函数内聚性),并带有注释以解释“为什么”而不是“如何”。解释每一个细节的注释通常被认为分散了注意力,而且通常很危险,因为与代码相比,人们不太可能维护注释。
凯西·帕顿

1
@布莱恩:您的最后声明说明了一切。该代码应可读。评论变得陈旧。代码从不这么做。如果您需要注释,请重构直到代码非常清晰为止,以至于注释将只是重复代码中的内容。唯一的好评论是说为什么代码以特定方式工作(例如避免第三方库中的错误),以便某人不会回去并将其更改为由于某种原因无法工作的某种方式这不是立即显而易见的。
瑞安·斯图尔特

2
我正式被谦虚了。抱歉@amaidment。我想在评论方面需要研究好的编码标准。
布莱恩

Answers:


17

几点简要说明:


3
+1。也许最关键:最小化重复的代码。如果您想剪切和粘贴多个令牌,则需要提取一个函数。即使函数是一行代码。
凯文·克莱恩

4
对于重复的代码,我采取以下立场。剪切并粘贴=可以。那只是移动代码(假设您只使用一次粘贴)。复制粘贴=太糟糕了。如果仅从词汇表中删除复制按钮,则您更有可能做正确的事。
jsternberg 2011年

@jsternberg:剪切/复制区分为+1,但是我注意到许多人在表示“复制/粘贴”时说“剪切/粘贴”。我不知道该如何区别。
Ryan Stewart

5
不要重复自己。不要重复自己。不要重复自己。
配置器

1
@configurator,您闻起来有点可笑...

9

添加到Ryan的列表中:

  • 遵循SOLID原则
  • 确保您的代码没有太多的循环复杂性
  • 测试驱动的 Java永远是一件好事
  • 如果您xFactoryFactory上课,那说明您做错了:-)
  • 考虑到Java生态系统中的开源库,重新发明轮子是不好的风格
  • 使用Joda时间作为日期和时间

我会停在那里。


2
但是HammerFactoryFactoryFactory上课呢?;-)
韦恩·莫利纳

@Wayne,工厂表明某些决策需要延迟,而FactoryFactoryFactories则表明确实有一个决策需要在运行时做出,但不是必须的。

我知道,我很讽刺,并且提到那篇关于为什么当时的J2EE过于复杂的文章,其中包含HammerFactories和HammerFactoryFactories,并且我认为HammerFactoryFactoryFactories。:)
韦恩·莫利纳

@Martijn-感谢SOLID链接;我以前没有遇到过。您建议使用JodaTime;这仅仅是对Java Calendar / Date类的(适当)厌恶吗?JSR310(JodaTime的后继者)呢?
maiidment

JSR-310有望将其纳入Java 8(我们中有很多人正准备尝试并帮助实现这一目标,如果您想参与,请与我联系)。同时,Joda时间是处理Java中日期和时间的实际标准。Java的日期和日历系统有很多问题,我什至都不知道从哪里开始;-)。杀手级的原因是,日期是可变的,没有瞬间或句号的概念,或者……不,我要在这里停下来:-)。
Martijn Verburg

1

在欣赏别人的回答的同时,我认为分享一些我想写好的代码时想到的事情是公平的:

  • 关于此类/方法/变量需要了解什么?即这些知识应该住在哪里?

  • 此代码将如何影响应用程序的内存/性能?(我承认“过早的优化是万恶之源”;因此,我并不是建议花费大量时间进行优化,而是建议在最初编写代码时保持意识。)

  • (从代码和代码结构中)清楚这是什么意思?(我尝试遵循这样的格言:“努力使人们无法理解,努力避免人们误会”。)


1

阅读String和ArrayList类,以获取适当的Java编程的出色示例。但是它们非常简洁,几乎是C风格,不一定适合带有最少Java文档的可维护代码。在我的商店中,通常的做法是不发表评论,因此我尝试通过使用冗长的camelCase变量名称和过度使用换行符来将一种思想与另一种思想区分开来通过代码进行评论。我仍然在争论如何使用制表符将变量与变量值分开。制表符可以提高IMO的可读性,但是仅在进行最小程度的操作时才具有主观性。我发现这真的与观众有关。这里没有最佳答案。

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.