<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bookcold&#039;s Blog &#187; Clean Code</title>
	<atom:link href="http://bookcold.com/tag/clean-code/feed" rel="self" type="application/rss+xml" />
	<link>http://bookcold.com</link>
	<description>Just for pleasure</description>
	<lastBuildDate>Thu, 09 Sep 2010 06:49:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>《Clean Code》之代码坏味及启发</title>
		<link>http://bookcold.com/2010/03/341</link>
		<comments>http://bookcold.com/2010/03/341#comments</comments>
		<pubDate>Sun, 14 Mar 2010 15:15:45 +0000</pubDate>
		<dc:creator>bookcold</dc:creator>
				<category><![CDATA[读书笔记]]></category>
		<category><![CDATA[Clean Code]]></category>

		<guid isPermaLink="false">http://bookcold.com/2010/03/341</guid>
		<description><![CDATA[注释 不恰当的信息 注释只应该描述有关代码和设计的技术性信息，而不是那些本应该在源代码控制系统中保存的信息。 废弃的注释 注释很快会过时。废弃的注释应及时删除 冗余注释 若果注释解释的是一目了然的东西，就是多余的 糟糕的注释 如果值得编写注释就好好写，保证正确的语法和拼写 注释掉的代码 注释掉的代码吗污染了所属模块，放散了注意力。应该删除！ 环境 需要多步才能实现的构建 构建系统应该是单步的小操作——应当能够用单个命令签出系统，并用单个指令构建 需要多步才能做到的测试 应该发出单个指令就可以运行全部单元测试 函数 过多的参数 函数参数应该少 输出参数 输出参数违反直觉。若果函数非要修改某东西的状态，就修改它所在对象的状态 标识参数 布尔值参数的存在就意味着函数不止做了一件事，应该消灭 死函数 永不调用的函数应该丢弃 一般性问题 一个源文件中存在多种语言 理想的源文件有且仅有一种语言 明显的行为未被实现 函数或类应该实现其他程序员有理由期待的行为。通过函数名的直觉应该能够理解函数的行为 不正确的边界行为 代码应该在所有的边界情况下都能工作。别依赖直觉。探寻每种边界条件，并编写测试 忽视安全 不要忽视编译器的警告和错误 重复 重复的代码，意味着遗漏了抽象。尽可能找到重复并消除它 在错误的抽象层次上的代码 创建分离较高层级一般性概念与较低层级细节概念的抽象模型。所有较低层级概念放在派生类中，所有较高层级概念放在基类中 基类依赖于派生类 如果看到基类提到派生类名称，就可能出问题了 信息过多 设计良好的模块有着非常小的接口。应该限制类或模块中暴露的接口数量。 死代码 不执行的代码应该从系统中删除 垂直分割 变量和函数应该在靠近被使用的地方定义 前后不一致 消息选择约定，一旦选中，就消息持续遵循 混淆视听 保存源代码整洁，良好的组织 晦涩的意图 代码要尽可能居有表达力。联排表达式、匈牙利标记法和魔术数都遮盖了作者的意图 位置错误的权责 代码应该放在读者自热而然期待它所在的位置 [...]]]></description>
			<content:encoded><![CDATA[<h4>注释</h4>
<ul>
<li>不恰当的信息 注释只应该描述有关代码和设计的技术性信息，而不是那些本应该在源代码控制系统中保存的信息。</li>
<li>废弃的注释 注释很快会过时。废弃的注释应及时删除</li>
<li>冗余注释 若果注释解释的是一目了然的东西，就是多余的</li>
<li>糟糕的注释 如果值得编写注释就好好写，保证正确的语法和拼写</li>
<li>注释掉的代码 注释掉的代码吗污染了所属模块，放散了注意力。应该删除！</li>
</ul>
<h4>环境</h4>
<ul>
<li>需要多步才能实现的构建 构建系统应该是单步的小操作——应当能够用单个命令签出系统，并用单个指令构建</li>
<li>需要多步才能做到的测试 应该发出单个指令就可以运行全部单元测试</li>
</ul>
<h4>函数</h4>
<ul>
<li>过多的参数 函数参数应该少</li>
<li>输出参数 输出参数违反直觉。若果函数非要修改某东西的状态，就修改它所在对象的状态</li>
<li>标识参数 布尔值参数的存在就意味着函数不止做了一件事，应该消灭</li>
<li>死函数 永不调用的函数应该丢弃</li>
</ul>
<h4>一般性问题</h4>
<ul>
<li>一个源文件中存在多种语言 理想的源文件有且仅有一种语言</li>
<li>明显的行为未被实现 函数或类应该实现其他程序员有理由期待的行为。通过函数名的直觉应该能够理解函数的行为</li>
<li>不正确的边界行为 代码应该在所有的边界情况下都能工作。别依赖直觉。探寻每种边界条件，并编写测试</li>
<li>忽视安全 不要忽视编译器的警告和错误</li>
<li>重复 重复的代码，意味着遗漏了抽象。尽可能找到重复并消除它</li>
<li>在错误的抽象层次上的代码 创建分离较高层级一般性概念与较低层级细节概念的抽象模型。所有较低层级概念放在派生类中，所有较高层级概念放在基类中</li>
<li>基类依赖于派生类 如果看到基类提到派生类名称，就可能出问题了</li>
<li>信息过多 设计良好的模块有着非常小的接口。应该限制类或模块中暴露的接口数量。</li>
<li>死代码 不执行的代码应该从系统中删除</li>
<li>垂直分割 变量和函数应该在靠近被使用的地方定义</li>
<li>前后不一致 消息选择约定，一旦选中，就消息持续遵循</li>
<li>混淆视听 保存源代码整洁，良好的组织</li>
<li>晦涩的意图 代码要尽可能居有表达力。联排表达式、匈牙利标记法和魔术数都遮盖了作者的意图</li>
<li>位置错误的权责 代码应该放在读者自热而然期待它所在的位置</li>
<li>不恰当的静态方法 倾向于选用非静态函数。如果的确要静态函数，确保没机会打算让它有多态行为</li>
<li>使用解释下变量 把计算过程打散成一系列良好命名的中间值，不透明的模块就会突然变得透明</li>
<li>函数应该表达其行为 应该能从函数调用中看出函数的行为</li>
<li>理解算法</li>
<li>用命名常量代替魔术数 魔术数现在不仅指数字，泛指任何不能自我描述的符号</li>
<li>准确 对自己做的决定，确认足够准确。代码的执行要能保证准确性</li>
<li>结构甚于约定 命名约定很好，但却次于强制性的结构</li>
<li>封装条件 应该把解释了条件意图的函数抽离出来</li>
<li>避免否定性条件 否定式条件要比肯定式难理解，尽可能将条件表示为肯定形式</li>
<li>函数只做一件事情</li>
<li>函数应该只在一个抽象层次上 函数中的语句应该在同一抽象层级上，该抽象层级应该是函数名所示操作的下一层。</li>
<li>在较高层次放置可配置数据 位于较高层级的配置性常量易于修改。它们向下贯穿应用程序。应用程序的较低层级并不拥有这些常量的值</li>
<li>避免传递浏览 不要让某个模块了解太多其协作者的信息。确保模块只了解其直接协作者而不了解整个系统的浏览图。</li>
</ul>
<h4>名称</h4>
<ul>
<li>采用描述性名称</li>
<li>避免编码 不应在名称中包括类型或作用范围信息</li>
<li>名称应该说明副作用 名称应该说明函数、变量或类的一切信息。不要用名称掩盖副作用</li>
</ul>
<h4>测试</h4>
<ul>
<li>测试不足</li>
<li>使用覆盖率工具</li>
<li>别忽略小测试</li>
<li>被忽略的测试就是对不确定事物的疑问</li>
<li>测试边界条件</li>
<li>全面测试相近的缺陷</li>
<li>测试失败的模式有启发性 完整的测试用例、按合理的顺序排列，能暴露出通用性的问题</li>
<li>测试覆盖率的模式有启发性</li>
<li>测试应该快速</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://bookcold.com/2010/03/341/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《Clean Code》之格式</title>
		<link>http://bookcold.com/2010/03/300</link>
		<comments>http://bookcold.com/2010/03/300#comments</comments>
		<pubDate>Mon, 01 Mar 2010 15:15:53 +0000</pubDate>
		<dc:creator>bookcold</dc:creator>
				<category><![CDATA[读书笔记]]></category>
		<category><![CDATA[Clean Code]]></category>

		<guid isPermaLink="false">http://bookcold.com/2010/03/01/300/</guid>
		<description><![CDATA[垂直格式 短小精悍 每个空白行都是一条线索，标识出新的独立概念 靠近的代码行则暗示了代码间的紧密关系 变量声明应尽可能靠近其使用位置 实体变量应该在类的顶部声明 被调用函数应该在执行调用函数下面 横向格式 <p>使用空格字符将彼此紧密相关的代码连接起来，也用空格字符把相关性较弱的代码分隔开。</p> <p>在赋值操作符周围加油空格，达到强调的目的</p> <p>不在函数名和左圆括号之间空格</p> <p>空格可以强调其前面的运算符</p> <p>缩进原则</p> 团队规则 <p>每个程序员都有自己喜欢的格式规则，如果在一个团队中，就是团队说了算！</p> ]]></description>
			<content:encoded><![CDATA[<h2>垂直格式</h2>
<ol>
<li>短小精悍</li>
<li>每个空白行都是一条线索，标识出新的独立概念</li>
<li>靠近的代码行则暗示了代码间的紧密关系</li>
<li>变量声明应尽可能靠近其使用位置</li>
<li>实体变量应该在类的顶部声明</li>
<li>被调用函数应该在执行调用函数下面</li>
</ol>
<h2>横向格式</h2>
<ol>
<li>
<p>使用空格字符将彼此紧密相关的代码连接起来，也用空格字符把相关性较弱的代码分隔开。</p>
</li>
<ul>
<li>
<p>在赋值操作符周围加油空格，达到强调的目的</p>
</li>
<li>
<p>不在函数名和左圆括号之间空格</p>
</li>
<li>
<p>空格可以强调其前面的运算符</p>
</li>
</ul>
<li>
<p>缩进原则</p>
</li>
</ol>
<h2>团队规则</h2>
<p>每个程序员都有自己喜欢的格式规则，如果在一个团队中，就是团队说了算！</p>
]]></content:encoded>
			<wfw:commentRss>http://bookcold.com/2010/03/300/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>《Clean Code》之注释</title>
		<link>http://bookcold.com/2010/02/295</link>
		<comments>http://bookcold.com/2010/02/295#comments</comments>
		<pubDate>Thu, 25 Feb 2010 11:27:31 +0000</pubDate>
		<dc:creator>bookcold</dc:creator>
				<category><![CDATA[读书笔记]]></category>
		<category><![CDATA[Clean Code]]></category>

		<guid isPermaLink="false">http://bookcold.com/2010/02/25/295/</guid>
		<description><![CDATA[<p>“别给糟糕的代码加注释——重新写吧”</p> <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160; Brian W.Kernighan与P.J.Plaugher</p> 1. 注释不能美化糟糕的代码 2. 用代码来阐述 3. 好注释 法律信息 提供信息的注释 如：解释正则表达式的作用 对意图的解释 阐释 对于某些不能修改的代码，阐释其含义 警示 TODO注释 TODO是程序员认为应该做，但由于某些原因目前还没做的工作 放大 放大某种看来不合理之物的重要性 4. 坏注释 喃喃自语 仅只是因为觉得应该或者因为过程需要就添加注释 多余的注释 误导性的注释 注释往往不够精确 循规式注释 日志式注释 废话式注释 能用函数或变量时就别用注释 位置标记 不要滥用标记栏 括号后面的注释 如：标记循环结束的括号 //while 归属或署名 源代码控制系统是这类信息最好的归属地 注释掉的代码 HTML注释 非本地信息 信息过多 不明显的联系 注释及其描述的代码之间的联系应该显而易见 [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong><em><font size="4">“别给糟糕的代码加注释——重新写吧”</font></em></strong></p>
</blockquote>
<blockquote><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <strong><em>&#160;&#160;&#160;&#160; Brian W.Kernighan与P.J.Plaugher</em></strong></p>
</blockquote>
<h2>1. 注释不能美化糟糕的代码</h2>
<h2>2. 用代码来阐述</h2>
<h2>3. 好注释</h2>
<ol>
<ol>
<li>法律信息</li>
<li>提供信息的注释 如：解释正则表达式的作用</li>
<li>对意图的解释</li>
<li>阐释 对于某些不能修改的代码，阐释其含义</li>
<li>警示</li>
<li>TODO注释 TODO是程序员认为应该做，但由于某些原因目前还没做的工作</li>
<li>放大 放大某种看来不合理之物的重要性</li>
</ol>
</ol>
<h2>4. 坏注释</h2>
<ol>
<ol>
<li>喃喃自语 仅只是因为觉得应该或者因为过程需要就添加注释</li>
<li>多余的注释</li>
<li>误导性的注释 注释往往不够精确</li>
<li>循规式注释</li>
<li>日志式注释</li>
<li>废话式注释</li>
<li>能用函数或变量时就别用注释</li>
<li>位置标记 不要滥用标记栏</li>
<li>括号后面的注释 如：标记循环结束的括号 //while</li>
<li>归属或署名 源代码控制系统是这类信息最好的归属地</li>
<li>注释掉的代码</li>
<li>HTML注释</li>
<li>非本地信息</li>
<li>信息过多</li>
<li>不明显的联系 注释及其描述的代码之间的联系应该显而易见</li>
<li>函数头注释</li>
</ol>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://bookcold.com/2010/02/295/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《Clean Code》之函数</title>
		<link>http://bookcold.com/2010/02/291</link>
		<comments>http://bookcold.com/2010/02/291#comments</comments>
		<pubDate>Wed, 24 Feb 2010 08:27:23 +0000</pubDate>
		<dc:creator>bookcold</dc:creator>
				<category><![CDATA[读书笔记]]></category>
		<category><![CDATA[Clean Code]]></category>

		<guid isPermaLink="false">http://bookcold.com/2010/02/24/291/</guid>
		<description><![CDATA[1. 短小 <p>每个函数都一目了然。每个函数都只做一件事。并且每个函数都依序把你带到下一个函数。这就是函数应该达到的短小程度。函数的代码块缩进层级不该多于一层或两层。这样的函数易于阅读和理解。</p> 2. 只做一件事 <p>函数应该做一件事。做好这件事。只做一件事。函数只是做了该函数名下同一抽象层上的步骤，则函数还是只做了一件事。</p> 3. 每个函数一个抽象层级 <p>自顶向下读代码——向下规则：要让每个函数后面都跟着位于下一抽象层级的函数，这样，在查看函数列表时，就能按照抽象层级向下阅读了。</p> 4. 使用描述性名称 <p>长而具有描述性的名称要比短而令人费解的名称好。长而具有描述性的名称，要比描述性的注释好。</p> 5. 函数参数 <p>最理想的参数数量是零。参数与函数名处在不同的抽象层级，它要求你了解目前并不特别重要的细节。从测试角度看，参数越多越难测试。</p> 6. 无副作用 <p>函数承诺只做一件事，但还是会做其他被藏起来的事，这些事都是具有破坏性的，可能导致古怪的时序性耦合及顺序依赖。</p> 7. 分割指令与询问 <p>函数要么做什么事，要么回答什么事，但二者不可兼得。</p> 8. 使用异常替代返回错误码 <p>使用异常处理替代返回错误码，错误处理代码能从主路径代码中分离出来。</p> 抽离try/catch代码块，它们把错误处理与正常流程混为一谈。下面的写法更优雅： public void delete(){ try{ deletePage(); } catch (Exception e){ logError(e); } } private void logError(Exception e) { } private void deletePage() { } <p></p> 错误处理就是一件事 9. 别重复自己 10. [...]]]></description>
			<content:encoded><![CDATA[<h2>1. 短小</h2>
<p>每个函数都一目了然。每个函数都只做一件事。并且每个函数都依序把你带到下一个函数。这就是函数应该达到的短小程度。函数的代码块缩进层级不该多于一层或两层。这样的函数易于阅读和理解。</p>
<h2>2. 只做一件事</h2>
<p>函数应该做一件事。做好这件事。只做一件事。函数只是做了该函数名下同一抽象层上的步骤，则函数还是只做了一件事。</p>
<h2>3. 每个函数一个抽象层级</h2>
<p>自顶向下读代码——向下规则：要让每个函数后面都跟着位于下一抽象层级的函数，这样，在查看函数列表时，就能按照抽象层级向下阅读了。</p>
<h2>4. 使用描述性名称</h2>
<p>长而具有描述性的名称要比短而令人费解的名称好。长而具有描述性的名称，要比描述性的注释好。</p>
<h2>5. 函数参数</h2>
<p>最理想的参数数量是零。参数与函数名处在不同的抽象层级，它要求你了解目前并不特别重要的细节。从测试角度看，参数越多越难测试。</p>
<h2>6. 无副作用</h2>
<p>函数承诺只做一件事，但还是会做其他被藏起来的事，这些事都是具有破坏性的，可能导致古怪的时序性耦合及顺序依赖。</p>
<h2>7. 分割指令与询问</h2>
<p>函数要么做什么事，要么回答什么事，但二者不可兼得。</p>
<h2>8. 使用异常替代返回错误码</h2>
<p>使用异常处理替代返回错误码，错误处理代码能从主路径代码中分离出来。</p>
<ul>
<li>抽离try/catch代码块，它们把错误处理与正常流程混为一谈。下面的写法更优雅：</li>
</ul>
<pre class="code"><span style="color: blue">   public void </span>delete(){
       <span style="color: blue">try</span>{
           deletePage();
       }
       <span style="color: blue">catch </span>(<span style="color: #2b91af">Exception </span>e){
           logError(e);
       }</pre>
<pre class="code">   }
   <span style="color: blue">private void </span>logError(<span style="color: #2b91af">Exception </span>e)
   { }
  <span style="color: blue">private void </span>deletePage()
   { }</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<ul>
<li>错误处理就是一件事</li>
</ul>
<h2>9. 别重复自己</h2>
<h2>10. 如何写出这样的代码：重构！！</h2>
]]></content:encoded>
			<wfw:commentRss>http://bookcold.com/2010/02/291/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《Clean Code》之有意义的命名</title>
		<link>http://bookcold.com/2010/02/288</link>
		<comments>http://bookcold.com/2010/02/288#comments</comments>
		<pubDate>Wed, 24 Feb 2010 07:10:13 +0000</pubDate>
		<dc:creator>bookcold</dc:creator>
				<category><![CDATA[读书笔记]]></category>
		<category><![CDATA[Clean Code]]></category>

		<guid isPermaLink="false">http://bookcold.com/2010/02/24/288/</guid>
		<description><![CDATA[1. 名副其实 选个好名字要花时间，但省下来的时间比花掉的多 一旦发现有更好的名称，就换掉旧的 2. 避免误导 避免留下隐藏代码本意的错误线索 避免使用与本意相悖的词 如：不用accountList来指代一组账号，出非它真的是List类型 3. 做有意义的区分 命名并不仅仅只是为满足编译器的需要 如：一个ProductInfo类和ProductData类，它们名称虽然不同，意思却无区别。 4. 使用读得出来的名称 不要随意自造词 5. 使用可搜索的名称 长名称胜于短名称，搜得到的名称胜于用自造编码代写的名称 单字母名称仅用于短方法中的本地变量 名称长短与其作用域大小相对应 6. 避免使用编码 匈牙利标记法（HN） 在现代编译器的情况下，已经过时了 成员前缀 应当把类和函数做得足够小，消除对成员前缀的需要 接口和实现 接口的前导字母I被滥用。通常并不想让用户知道提供使用的是接口 7. 避免思维映射 不应当让读者在脑中把你的名称翻译为他们熟知的名称 这种问题经常出现在选择是使用问题域术语还是解决方案领域术语时 8. 类名 类名和对象名应该是名词或名词短语 类名不应当时动词 9. 方法名 方法名应当是动词或动词短语。属性访问器、修改器和断言应该根据其值命名，并可加上get、set和is前缀。 10. 别扮可爱 切忌华而不实！言到意到！ 11. 每个概念对应一个词 给每个抽象概念选一个词，并且一以贯之 12. 别用双关语 避免将同一词用于不同目的 同一术语用于不同概念，就算是双关语了 13. 使用解决方案领域名称 使用计算机科学术语，尽量不使用用所涉领域名称来命名。因为只有程序员会读你的代码。 14. [...]]]></description>
			<content:encoded><![CDATA[<h2>1. 名副其实</h2>
<ul>
<li>选个好名字要花时间，但省下来的时间比花掉的多</li>
<li>一旦发现有更好的名称，就换掉旧的</li>
</ul>
<h2>2. 避免误导</h2>
<ul>
<li>避免留下隐藏代码本意的错误线索</li>
<li>避免使用与本意相悖的词</li>
<li>如：不用accountList来指代一组账号，出非它真的是List类型</li>
</ul>
<h2>3. 做有意义的区分</h2>
<ul>
<li>命名并不仅仅只是为满足编译器的需要</li>
<li>如：一个ProductInfo类和ProductData类，它们名称虽然不同，意思却无区别。</li>
</ul>
<h2>4. 使用读得出来的名称</h2>
<ul>
<li>不要随意自造词</li>
</ul>
<h2>5. 使用可搜索的名称</h2>
<ul>
<li>长名称胜于短名称，搜得到的名称胜于用自造编码代写的名称</li>
<li>单字母名称仅用于短方法中的本地变量</li>
<li><strong>名称长短与其作用域大小相对应</strong></li>
</ul>
<h2>6. 避免使用编码</h2>
<ol>
<li>
<ol>
<li>匈牙利标记法（HN） 在现代编译器的情况下，已经过时了</li>
<li>成员前缀 应当把类和函数做得足够小，消除对成员前缀的需要</li>
<li>接口和实现 接口的前导字母I被滥用。通常并不想让用户知道提供使用的是接口</li>
</ol>
</li>
</ol>
<h2>7. 避免思维映射</h2>
<ul>
<li>不应当让读者在脑中把你的名称翻译为他们熟知的名称</li>
<li>这种问题经常出现在选择是使用问题域术语还是解决方案领域术语时</li>
</ul>
<h2>8. 类名</h2>
<ul>
<li>类名和对象名应该是名词或名词短语</li>
<li>类名不应当时动词</li>
</ul>
<h2>9. 方法名</h2>
<ul>
<li>方法名应当是动词或动词短语。属性访问器、修改器和断言应该根据其值命名，并可加上get、set和is前缀。</li>
</ul>
<h2>10. 别扮可爱</h2>
<ul>
<li>切忌华而不实！言到意到！</li>
</ul>
<h2>11. 每个概念对应一个词</h2>
<ul>
<li>给每个抽象概念选一个词，并且一以贯之</li>
</ul>
<h2>12. 别用双关语</h2>
<ul>
<li>避免将同一词用于不同目的</li>
<li>同一术语用于不同概念，就算是双关语了</li>
</ul>
<h2>13. 使用解决方案领域名称</h2>
<ul>
<li>使用计算机科学术语，尽量不使用用所涉领域名称来命名。因为只有程序员会读你的代码。</li>
</ul>
<h2>14. 使用源自所涉问题领域的名称</h2>
<ul>
<li>如果不能用程序员熟悉的术语来给手头的工作命名，就采用所涉问题领域的名称</li>
<li>与所涉问题领域更为贴近的代码，应当采用源自问题领域的名称</li>
</ul>
<h2>15. 添加有意义的语境</h2>
<ul>
<li>很少有名称能自我说明的。因此，需要用有良好命名的类、函数或命名空间来放置名称，给读者提供语境。</li>
</ul>
<h2>16. 不要添加没用的语境</h2>
]]></content:encoded>
			<wfw:commentRss>http://bookcold.com/2010/02/288/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->