将变量置入循环
常见的一种特殊情况就是在循环外部声明变量。例如,考虑清单 1 中简单的 for 循环,其作用是计算斐波那契数列的前 20 项:
清单 1. C 程序员喜欢在循环外部声明变量
int high = 1;
int low = 1;
int tmp;
int i;
for (i = 1; i < 20; i++) {
System.out.println(high);
tmp = high;
high = high+ low;
low = tmp;
}
所有这四个变量都是在循环外声明的,尽管它们仅在循环内部使用,但作用域不止于此。这容易导致 bug,变量可能会在其目标作用域之外被重用。对于使用常用名的变量来说更是这样,例如 i 和 tmp。某次使用的值可能会残留下来,并以无法预计的方式干扰后续的代码。
第一项改进(C 语言的现代版本也支持这项改进)是将 i 循环变量的声明移到循环之内,如清单 2 所示:
清单 2. 将循环变量移入循环
int high = 1;
int low = 1;
int tmp;
for (int i = 1; i < 20; i++) {
System.out.println(high);
tmp = high;
high = high+ low;
low = tmp;
}
到这里还没有结束,经验丰富的 Java 程序员还会将 tmp 变量移入循环,如清单 3 所示:
清单 3. 在循环内声明临时变量
int high = 1;
int low = 1;
for (int i = 1; i < 20; i++) {
System.out.println(high);
int tmp = high;
high = high+ low;
low = tmp;
}
某些极度追求速度而又不够老练的开发人员有时会提出反对意见,认为这种做法导致循环内执行过多操作,而不只是必要的操作,从而降低代码运行速度。实际上,在运行时,声明根本不会执行。将声明移动到循环内绝不会给 Java 平台造成负面的性能影响。
许多程序员,包括许多经验丰富的 Java 程序员都可能在这里止步。然而,还有一种不太常见的技巧,将所有变量都移入循环。您可以在 for 循环的初始化阶段声明多个变量,只需使用逗号分隔即可,如清单 4 所示:
清单 4. 在循环内声明所有变量
for (int i = 1, high = 1, low = 1; i < 20; i++) {
System.out.println(high);
int tmp = high;
high = high + low;
low = tmp;
}
这已经不仅仅是惯用的流畅代码,而是真正的专业代码。与 C 代码相比,Java 代码中的 for循环更多、while循环更少,原因就在于这种严格限制本地变量作用域的能力。
分享到:
相关推荐
"易语言置入代码内联汇编源码"指的是在易语言的程序设计过程中,通过内联汇编的方式将汇编语言的指令融入到易语言的源代码中,以实现特定的功能或优化性能。 内联汇编(Inline Assembly)是高级语言与汇编语言相...
这些模板可以包含变量、条件语句和循环结构,以适应不同场景下的代码生成。 2. 数据库映射:软件能自动将数据库模式转换为对象模型,生成与数据库表对应的实体类、数据访问层(DAO)和业务逻辑层(Service)代码,...
在汇编语言中,这涉及到一系列的算术和逻辑运算,如位移、与、或、异或等,以及可能的循环控制。在易语言中,可能需要先用易语言的内置函数将字符串转换为整数,然后可能再通过汇编优化这一过程。 在"易语言置入...
学习易语言,首先要掌握它的基本语法,如变量定义、条件判断(如If...Then...Else)、循环结构(如For、While)以及函数调用等。 2. **模块系统**:易语言支持模块化编程,模块可以看作是包含一组相关功能的代码...
获取系统进程信息源码例程程序使用置入汇编代码的方法实现程序代码的Goto跳转。点评:易语言Goto跳转模块源码是易语言汇编应用例程。注意:跳转最好只在同一个子程序内进行,跳到其他子程序会发生局部变量混乱 子...
1. 将内存数据段(DATA)中偏移地址为n1开始的连续32个字节单元置入数据00H至1FH。 2. 将这些数据传送到偏移地址为n2开始的连续的内存单元中。 #### 实现方法 程序通过以下步骤实现了上述任务: 1. **初始化**:定义...
源码通常包括函数定义、变量声明、控制结构(如循环、条件判断)以及数据处理等部分。 汇编语言是介于机器语言和高级语言之间的一种编程语言,每条汇编指令对应一个或多个机器码。在易语言中,有时为了优化性能或者...
首先,将R1设为20H(即十六进制的32),R0设为90H,然后通过DJNZ指令进行循环,每次循环将A中的#55H移动到R0指向的内存位置并递增R0,直到R1递减到0。接着,用同样的方式将R2设为10H,A设为#00H,清零90H到9FH的内存...
此外,迭代集合对象时,还包含两个特殊的循环变量: item_index:当前变量的索引值 item_has_next:是否存在下一个对象 也可以使用指令跳出迭代 例子如下: ["星期一", "星期二", "星期三", "星期四", "星期五", ...
可以使用循环法来进行旧表项的删除,并使用全局变量来实现循环法。 8. ARP左时机制 ARP左时机制是为了解决ARP请求的时机问题。定时机制的优缺点是可以减少ARP请求的数量,但缺点是会增加缓存的大小。 9. 电子欺骗...
获取系统进程信息源码例程程序使用置入汇编代码的方法实现程序代码的Goto跳转。点评:易语言Goto跳转模块源码是易语言汇编应用例程。注意:跳转最好只在同一个子程序内进行,跳到其他子程序会发生局部变量混乱 子...
通过阅读和分析源码,我们可以进一步了解易语言的语法特性,如变量声明、循环结构(如`重复`和`结束重复`)、算术运算符(如`除`和`取余`)以及字符串处理函数等。 此外,这个“进阶教程源码”标签表明这可能是一个...
在“易语言汇编快速生成10万行文本源码”这个主题中,我们将探讨如何利用易语言来高效地生成大量文本源代码。 首先,我们需要理解汇编语言与易语言的关系。汇编语言是低级编程语言,它直接对应于计算机的机器指令,...
将某物置入已存在事物的中间或内部。 66. related [riˈleitid] a. 相关的。与特定主题或概念有联系的。 67. item [ˈaitəm] n. 项,项目,条款。单独考虑的物件、文章或规定。 68. edit [ˈedit] vt. 编辑,...
除此之外,本节还要探讨如何获取一个对象、对其进行“流式”加工(使其能置入磁盘或通过网络传送)以及重新构建它等等。这些操作在Java的1.1版中都可以自动完成。另外,我们也要讨论Java 1.1的压缩库,它将用在Java...
对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 7、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的...
“库文件名”以.lib或.obj为后缀的将被视为静态库,可使用绝对路径或相对路径(相对当前源代码所在目录),如依赖多个静态库请分别列出并以逗号分隔;“在库中的对应命令名”请务必准确填写静态库中公开导出的符号...
5、改善“汇编类->置入汇编代码”增添一个参数是否保留以前代码。感谢易友【@无名侠】反馈。 6、修正“文本_加密”返回文本传递给“文本_解密”后长度不正确BUG,改为返回字节集。 7、改善“外部编辑框_取密码框文本...