《代码大全2》第10章 使用变量的一般事项

目录

前言

10.1 数据认知

10.2 轻松掌握变量定义

10.2.1 隐式声明

10.3 变量初始化原则

10.4 作用域

10.5 持续性

10.6 绑定时间

10.7 数据类型和控制结构之间的关系

10.8 为变量指定单一用途

核对表:使用数据的一般事项

初始化变量

使用数据的其他事项


《Code_Complete_2》持续更新中......_@来杯咖啡的博客-CSDN博客这本书有意设计成使你既可以从头到尾阅读,也可以按主题阅读。1. 如果你想从头到尾阅读,那么你可以直接从第2章“用隐喻来更充分地理解软件开发”开始钻研。2. 如果你想学习特定的编程技巧,那么你可以从第6章“可以工作的类”开始,然后根据交叉引用的提示去寻找你感兴趣的主题。3. 如果你不确定哪种阅读方式更适合你,那么你可以从第3章3.2节“辦明你所从事的软件的类型”开始。.....................https://blog.csdn.net/qq_43783527/article/details/126275083

前言

        我在本章中用“变量”一词同时指代对象内置数据类型 (built-in data type),如整数和数组等。

  1. “数据类型”一词通常是指内置数据类型
  2. 而“数据”一词则可能代表对象,也可能代表内置数据类型

10.1 数据认知

10.2 轻松掌握变量定义

        本节将会向你讲述如何加快变量定义的工作。创建变量的确占去了你很多时间因此养成一个良好的习惯会为你在整个项目周期内省去很多时间和麻烦

10.2.1 隐式声明

        有些语言支持隐式变量声明。例如,当你在 Microsoft Visual Basic中使用一未声明变量的时候,编译器会自动为你声明该变量(取决于你的编译器设置)。隐式变量声明对于任何一种语言来说都是最具危险性的特性之一,因为编译器自动声明变量经常会让程序员赋值出现错误

        那么,如果你使用的编程语言支持隐式声明该怎么办呢?下面给出一些建议。
        关闭隐式声名。有些编译器允许你把隐式声明功能关闭。比如你在 VisualBasic 里可以用 option Explicit 语句来强迫程序员在使用变量之前先做出声明。
        声明全部的变量。 在你引入一个新变量的时候对它做出声明,哪怕编译器不要求你一定要这样做。这样做虽然不会捕提所有的错误,但至少能发现其中的一部分。
        遵循某种命名规则。 对像 Num 和 No 这样的常见变量名后缀建立一套命名规则,从而确保在需要一个变量时不会写成两个。
        检查变量名。 使用编译器或第三方工具生成的交叉引用列表 (cross-reference,list)。很多编译器会把一个子程序内的全部变量都列:力你发现acct Num 和 acctNo。它们同时还会列出那些声明了但是还没有使用的变量。

10.3 变量初始化原则

        下面给出一些避免产生初始化错误的建议:

        1、在声明变量的时候初始化。

        2、在靠近变量第一次使用的位置初始化它。 包括 Visual Basic 在内的一些语言不支持在声明变量的同时进行初始化。这就会导致出现下面这种编码风格,即多个变量的声明语句集中放在一个地方,它们的初始化语句集中放在另一个地方——这些语句离真正使用变量的语句都还很远

更好的做法是在尽可能靠近第一次使用变量的位置初始化该变量: 

        第二个示例在多个方面优于第一个。

  • 在第一个示例中,当使用 done 变量的代码开始执行的时候,done 很可能已经被修改了。即便你在第一次写这个程序的时候不会这样,后续的修改也可能会导致出现这样的错误。
  • 这种方法的另一个问题是,一旦把所有的初始化代码都放在一起,也可能会让人产生误解,认为所有这些变量都会在子程序中一直使用——而事实上 done 只是在后面才被用到。最后,随着对程序的不断修改(可能会这样,即使只是为了调试),一些循环可能会包含使用了 done 的代码,因此 done 就需要重新初始化。对于这种情况,第二个示例需要做的改动就会少很多。第一个示例中的代码更容易产生恼人的初始化错误。

        这是就近原则(Principle of Proximity) 的一个例子,即把相关的操作放在一起。这一原则也适用于让注释靠近它所描述的代码,让控制循环的代码靠近循环本身,以及把语句写成直线的代码等各个领域。

        3、理想情况下,在靠近第一次使用变量的位置声明和定义该变量。 声明指定了变量的类型,定义为变量指定特定的取值。在允许这样做的语言,如 C++和 Java中,变量应该在靠近第一次使用的位置进行声明和定义。在理想情况下,每个变量都应该在声明的同时被定义,如下所示:

10.4 作用域

略。

10.5 持续性

略。

10.6 绑定时间

略。

10.7 数据类型和控制结构之间的关系

略。

10.8 为变量指定单一用途

略。

核对表:使用数据的一般事项

初始化变量

  • 每一个子程序都检查其输入参数的正确性吗?
  • 变量声明位置靠近变量第一次使用的位置吗?
  • 尽可能地在声明变量的同时初始化变量吗?
  • 如果无法同时声明和初始化变量,有没有在靠近第一次使用变量的位置声明变量
  • 计数器和累加器经过了适当的初始化吗?如果需要再一次使用,之前重新初始化了吗?
  • 适当地重新初始化“需要重复执行的代码里的变量”了吗?
  • 代码在通过编译器编译的时候是不是没有警告信息?(你启用了所有可用的警告选项了吗?)
  • 如果你用的语言允许隐式声明,你为由此可能引发的问题做好补偿措施了吗?

使用数据的其他事项

  • 如果可能,所有变量都被定义为具有最小的作用域吗?
  • 各变量的引用点都尽可能集中在一起吗?对同一变量的两次相邻引用,或者变量的整个生命期都这样做了吗?
  • 控制结构符合数据类型吗?
  • 所有声明的变量都用到了吗?
  • 变量都在合适的时间绑定了吗?——也就是说,你有意识地在晚期绑定所带来的灵活性和增加的复杂度之间做出平衡了吗?
  • 每个变量都有且仅有一项用途吗?
  • 每个变量的含义都很明确且没有隐含含义吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@来杯咖啡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值