﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-快车道-随笔分类-Java编程</title><link>http://www.blogjava.net/welldoer/category/23770.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 23 Jul 2007 15:31:58 GMT</lastBuildDate><pubDate>Mon, 23 Jul 2007 15:31:58 GMT</pubDate><ttl>60</ttl><item><title>(转)编写优良的Java代码</title><link>http://www.blogjava.net/welldoer/archive/2007/07/22/131714.html</link><dc:creator>快车道</dc:creator><author>快车道</author><pubDate>Sun, 22 Jul 2007 04:12:00 GMT</pubDate><guid>http://www.blogjava.net/welldoer/archive/2007/07/22/131714.html</guid><wfw:comment>http://www.blogjava.net/welldoer/comments/131714.html</wfw:comment><comments>http://www.blogjava.net/welldoer/archive/2007/07/22/131714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welldoer/comments/commentRss/131714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welldoer/services/trackbacks/131714.html</trackback:ping><description><![CDATA[<p dir=ltr style="MARGIN-RIGHT: 0px">也许有多少专业Java程序员，就有多少种对于编写优良Java代码的答案！<br><br>以下可能是大多数专业Java程序员都赞同、也愿意执行的八点规则：<br>1) 保持类最小</p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<p dir=ltr style="MARGIN-RIGHT: 0px">还有什么比拥有较少的类更坏的事情吗？可能不会再有了。当然，最好还是有满足自己需要的类。</p>
<p dir=ltr style="MARGIN-RIGHT: 0px">一般来说，一个带有大量方法的类总是具有一些不属于这里的方法，因为这个庞大的对象所做的事情太多了。如果您有一个带有 100 个方法的对象，就应该好好想想，这个对象是否应该拆成多个对象。大类通常在大学里大行其道。Java 代码与之一样。</p>
</blockquote>
<p dir=ltr>2) 保持方法最小</p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<p>小方法就与小类一样可取，并且原因也类似。<br>很多有经验的 OO 程序员对 Java 语言具有的苦恼之一就是，它提供大量的 OO 能力，但是却没有教他们如何做好 OO。换句话说，它给了他们很多绳子去捆绑自己（尽管至少没有 C++ 给他们的多）。能看到这一点的一个常见地方是 <code><font face=Courier size=1>main()</font></code> 方法离得很远的类，或者一个单个的名叫 <code><font face=Courier size=1>doIt()</font></code> 的方法。仅仅因为<em>能够</em> 将所有的代码放在类中的单个方法中，并不意味着就<em>应该</em> 如此。Java 语言比很多其他 OO 语言具有更多的语法糖，所以一定的罗嗦是必要的，但是不要过了度。</p>
<p>思考一下这些超长的方法。滚动十屏代码去了解代码所做的工作是很艰难的。该方法做什么工作？您需要泡上一杯大大的咖啡花几个小时去研究才能知道。一个小的，甚至微小的方法是一个容易看懂的代码块。运行时效率不是要具有小方法的原因，可读性才是真正的目标。这将使得代码更加容易维护，并且在需要添加功能时更加容易更改。</p>
<p>将每个方法局限于执行一项工作。</p>
</blockquote>
<p>3) 给方法取好名称</p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<p>本要求很简单，只需要花上一点时间想出一个具有描述性的方法名，足够明了但不过长。<br>这一技巧很简单，也许在小规模的代码行中是微不足道的，但是当代码变得越来越复杂时，它就会显露出惊人的威力。</p>
</blockquote>
<p dir=ltr>4) 保持类的数量最少</p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<p>XP 中关于简单设计的其中一个指导方针是，用尽可能少的类完成一个目标。如果您需要另一个类，尽管添加就是了。如果另一个类将使得代码更简单或者简化您的意图表达，那么就添加这个类吧。但是没有理由只是为了具有而具有类。当然，通常项目早期比结束时具有的类要少，但是一般将代码重构成更多的类比组合类更容易。如果您有一个具有大量方法的类，那么分析一下，看是否有另一个对象陷入在其中，正在等待出去。如果有的话，就创建一个新的对象。</p>
<p>在我经历的几乎所有 Java 项目上，没有人害怕创建类，但是我们也总是试图在不降低意图清晰度的情况下，减少类的数量。</p>
</blockquote>
<p dir=ltr>5) 保持注释的数据最少</p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<p>我过去常常在代码中编写很多的注释，读起来就像一本书。后来我变得聪明一些了。</p>
<p>每一个计算机科学程序、每一本编程书籍和我知道的很多程序员，都要您给代码编写注释。在有些情况下，注释是有帮助的。在许多情况下，注释使得代码维护更加困难。想想您更改代码时必须做什么。有注释吗？如果有的话，您最好更改注释，否则它会可怕地过期，甚至随着时间的推移，根本就不再能够描述代码。依我的经验，几乎会使维护时间加倍。</p>
<p>我的经验法则是：如果代码太难阅读和理解而需要注释，我就需要使它足够清晰，从而不需要注释。代码可能会太长，或者做太多的事情。如果这样的话，我就简化它。代码可能太隐晦。如果这样的话，我就添加助手方法，使之清晰。实际上，在与同一团队的其他成员一起进行 Java 编程的三年当中，我所编写的注释屈指可数。保持代码清晰！如果您需要系统或者某个特定组件的全景描述，就编写一个简短的注释来描述。</p>
<p>罗嗦的注释一般比较难维护，通常不及一个小的、编写良好的方法那么好地表达意图，并且很快就会过期。根本不要过分依赖注释。</p>
</blockquote>
<p dir=ltr>6)&nbsp;&nbsp;使用一致的风格</p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<p>编码风格实际上是您的环境中必然的并且可接受的东西。我甚至不知道哪一种风格可以称为&#8220;典型的&#8221;。这通常是个人品味问题。</p>
<p>有时候，对于同一段代码，可能有好几种排列方法，实际上没有绝对的&#8220;对&#8221;与&#8220;错&#8221;。实际项目过程中，应该进行协商，挑选出一种来，然后一直坚持用这一种。惟一绝对的风格规则是<em>一致性</em>。如果一个项目上的每个人都用不同的风格，那么阅读代码将变得很困难。挑选一种风格并且不要改变。</p>
</blockquote>
<p dir=ltr>&nbsp;7) 避免switch</p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<p>一些 Java 程序员对 <code><font face=Courier size=1>switch</font></code> 语句情有独钟。我曾经认为它们很好，但是后来我认识到了，一个 <code><font face=Courier size=1>switch</font></code> 实际上就是几个 <code><font face=Courier size=1>if</font></code>，并且通常意味着条件逻辑出现在代码中的多个地方。这是代码重复，是应该禁忌的。为什么？因为在多处具有相同的代码使得代码比较难更改。如果我在三处具有相同的 <code><font face=Courier size=1>switch</font></code>，并且想要更改对某个 case 的处理，我就得在三处更改代码。</p>
<p>现在，如果您可以重构具有单个 <code><font face=Courier size=1>switch</font></code> 语句的代码，那会怎么样呢？很好！我不相信使用它有什么坏处。在有些情况下，它比嵌套的 <code><font face=Courier size=1>if</font></code> 更清晰。但是如果您看到它出现在很多地方，就有了应该解决的问题了。防止这一问题的一个容易的方法是，避免 <code><font face=Courier size=1>switch</font></code>，除非它对于该工作是最佳的工具。依我的经验，它很少是最佳的。</p>
</blockquote>
<p dir=ltr>8) 是public的</p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<p>我把最具争议的建议放在最后。做一下深呼吸。</p>
<p>我相信您会反对让所有的方法都是 <code><font face=Courier size=1>public</font></code> 的。实例变量应该是 <code><font face=Courier size=1>protected</font></code> 的。</p>
<p>当然，许多专业程序员会害怕这种想法，因为如果任何东西都是公共的，那么任何人都可以更改它，也许会以未授权的方式更改。在任何东西都是公共可访问的世界中，您就不得不依赖于程序员纪律，以确保人们在其不应该访问时不会访问其不应该访问的东西。但是在编程生活当中，很少有什么事情比想要访问一个不可见的变量或方法更受挫的了。如果您对代码中您设想其他人不应该访问的东西限制访问，您就是在设想自己无所不知。这在大多数时候是一个危险的假设。</p>
<p>当使用其他人的代码时，这种受挫感会经常出现。您会看到一个方法刚好做您想要做的工作，但是它不是公共可访问的。有时，这有一个很好的原因，并且使得限制可访问性有意义。但是有时，不 <code><font face=Courier size=1>public</font></code> 的惟一原因是，编写代码的人这样想&#8220;没有人需要访问该代码&#8221;，或者他们这样想&#8220;没有人应该访问该代码，因为&#8230;&#8230;&#8221;，于是他们并没有很好的理由。许多时候，人们使用 <code><font face=Courier size=1>private</font></code> 是因为它可用。不要这样做。</p>
<p>使方法是 <code><font face=Courier size=1>public</font></code> 的，变量是 <code><font face=Courier size=1>protected</font></code> 的，直到您有一个很好的理由限制访问。</p>
</blockquote>
<p dir=ltr>现在您知道了如何创建优良的 Java 代码，以及如何保持它优良。</p>
<p>关于该主题，业界最好的书籍是 Martin Fowler 编著的 <em>Refactoring</em>（参见 <a href="file:///Z:/j-intjava/j-intjava-13-2.html"><u><font color=#800080>参考资料</font></u></a> 中的链接）。它读起来甚至很有趣。<em>重构（refactoring）</em> 的意思是在不改变代码结果的情况下，更改现有代码的设计。Fowler 谈论了请求重构的&#8220;代码气味&#8221;，并且详细介绍了用于改变&#8220;代码气味&#8221;的各种技巧（或者&#8220;重构&#8221;）。依我的观点，重构和编写一次通过测试的代码的能力（参阅 <a href="file:///Z:/j-intjava/j-intjava-13-2.html"><u><font color=#800080>参考资料</font></u></a>）是新手程序员要学习的最重要的技能。如果每个人都擅长于这两点，那将彻底改变行业当前的局面。如果<em>您</em> 擅长于这两点，就会比较容易找到工作，因为您能比其他人产生更好的结果。</p>
<p>编写 Java 代码相当简单。编写<em>优良的</em> Java 代码则是一门手艺。倾力成为一个手艺人。</p>
<img src ="http://www.blogjava.net/welldoer/aggbug/131714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welldoer/" target="_blank">快车道</a> 2007-07-22 12:12 <a href="http://www.blogjava.net/welldoer/archive/2007/07/22/131714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>