<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.tomtalk.net/index.php?action=history&amp;feed=atom&amp;title=%E5%86%99%E5%87%BA%E6%BC%82%E4%BA%AE%E4%BB%A3%E7%A0%81%E7%9A%84%E4%B8%83%E7%A7%8D%E6%96%B9%E6%B3%95</id>
		<title>写出漂亮代码的七种方法 - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.tomtalk.net/index.php?action=history&amp;feed=atom&amp;title=%E5%86%99%E5%87%BA%E6%BC%82%E4%BA%AE%E4%BB%A3%E7%A0%81%E7%9A%84%E4%B8%83%E7%A7%8D%E6%96%B9%E6%B3%95"/>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=%E5%86%99%E5%87%BA%E6%BC%82%E4%BA%AE%E4%BB%A3%E7%A0%81%E7%9A%84%E4%B8%83%E7%A7%8D%E6%96%B9%E6%B3%95&amp;action=history"/>
		<updated>2026-04-24T11:24:42Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>http://wiki.tomtalk.net/index.php?title=%E5%86%99%E5%87%BA%E6%BC%82%E4%BA%AE%E4%BB%A3%E7%A0%81%E7%9A%84%E4%B8%83%E7%A7%8D%E6%96%B9%E6%B3%95&amp;diff=2512&amp;oldid=prev</id>
		<title>Tom：以“==写出漂亮代码的七种方法== 首先我想说明我本文阐述的是纯粹从美学的角度来写出代码，而非技术、逻辑等。以下为写出漂...”为内容创建页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=%E5%86%99%E5%87%BA%E6%BC%82%E4%BA%AE%E4%BB%A3%E7%A0%81%E7%9A%84%E4%B8%83%E7%A7%8D%E6%96%B9%E6%B3%95&amp;diff=2512&amp;oldid=prev"/>
				<updated>2012-08-11T09:27:02Z</updated>
		
		<summary type="html">&lt;p&gt;以“==写出漂亮代码的七种方法== 首先我想说明我本文阐述的是纯粹从美学的角度来写出代码，而非技术、逻辑等。以下为写出漂...”为内容创建页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==写出漂亮代码的七种方法==&lt;br /&gt;
