第十章 使用变量的一般事项

本章中用“变量”一词同时指代对象和内置数据类型,如整数和数组等。“数据类型”一词通常指内置数据类型,而“数据”一词则可能代表对象,也可能代表内置数据类型。

数据认知

创建有效数据的第一步是了解所要创建的数据种类。积累大量的数据类型对于程序员来说至关重要。

有关数据类型的更多资源

Cormen《Introduction to Algorithm》

Sedge wick《Algorithm in C++》

轻松掌握变量定义

隐式声明

  • 关闭隐式声明
  • 声明全部变量
  • 遵循某种命名规则
  • 检查变量名

变量初始化原则

避免产生初始化错误的建议:

  • 在声明变量的时候初始化;
  • 在靠近变量第一次使用的位置初始化;
  • 理想情况下,在靠近第一次使用变量的位置声明和定义该变量;
  • 在可能的情况下使用final或者const;
  • 特别注意计数器和累加器;
  • 在类的构造函数里初始化该类的数据成员;
  • 检查是否需要重新初始化;
  • 一次性初始化具名变量,用可执行代码来初始化变量;
  • 使用编译器设置来自动初始化所有变量;
  • 利用编译器的警告信息;
  • 检查输入参数的合法性;
  • 使用内存访问检查工具来检查错误的指针;
  • 程序开始时初始化工作内存。

作用域

作用域或者可见性指的是变量在程序内的可见和可引用范围。下面是一些使用作用域的规则:

  • 使变量引用局部化;
  • 尽可能缩短变量的“存活”时间;
  • 减小作用域的一般原则;
    • 在循环开始之前再去初始化该循环里使用的变量,而不是在该循环所属的子程序的开始处初始化这些变量;
    • 直到变量即将被使用时再为其赋值;
    • 把相关语句放到一起;
    • 把相关语句提取成单独的子程序;
    • 开始时采用最严格的可见性,然后根据需要扩展变量的作用域。
  • 有关缩小变量作用域的说明;
    • 程序员采用哪种缩小变量域的方法,取决于他如何看待“方便性“和”智力上的可管理性“。

持续性

持续性是对一项数据的声明周期的另一种描述,持续性具有多种形态:

  • 特定代码段或子程序的声明周期。
  • 只要你允许,它就会持续下去。
  • 程序的生命周期。
  • 永远持续。

绑定时间

绑定时间是把变量和它的值绑定在一起的时间。是发生在编写代码的时候还是编译程序的时候?是在程序加载的时候还是在运行的时候?抑或是其他时间?

  • 编码时(使用神秘数值)
  • 编译时(使用具名常量)
  • 加载时
  • 对象实例化时
  • 即时

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

数据类型和控制结构之间以一种定义明确的方式相结合。Jackson描述出了三种类型的数据和相应的控制结构之间的关系:

  • 顺序型数据翻译为程序中的顺序结构;
  • 选择型数据翻译为程序中的if和else语句;
  • 迭代型数据翻译成程序中的for、repeat、while等循环结构。

为变量指定单一用途

通过使用一些巧妙的方法,可以给一个变量赋予多种职责。不过你最好还是远离这些奇技淫巧。

  • 每个变量只用于单一用途;
  • 避免让代码具有隐含含义;
  • 确保使用了所有以声明的变量。

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

初始化变量

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

使用数据的其它事项

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

要点

  • 数据初始化过程很容易出错,所以请用本章描述的初始化方法来避免由于非预期的初始值造成的错误;
  • 最小化每个变量的作用域。把同一变量的引用点集中在一起。把变量限定在子程序或类的范围内。避免使用全局数据;
  • 把使用相同变量的语句尽可能集中在一起;
  • 早期绑定会减低灵活性,但有助于减小复杂度。晚期绑定可以增加灵活性,同时增加复杂度;
  • 吧每个变量用于唯一的用途。

原文地址:https://www.cnblogs.com/liam-ji/p/11516600.html

时间: 2024-11-05 14:42:14

第十章 使用变量的一般事项的相关文章

操作系统思考 第十章 条件变量

第十章 条件变量 作者:Allen B. Downey 原文:Chapter 10 Condition variables 译者:飞龙 协议:CC BY-NC-SA 4.0 像上一章所展示的那样,许多简单的同步问题都可以用互斥体解决.这一章中我会介绍一个更大的挑战,著名的"生产者-消费者"问题,以及一个用于解决它的新工具,条件变量. 10.1 工作队列 在一些多线程的程序中,线程被组织用于执行不同的任务.通常它们使用队列来相互通信,其中一些线程叫做"生产者",向队列

