《编写可读代码的艺术》---变量和可读性

对变量的草率使用,会导致程序的难以理解,原因是以下几点

  • 变量越多,就越难以全部跟踪他们的动向

  • 变量的作用域越大,就需要跟踪它的动向越久

  • 变量改变的越频繁,就越难以跟踪它的当前值。

下面来讨论如何改善这些问题。

1 减少变量

仅当我们需要的时候,才使用变量,下面将列举出一些没必要存在的变量的。

1.1 没有价值的临时变量

一般有经验的程序员是不会刻意写个没有价值的临时变量。造成临时变量没有使用价值的原因,可能是多次修修改改之后遗留的结果。

来个日期赋值的例子

            DateTime now = DateTime.Now;
File.SetLastWriteTime("c://1.txt",now);

名叫“now”的变量没有存在价值,因为

  • 它没有拆分任何复杂的表达式

  • 它传递的信息有限:表达式DateTime.Now已经解释的很清楚了

  • 生命之后,它只用了一次,没有压缩任何冗余的代码

去掉变量now,代码任然易于理解

  File.SetLastWriteTime("c://1.txt",DateTime.Now);

1.2减少中间结果


来个从数组中剔除元素的例子


       /// <summary>
/// 从数组中剔除指定的元素
/// </summary>
public static void kickItemFromArray<T>(List<T> array, T objToKick)
{
int numToKickIndex = -1;

for (int i = 0; i < array.Count; i++)
{
if (array[i].Equals( objToKick))
{
numToKickIndex = i;
break;
}
}

if (numToKickIndex>=0)
{
Console.WriteLine("kick:"+numToKickIndex);
array.RemoveAt(numToKickIndex);
}
}

变量numToKickIndex只是用来存储临时结果,我们可以通过立刻处理临时的结果,来减少中间变量的数量


        /// <summary>
/// 从数组中剔除指定的元素
/// </summary>
public static void kickItemFromArray<T>(List<T> array, T objToKick)
{
for (int i = 0; i < array.Count; i++)
{
if (array[i].Equals( objToKick))
{
//立刻剔除该元素,并返回
array.RemoveAt(i);
break;
}
}
}

1.3 减少控制流变量

在while、for等循坏语句中,我们通常使用自定义的bool变量,来控制流转


            bool isDone = false;

while (/*自定义条件*/&&isDone ==false)
{
if (/*满足isDone条件*/)
{
isDone = true;
continue;
}
}

像isDone这样的变量,成为“控制流程变量”,它没有包含任何程序的数据,唯一的目的是控制程序的流转。

在我们的经验中,“控制流程变量”可以通过优化程序的结构、逻辑来消除。


            while (/*自定义条件*/)
{
if (/*满足isDone条件*/)
{
break;
}
}

这个例子比较简单,如果嵌套层级、个数比较多等复杂情况,我们可以通过把循环中的代码、整个循环提取到一个新的函数中来改善情况。

2 缩小变量的作用域

我们都听过“避免全局变量”的建议。这是一条很好的建议,因为很难跟踪这些全局变量在哪里以及如何使用它们。

并且因为“命名空间污染”(全局变量与局部变量命名相同),代码可能意外地改变全局变量的值。

实际上,让所有变量都“缩小作用域”是一个好主意,并非只针对全局变量。

关键思想

让你的变量对尽量少的代码可见

很多语言里面提供了访问级别的控制,涵盖了模块、类、函数和语句块的作用域。

通常越严格的访问控制越好,因为这意味着该变量对更少的代码行“可见”。这样有效地减少了读者同时需要考虑的变量个数---如果你能把所有的变量作用域都减半,那么这意味着需要同时思考的变量个数,平均是原来的一半。

《编写可读代码的艺术》---变量和可读性,布布扣,bubuko.com

时间: 2024-10-26 15:28:10

《编写可读代码的艺术》---变量和可读性的相关文章

《编写可读代码的艺术》读书笔记

