Rss & SiteMap
搭建论坛 http://bbs.diylsoft.com:8118/starforum/index.asp
先进后出,实际应用的不多;很多递归操作 可能用到。
下载信息 [文件大小: 下载次数: ] | |
![]() |
尽管我已经使用星有2年了,其实还是似懂非懂,准确的说:我只会做软件,至于原理就有点不好意思,我知道代码肯定是从上至下,从头到位执行,嘿嘿,就这么多
例一:
参数> 自定义.数字:"1"
参数> 自定义.数字:"1"
参数> 运算.以上两项数值相:<加>
设置> 窗口1.普通按钮1.属性:(标题)
------
选择菜单中的“调试运行当前项目”
选择“单步”运行
在项目跟踪窗口中,可以看到,右边是你写的代码,左边是对应的值,左边那个值就是放在了“堆栈”里。这种效果你在“编译执行”的开发工具中是看不到的。
--------执行----------
1 //第一行代码值
1 //第二行代码值
2 //第三行代码值,即1+1的结果
堆栈清空 //这里因为赋值给了普通按钮的标题,所以清空了堆栈,如果不清空上面的值会传递给下要执行的方法。
或者说,在搭建中,在参数没有遇到“赋值”命令,或“带有参数的方法”命令时,是不会清空堆栈里的内容的。
同样是上面的代码:
参数> 自定义.数字:"1"
参数> 自定义.数字:"1"
参数> 自定义.数字:"1"
参数> 运算.以上两项数值相:<加>
设置> 窗口1.普通按钮1.属性:(标题)
-------------
我们再看,上面的代码就出错了,在堆栈中还会留有一个值,即:1
因为这个值没有参与运算,也没有相应的命令来接收,所以执行完上面的代码后在堆栈中还会留有“1”这个值。
例二:
参数> 自定义.数字:"1"
参数> 自定义.数字:"2"
参数> 自定义.数字:"3"
参数> 自定义.数字:"4"
参数> 自定义.数字:"5"
设置> 窗口1.行编辑1.属性:(当前编辑内容)
设置> 窗口1.行编辑2.属性:(当前编辑内容)
设置> 窗口1.行编辑3.属性:(当前编辑内容)
设置> 窗口1.行编辑4.属性:(当前编辑内容)
设置> 窗口1.行编辑5.属性:(当前编辑内容)
---------
看上面的代码,这里就体现了堆栈的“先进后出”原理
返回的结果为:
行编辑1.属性:(当前编辑内容) 被赋值为:5
行编辑2.属性:(当前编辑内容) 被赋值为:4
行编辑3.属性:(当前编辑内容) 被赋值为:3
行编辑4.属性:(当前编辑内容) 被赋值为:2
行编辑5.属性:(当前编辑内容) 被赋值为:1
-----------------------------------------
原代码还可以写成:
参数> 自定义.数字:"1"
设置> 窗口1.行编辑5.属性:(当前编辑内容)
参数> 自定义.数字:"2"
设置> 窗口1.行编辑4.属性:(当前编辑内容)
参数> 自定义.数字:"3"
设置> 窗口1.行编辑3.属性:(当前编辑内容)
参数> 自定义.数字:"4"
设置> 窗口1.行编辑2.属性:(当前编辑内容)
参数> 自定义.数字:"5"
设置> 窗口1.行编辑1.属性:(当前编辑内容)
==========================
在搭建里最容易出错的就是“连接以上字符串”这个命令
如果在写参数时,不小心或使用多个判断后,使用“连接以上字符串”这个命令,就容易出现错误。
因为“连接以上字符串”这个命令,是把堆栈中所有没有参与运算或被接收的值连接到一起。
=================
另外,你说的“我知道代码肯定是从上至下,从头到位执行,”这种方式只是在“解释执行”中才是这样的,“编译执行”不是这样的。
解释执行,不生成目标程序,每次执行一段代码都要重新解释。相当于翻译,你说一句我翻译一句,你又重复了同样的话,我就要再重复翻译一遍。
编译执行,编译时已经将源代码生成目标语言,之后通过连接程序连接到生成的目标程序进行执行。
所以,解释执行的效率会彽于编译执行。