【转】JMeter循环控制器循环次数使用变量控制注意事项

[转自]JMeter循环控制器循环次数使用变量控制注意事项 1.进入循环控制器之前变量要有值: 2.BeanShell处理文件,读取行数,赋值给变量,要有相应的Sampler,不然脚本不会运行. 其中的sampler可以用BeanShell Sampler

cocos2d-x.环境变量和修改事项

呃. 先写一下cocos2d-x.的一些配置吧. 下载啥的...... 环境变量 Path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%NDK_ROOT%; %ADB_PATH%;%CYGWIN_BIN%;%ECLIPSE_PATH% ADB_PATH=D:\GreenProgram\adt-bundle-windows-x86\sdk\platform-tools NDK_ROOT=D:\GreenProgram\adt-bundle-windows-x86\an

13 Java语言基础使用变量的注意事项

作用域问题 同一区域不能使用相同的变量名 初始化值问题 局部变量在使用之前必须赋值 一条语句可以定义几个变量 1 class Demo1_DataType { 2 public static void main{ 3 int x =10; 4 int x = 20; //同一区域不能有相同的变量名,不会覆盖,会报错 5 6 System.out.println(x); 7 8 int a,b,c,d,e; 9 a = 10; 10 b = 20; // 可以声明不赋值,但是赋值前一定要先声明 1

变量的定义及注意事项

变量概述 变量:常量是固定不变的数据,那么在程序中可以变化的量称为变量.程序中,可以使用字母保存数字的方式进行运算,提高计算能力,可以解决更多的问题.比如x保存5,x也可以保存6,这样x保存的数据是可以改变的,也就是我们所讲解的变量.Java中要求一个变量每次只能保存一个数据,必须要明确保存的数据类型. 变量的定义 变量定义包括三个要素: 数据类型 . 变量名 . 数据值 . 格式:数据类型 变量名 = 数据值; 需求: 定义所有基本数据类型的变量,并打印输出 /* 变量:程序运行期间,内容可以

python新手之2变量

变量 变量是将储存的值保存在内存中.当声明一个变量的时候会在内存中开辟一个储存内容的位置. 基于变量的数据类型,解释器分配内存空间并决定储存的内容.因此我们可以通过变量分配不同的数据类型,可以在变量中储存数据类型为整数,小数,字符等 在python中,变量是不需要明确声明变量类型和长度来保留内存空间.当变量分配值的时候,python会自动发出声明,等号(=)用于变量赋值,python变量也不需要像PHP那样前面加特殊符号 变量使用注意事项: 0.使用变量前必须对其先赋值 1.变量名只能使用英文字

Linux中如何设置java环境变量

这里介绍Linux下如何设置java环境变量. 工具/原料 Linux java环境变量 方法/步骤 1 查看java的安装路径   查看java执行路径   配置java环境变量   java的安装路径和执行路径   注意这里的JAVA_HOME后面一定要带上bin路径,路径设置完成一定要用 export输出,注意export单词不要写错了   设置环境变量后使用java的v参数测试,还是失败,因为没有执行source命令   环境变量修改后执行source命令,使得配置生效   运行sour

那些年我们一起追过的的"引用变量"--总结1

hello ,好久没来了. 今天我来总结一下有关引用变量的注意事项,一是加深一下自己的理解,二是对这块不太理解的同学可以看看. 大神可飘过,有什么不对或不足的地方请多多指教,谢谢. 假设场景: 有一个统计游戏玩家信息调查问卷系统,玩家填写了调查问卷,会给玩家一些奖励,当然目前这不是我们关注的部分. 我们需要记录一下玩家的姓名,年龄,邮箱,以及玩家曾经玩过的游戏有哪些. 既然要记录玩家玩过的游戏,必然要有Game类: package indi.bruce.summary; public class

JS中的变量和输入输出

一.使用JS的三种方式 1.在HTML标签中,直接内嵌JS(并不提倡使用) <button onclick="alert('点你咋地')">点我</button> >>> 不符合w3c关于内容与行为分离的要求 2.在HTML页面中使用<script></script>包裹JS代码 <script type="text/javascript"> //JS代码 </script>