表面内容 1.代码的写法应当是别人理解他所需的时间最小化.一条注释可以让你更快理解代码.尽管减少代码行数是一个好目标,但是八里街代码所需的时间最小化是一个更好的目标. 2.选择专业的词,比如函数名使用getxxx(),这个get没有表达出很多信息,是从缓存中得到?从数据库中得到?或者从网络得到?如果是网络,可以用更专业的fetchxxx()或者downloadxxx() 3.tmp,retval这样泛泛的名字,可以根据情况命名,比如tmpFile,让人知道变量是一个临时的文件.(tmp这个名字只

《编写可读代码的艺术》——简单总结

上个月好像冥冥中自有安排一样,我在图书馆看到这本 <编写可读代码的艺术> ( The Art of Readable Code) 期间因为工作的原因,停停看看,这几天终于看完了,可以大概总结如下: 1. 把信息装进名字里,给变量起个好名字 2. 审美,把代码分成段落,对齐 3. 应当取个好名字,而不是用注释去粉饰它 4. 用注释记录你的思想,比如当时为什么要这样写,记录开发过程中有哪些思考 5. 将自己代码中的不足和瑕疵记录下来,方便今后别人的维护,不要顾忌别人的看法! 6. 注释应该言简意赅

编写可读代码的艺术笔记

编写可读代码的艺术 表面层次上的改进 命名.注释以及审美--可以用于代码库每一行的小提示. 简化循环和逻辑 在程序中定义循环.逻辑和变量,从而使得代码更容易理解. 重新组织你的代码 在更高层次上组织大的代码块以及在功能层次上解决问题的方法. 精选话题 把"易于理解"的思想应用于测试以及大数据结构代码的例子. 第1章:代码应当易于理解 1.代码应当易于理解. 2.代码的写法应当使别人理解它所需的时间最小化. 第一部分:表面层次的改进 第2章:把信息装到名字里 1.使用专业的单词. 2.避

《编写可读代码的艺术》读后总结

代码应当易于理解 代码的写法应当使他人理解它所需的时间最小化 把信息装进名字中 清晰和精确比装可爱好 使用专业的词 使用具体的名字来更细致地描述事物 给变量名带上重要的细节 为作用域大的名字采用更长的名字 有目的地使用大小写,下划线等 要多问自己几遍:"这个名字会被别人解读成其他的含义吗?" 要仔细审视这个名字,不会被误解的名字是最好的名字 命名极限最清楚的方式是在要限制的东西前加上max_或者min_ 为布尔值命名时,避免使用反义的词(例如disable_ssl) 要小心用户对特定词

《编写可读代码的艺术》—— 读后总结

本书与代码整洁之道类似,强调的不是编程的技巧,而是代码编写的注意点. 有的开发者可能觉得自己的代码自己懂就比较好,不在乎变量和函数的命名以及缩进等等,但是这里的别人也可能是几个月后的自己! 因此,代码的可读性对于别人和自己都很重要. 本文内容 本书短小精悍,相比于<代码整洁之道>要薄的多,但是要注意的地方,基本也都讲明白了: 本书的主要内容如下: 有时候并不是代码越少,就越容易理解,也许多写几行代码比如三目运算符?和if/else,他们可以写出相同的逻辑,但是如果表达式很长,三目运算符显然更不

《编写可读代码的艺术》

本书干货很多,许多确实可行的建议,是都是写好代码的必经之路,下面为我总结的导图和部分章节的概述. 很好的一本书,推荐给大家. 总结思维导图 第二章 本章唯一的主题是:把信息塞入名字中.这句话的含义是,读者仅通过读到名字就可以获得大量信息. 使用专业的单词————例如,不用Get,而用Fetch或者Download可能会更好,这由上下文决定. 避免空泛的名字,像tmp和retval,除非使用它们有特殊的理由. 使用具体的名字来更细致地描述食物————server can start()这个名字就比

编写可读代码艺术之表面层析

前言 4年前,我拒绝自己承认程序员,那时在8位MCU上用C语言处理ROM芯片时序问题. 1年前,我不承认自己是一个程序员,那时我在处理工业相机返回的三维数据. 现在,我不得不承认乐于去成为自己是一个程序员.工程师,程序员几乎无所不能,虽然很苦逼.程序员就要干程序员事,这篇就算小铺开张吧,写的不好,多多原谅. 如果说自己的编程历史,07年我在用C语言,09年我在用Verilog,11年我开始用C++.不管什么时候.什么语言,我对自己的基本要求是: 代码要有注释,代码架构要清晰. 但是在我看完<th

编写可读性代码的艺术

在做IT的公司里,尤其是软件开发部门,一般不会要求工程师衣着正式.在我工作过的一些环境相对宽松的公司里,很多程序员的衣着连得体都算不上(搞笑的T恤.短裤.拖鞋或者干脆不穿鞋).我想,我本人也在这个行列里面.虽然我现在改行做软件开发方面的咨询工作,但还是改不了这副德性.衣着体面的其中一个积极方面是它体现了对周围人的尊重,以及对所从事工作的尊重.比如,那些研究市场的人要表现出对客户的尊重.而大多数程序员基本上每天主要的工作就是和其他程序员打交道.那么这说明程序员之间就不用互相尊重吗?而且也不用尊重自

读《软件驱魔》调试和优化遗留代码的艺术

读<软件驱魔> 调试和优化遗留代码的艺术 软件维护方法论的书,其间还有作者的感悟,读起来情深意切啊 此书中文版,第一版是2014年5月 内容给人感觉作者早已成书多年了.但软件知识还是有不过时的东西. 软件发展到现在,在我们身边,已经可以发生着许多书中的故事. 如大量的历史代码无人维护或者是开发人员不可寻且没有文档,没有流程图等等. 在这种情况下,作者指点读者去如何做更有益. 用了许多方法,并科学的介绍了不只一种方法. 收益良多. 还介绍了可能会出现的人员交流的问题.这种问题我在工作中也是常遇到