zoukankan      html  css  js  c++  java
  • 《重构:改善既有代码的设计》——关于代码注释的唠叨

      这几天在看《重构:改善既有代码的设计》英文评注版这本书,以前简单看过这本书,但并不是看的特别深入。经过了一段时间的“磨练”,现在回来重新看这本书,又很多想法。

      首先,这本书是一本好书,我感觉是软件工程师必看的一本书,而且如果有大量的编码经验看这本书会收获很大。这本书主要内容是代码重构。

      在书中第3章中有这样一段话是用来描述代码注释的:

      A good time to use a comment is when you don't know what to do. In addition to describe what is going on,comments can indicate areas in which you aren't  sure. A comments is a good place to say why you did something. 

      书中的中文评注如下:

      高明的程序员绝对不会将注释作为说明代码的重要手段。注释就像咖啡,适量饮用可以提精神,一旦过量,就变得过度亢奋了。

      我个人感觉上面两端话言简意赅的说出了注释的作用,注释只是代码的一个辅助,是为了我们更好的理解代码。其实关于代码风格和注释风格,每个人都有自己的看法。我觉得都没有错,只不过每个人的看法不一样。就像我,我个人认为代码首先是给程序员看的,其次是给机器看的。因为,发明高级程序语言的目的之一就是为了让人们更好的阅读代码。变量和方法的命名就可以说明变量的作用,如果说不清楚,可以使用注释。但如果是简单易懂的变量,我觉得写注释没必要。

    1 string personName;    // 人员姓名

      就像上面的一行代码,我认为没必要写这个注释,不要因为写注释而去写注释。此外,在最近阅读Java源代码的时候,我发现Java源代码注释有很多特点

     1     /**
     2      * Compares two strings lexicographically.
     3      * The comparison is based on the Unicode value of each character in
     4      * the strings. The character sequence represented by this
     5      * {@code String} object is compared lexicographically to the
     6      * character sequence represented by the argument string. The result is
     7      * a negative integer if this {@code String} object
     8      * lexicographically precedes the argument string. The result is a
     9      * positive integer if this {@code String} object lexicographically
    10      * follows the argument string. The result is zero if the strings
    11      * are equal; {@code compareTo} returns {@code 0} exactly when
    12      * the {@link #equals(Object)} method would return {@code true}.
    13      * <p>
    14      * This is the definition of lexicographic ordering. If two strings are
    15      * different, then either they have different characters at some index
    16      * that is a valid index for both strings, or their lengths are different,
    17      * or both. If they have different characters at one or more index
    18      * positions, let <i>k</i> be the smallest such index; then the string
    19      * whose character at position <i>k</i> has the smaller value, as
    20      * determined by using the &lt; operator, lexicographically precedes the
    21      * other string. In this case, {@code compareTo} returns the
    22      * difference of the two character values at position {@code k} in
    23      * the two string -- that is, the value:
    24      * <blockquote><pre>
    25      * this.charAt(k)-anotherString.charAt(k)
    26      * </pre></blockquote>
    27      * If there is no index position at which they differ, then the shorter
    28      * string lexicographically precedes the longer string. In this case,
    29      * {@code compareTo} returns the difference of the lengths of the
    30      * strings -- that is, the value:
    31      * <blockquote><pre>
    32      * this.length()-anotherString.length()
    33      * </pre></blockquote>
    34      *
    35      * @param   anotherString   the {@code String} to be compared.
    36      * @return  the value {@code 0} if the argument string is equal to
    37      *          this string; a value less than {@code 0} if this string
    38      *          is lexicographically less than the string argument; and a
    39      *          value greater than {@code 0} if this string is
    40      *          lexicographically greater than the string argument.
    41      */
    42     public int compareTo(String anotherString) {
    43         int len1 = value.length;
    44         int len2 = anotherString.value.length;
    45         int lim = Math.min(len1, len2);
    46         char v1[] = value;
    47         char v2[] = anotherString.value;
    48 
    49         int k = 0;
    50         while (k < lim) {
    51             char c1 = v1[k];
    52             char c2 = v2[k];
    53             if (c1 != c2) {
    54                 return c1 - c2;
    55             }
    56             k++;
    57         }
    58         return len1 - len2;
    59     }

      这是String类型的compareTo()函数的源代码,注释比较多,但注释比较集中,并没有影响了代码的阅读。我觉得把一些说明性的注释写在文件、类和函数的开头,这样不仅有助于阅读代码,也不会喧宾夺主。其次Java源代码的变量命名非常优美,值得我去学习。

      这就是我对注释的一些唠叨。

  • 相关阅读:
    Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. ......
    UVA 1597 Searching the Web
    UVA 1596 Bug Hunt
    UVA 230 Borrowers
    UVA 221 Urban Elevations
    UVA 814 The Letter Carrier's Rounds
    UVA 207 PGA Tour Prize Money
    UVA 1592 Database
    UVA 540 Team Queue
    UVA 12096 The SetStack Computer
  • 原文地址:https://www.cnblogs.com/finlay/p/3715648.html
Copyright © 2011-2022 走看看