首先我想说明我本文阐述的是纯粹从美学的角度来写出代码，而非技术、逻辑等。以下为写出漂亮代码的七种方法：&lt;br /&gt;
&lt;br /&gt;
1， 尽快结束 if语句&lt;br /&gt;
&lt;br /&gt;
例如下面这个JavaScript语句，看起来就很恐怖：&lt;br /&gt;
&lt;br /&gt;
 function findShape(flags, point, attribute, list) {&lt;br /&gt;
&lt;br /&gt;
    if(!findShapePoints(flags, point, attribute)) {&lt;br /&gt;
&lt;br /&gt;
        if(!doFindShapePoints(flags, point, attribute)) {&lt;br /&gt;
&lt;br /&gt;
            if(!findInShape(flags, point, attribute)) {&lt;br /&gt;
&lt;br /&gt;
                if(!findFromGuide(flags,point) {&lt;br /&gt;
&lt;br /&gt;
                    if(list.count() &amp;gt; 0 &amp;amp;&amp;amp; flags == 1) {&lt;br /&gt;
&lt;br /&gt;
                          doSomething();&lt;br /&gt;
&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
    }   &lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
但如果这么写就好看得多：&lt;br /&gt;
&lt;br /&gt;
 function findShape(flags, point, attribute, list) {&lt;br /&gt;
&lt;br /&gt;
    if(findShapePoints(flags, point, attribute)) {&lt;br /&gt;
&lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(doFindShapePoints(flags, point, attribute)) {&lt;br /&gt;
&lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(findInShape(flags, point, attribute)) {&lt;br /&gt;
&lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(findFromGuide(flags,point) {&lt;br /&gt;
&lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!(list.count() &amp;gt; 0 &amp;amp;&amp;amp; flags == 1)) {&lt;br /&gt;
&lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    doSomething();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
你可能会很不喜欢第二种的表述方式，但反映出了迅速返回if值的思想，也可以理解为：避免不必要的else陈述。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2， 如果只是简单的布尔运算（逻辑运算），不要使用if语句&lt;br /&gt;
&lt;br /&gt;
例如：&lt;br /&gt;
&lt;br /&gt;
 function isStringEmpty(str){&lt;br /&gt;
&lt;br /&gt;
    if(str === &amp;quot;&amp;quot;) {&lt;br /&gt;
&lt;br /&gt;
        return true;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    else {&lt;br /&gt;
&lt;br /&gt;
        return false;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
可以写为：&lt;br /&gt;
&lt;br /&gt;
 function isStringEmpty(str){&lt;br /&gt;
&lt;br /&gt;
    return (str === &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3， 使用空白，这是免费的&lt;br /&gt;
&lt;br /&gt;
例如：&lt;br /&gt;
&lt;br /&gt;
 function getSomeAngle() {&lt;br /&gt;
&lt;br /&gt;
    // Some code here then&lt;br /&gt;
&lt;br /&gt;
    radAngle1 = Math.atan(slope(center, point1));&lt;br /&gt;
&lt;br /&gt;
    radAngle2 = Math.atan(slope(center, point2));&lt;br /&gt;
&lt;br /&gt;
    firstAngle = getStartAngle(radAngle1, point1, center);&lt;br /&gt;
&lt;br /&gt;
    secondAngle = getStartAngle(radAngle2, point2, center);&lt;br /&gt;
&lt;br /&gt;
    radAngle1 = degreesToRadians(firstAngle);&lt;br /&gt;
&lt;br /&gt;
    radAngle2 = degreesToRadians(secondAngle);&lt;br /&gt;
&lt;br /&gt;
    baseRadius = distance(point, center);&lt;br /&gt;
&lt;br /&gt;
    radius = baseRadius + (lines * y);&lt;br /&gt;
&lt;br /&gt;
    p1[&amp;quot;x&amp;quot;] = roundValue(radius * Math.cos(radAngle1) + center[&amp;quot;x&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
    p1[&amp;quot;y&amp;quot;] = roundValue(radius * Math.sin(radAngle1) + center[&amp;quot;y&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
    pt2[&amp;quot;x&amp;quot;] = roundValue(radius * Math.cos(radAngle2) + center[&amp;quot;y&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
    pt2[&amp;quot;y&amp;quot;] = roundValue(radius * Math.sin(radAngle2) + center[&amp;quot;y&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // Now some more code&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
很多开发者不愿意使用空白，就好像这要收费一样。我在此并非刻意地添加空白，粗鲁地打断代码的连贯性。在实际编写代码的过程中，会很容易地发现在什么地方加入空白，这不但美观而且让读者易懂，如下：&lt;br /&gt;
&lt;br /&gt;
 function getSomeAngle() {&lt;br /&gt;
&lt;br /&gt;
    // Some code here then&lt;br /&gt;
&lt;br /&gt;
    radAngle1 = Math.atan(slope(center, point1));&lt;br /&gt;
&lt;br /&gt;
    radAngle2 = Math.atan(slope(center, point2));&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
    firstAngle = getStartAngle(radAngle1, point1, center);&lt;br /&gt;
&lt;br /&gt;
    secondAngle = getStartAngle(radAngle2, point2, center);&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
    radAngle1 = degreesToRadians(firstAngle);&lt;br /&gt;
&lt;br /&gt;
    radAngle2 = degreesToRadians(secondAngle);&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
    baseRadius = distance(point, center);&lt;br /&gt;
&lt;br /&gt;
    radius = baseRadius + (lines * y);&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
    p1[&amp;quot;x&amp;quot;] = roundValue(radius * Math.cos(radAngle1) + center[&amp;quot;x&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
    p1[&amp;quot;y&amp;quot;] = roundValue(radius * Math.sin(radAngle1) + center[&amp;quot;y&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
    pt2[&amp;quot;x&amp;quot;] = roundValue(radius * Math.cos(radAngle2) + center[&amp;quot;y&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
    pt2[&amp;quot;y&amp;quot;] = roundValue(radius * Math.sin(radAngle2) + center[&amp;quot;y&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // Now some more code&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
4， 不要使用无谓的注释&lt;br /&gt;
&lt;br /&gt;
无谓的注释让人费神，这实在很讨厌。不要标出很明显的注释。在以下的例子中，每个人都知道代码表达的是“students id”，因而没必要标出。&lt;br /&gt;
&lt;br /&gt;
 function existsStudent(id, list) {&lt;br /&gt;
&lt;br /&gt;
    for(i = 0; i &amp;lt; list.length; i++) {&lt;br /&gt;
&lt;br /&gt;
       student = list[i];&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
       // Get the student's id&lt;br /&gt;
&lt;br /&gt;
       thisId = student.getId();&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
       if(thisId === id) {&lt;br /&gt;
&lt;br /&gt;
           return true;&lt;br /&gt;
&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return false;   &lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
5， 不要在源文件中留下已经删除的代码，哪怕你标注了&lt;br /&gt;
&lt;br /&gt;
如果你使用了版本控制，那么你就可以轻松地找回前一个版本的代码。如果别人大费周折地读了你的代码,却发现是要删除的代码，这实在太恨人了。&lt;br /&gt;
&lt;br /&gt;
//function thisReallyHandyFunction() {&lt;br /&gt;
&lt;br /&gt;
//      someMagic();&lt;br /&gt;
&lt;br /&gt;
//      someMoreMagic();&lt;br /&gt;
&lt;br /&gt;
//      magicNumber = evenMoreMagic();&lt;br /&gt;
&lt;br /&gt;
//      return magicNumber;&lt;br /&gt;
&lt;br /&gt;
//}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6，不要有太长的代码&lt;br /&gt;
&lt;br /&gt;
看太长的代码实在太费劲，尤其是代码本身的功能又很小。如下：&lt;br /&gt;
&lt;br /&gt;
 public static EnumMap&amp;lt;Category, IntPair&amp;gt; getGroupCategoryDistribution(EnumMap&amp;lt;Category, Integer&amp;gt; sizes, int groups) {&lt;br /&gt;
&lt;br /&gt;
EnumMap&amp;lt;Category, IntPair&amp;gt; categoryGroupCounts = new EnumMap&amp;lt;Category,IntPair&amp;gt;(Category.class);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for(Category cat : Category.values()) {&lt;br /&gt;
&lt;br /&gt;
    categoryGroupCounts.put(cat, getCategoryDistribution(sizes.get(cat), groups));&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
我并不是说非要坚持70个字符以内，但是一个比较理想的长度是控制在120个字符内。如果你把代码发布在互联网上，用户读起来就很困难。&lt;br /&gt;
&lt;br /&gt;
7，不要在一个功能（或者函数内）有太多代码行&lt;br /&gt;
&lt;br /&gt;
我的一个老同事曾经说Visual C++很臭，因为它不允许你在一个函数内拥有超过10，000行代码。我记不清代码行数的上限，不知道他说的是否正确，但我很不赞成他的观点。如果一个函数超过了50行，看起来有多费劲你知道么，还有没完没了的if循环，而且你还的滚动鼠标前后对照这段代码。对我而言，超过35行的代码理解起来就很困难了。我的建议是超过这个数字就把一个函数代码分割成两个。&lt;/div&gt;</summary>
		<author><name>Tom</name></author>	</entry>

	</feed>