博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《编写可读代码的艺术》---变量和可读性
阅读量:5134 次
发布时间:2019-06-13

本文共 2467 字,大约阅读时间需要 8 分钟。

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

  • 变量越多,就越难以全部跟踪他们的动向
  • 变量的作用域越大,就需要跟踪它的动向越久
  • 变量改变的越频繁,就越难以跟踪它的当前值。

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

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减少中间结果

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

///         /// 从数组中剔除指定的元素        ///         public static void kickItemFromArray
(List
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只是用来存储临时结果,我们可以通过立刻处理临时的结果,来减少中间变量的数量

///         /// 从数组中剔除指定的元素        ///         public static void kickItemFromArray
(List
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 缩小变量的作用域

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

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

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

关键思想

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

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

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

 

 

 

 

转载于:https://www.cnblogs.com/kimmy/p/3699116.html

你可能感兴趣的文章
Date Picker控件:
查看>>
你的第一个Django程序
查看>>
grafana授权公司内部邮箱登录 ldap配置
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
javascript 浏览器类型检测
查看>>
nginx 不带www到www域名的重定向
查看>>
记录:Android中StackOverflow的问题
查看>>
导航,头部,CSS基础
查看>>
[草稿]挂载新硬盘
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
关于mysql中GROUP_CONCAT函数的使用
查看>>
OD使用教程20 - 调试篇20
查看>>
Java虚拟机(JVM)默认字符集详解
查看>>
Java Servlet 过滤器与 springmvc 拦截器的区别?
查看>>
(tmp >> 8) & 0xff;
查看>>
linux命令之ifconfig详细解释
查看>>
NAT地址转换
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>