《重构:改善既有代码的设计》——关于代码注释的唠叨

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

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

  在书中第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源代码的变量命名非常优美,值得我去学习。

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

时间: 2024-10-19 22:14:47

《重构:改善既有代码的设计》——关于代码注释的唠叨的相关文章

重构—改善既有代码的设计3——代码的坏味道

1.重复代码 一个以上地点看到相同的程序结构 同一个类的两个函数含有相同的表达式 两个互为兄弟的子类内含有相同表达式:分别提炼代码,推入超类.不完全相同的,将相似部分和差异部分分割 两个毫不相关的类:考虑使用抽象类 2.过长函数 活的好,活的长 "间接层"所能带来的全部利益:解释能力.共享能力.选择能力,都是由小型函数支持的 程序愈长愈难以理解 让小函数容易理解的真正关键在于一个好名字 更积极地分解函数 原则: 当需要以注释来说明点儿什么的时候,将需要说明的东西写进一个独立函数中,并以

《重构——改善既有代码的设计》读书笔记

重构--改善既有代码的设计 1 重构概述 1.1 重构的概念(What) Refactoring 名词:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低修改成本. 动词:使用一系列重构方法,在不改变软件可观察行为的前提下,调整其结构. 1.2 为什么要重构(Why) 改进软件设计 提高代码质量和可读性,使软件系统更易理解和维护 帮助尽早的发现缺陷 提高编程速度 1.3 何时重构(When) 何时重构: 1)随时随地进行. 2)三次法则:第一次做某件事只管去做:

01重构_改善既有代码的设计阅读笔记之一

<重构_改善既有代码的设计>这本书介绍了重构的原理和最佳实践方式,并给出了何时以及何地应该开始挖掘代码以求改善,每个重构都介绍了一种经过验证的代码变换手法的动机和技术. 重构,绝对是写程序过程中最重要的事之一.在写程序之前我们不可能事先了解所有的需求,设计肯定会有考虑不周的地方,而且随着项目需求的修改,也有可能原来的设计已经被改得面目全非了.更何况,我们很少有机会从头到尾完成一个项目,基本上都是接手别人的代码,即使这个项目是从头参与的,也有可能接手其他组员的代码.我们都有过这样的经验,看到别人

《重构--改善既有代码的设计》总结or读后感:重构是程序员的本能

此文写得有点晚,记得去年7月读完的这本书,只是那时没有写文章的意识,也无所谓总结了,现在稍微聊一下吧. 想起写这篇感想,还是前几天看了这么一篇文章 研究发现重构软件并不会改善代码质量 先从一个大家都有的经历说起吧. 刚开始学编程时,比如,要统计数字出现的次数,我们会这么定义变量 int i=0;//统计次数 老师看了说,代码要有可读性,见名知意; 于是,我们把它改成 int count=0; 后来才知道,原来这么一手这就是重构的第一式,重命名 (eclipse快捷键 alt+shift+R,最近

重构,改善既有代码的设计--第七章感悟

1.提炼类 某个类做了应该由两个类做的事,需要建立一个新的类,将相关的字段和函数从旧类搬到新类. 先搬较底层函数(就是给别人调用多过于调用别人的),再搬高层函数. 重构,改善既有代码的设计--第七章感悟,布布扣,bubuko.com

重构,改善既有代码的设计--第八章感悟

1.如果你看到一个数组的行为方式很像一个数据结构,就可以把数组变成对象 private int aa,变成:  int aa; public int GetAA() {return aa;}//好处:使得获取的数据更加有效 重构,改善既有代码的设计--第八章感悟,布布扣,bubuko.com

【转】PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数

原文地址: PHP 杂谈<重构-改善既有代码的设计>之一 重新组织你的函数 思维导图 点击下图,可以看大图. 介绍 我把我比较喜欢的和比较关注的地方写下来和大家分享.上次我写了篇<php 跟老大的对话>.还是有很多疑问,这书帮了我不少的忙. 如果你比较繁忙,或者懒得看文字,建议你直接看截图,也会有很大的收获的.你可以通过比较截图中的代码就能知道孰优孰劣了. 代码部分我为什么用图呢?因为我经常用手机看代码,博客园的代码在手机里乱七八糟的,还是看图比较舒服. 专业术语 我们毕竟是用英文

重构改善既有代码的设计思维导图

最近闲来无事就把之前看的书,做了一张张的思维导图,来分享给大家 重构改善既有代码的设计思维导图: --------------- 不知道是博客园的问题,还是我的浏览器的问题,图片没法上传,如有人想要想看 可以给我发邮件: [email protected]  只为共同学习.也可以留言!!!

重构,改善既有代码的设计--总结篇

重构,改善既有代码的设计--第一章感悟 一.书中经典句子 1.重构之前,首先检查自己是否有一套可靠的测试机制.这些测试必须有自我检验能力. 2.面对长长的函数,需要分解,代码块越小越好管理. 二.自己总结的句子 1.修改长长的函数,找到变的参数和不变的参数,变的参数保留,不变的参数传入新函数. 2.重构的时候使用快捷键重构之后,需要检查方法里面的参数,参数如果是不变的值如a=1;,直接在方法里面去定义就行了,这样就省去了传值的过程,效率更高. 3.在重构函数之后,若函数的参数不属于当前类,并且函

重构改善代码的既有设计

最近在学习重构改善代码的即有设计,虽然在平时的工作学习中有尝试进行重构,但没有清晰的思路往往就是随性而为,以个人的编码风格为准,我们往往知道这样会更好,但是面对编程风格的挑战时,我们往往拿不出准确专业的理论去说服别人遵循这项准则,而我们的想法最终也无疾而终,还是沦落成为个人英雄主义. 此博客不是为了阐述,仅因为还未完全熟练,需时时查看,但是在工作中往往书不在身边,无法翻阅时作为参考: 重新组织函数: Extract Method(提炼函数) Inline Method(内连函数) Inline