aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 536743|回复: 199

aardio 入门

 火... [复制链接]

42

主题

628

回帖

3765

积分

版主

积分
3765
发表于 2012-11-19 11:24:50 | 显示全部楼层 |阅读模式
一、 准备 aardio 编程开发环境

请打开下面的链接下载 aardio 最新版本:
www.aardio.com

下载 aardio 并保存到硬盘。
注意:aardio、或 aardio 工程放到移动设备(U盘等)或网盘目录下有可能导致功能受限、发布 EXE 失败等问题 )

aardio1.png

aardio是绿色软件,不需要安装、解压缩后即可直接使用。
右键点击下载的压缩包( aardio.7z文件 ),在弹出的右键菜单中使用解压缩软件解压,例如使用7zip解压如下图( 鼠标点击图片可放大 ):

aardio2.png
点上图的【OK】或【确定】按键解压缩到你指定的目录( 例如上图中的 D:\开发工具\aardio )

如果你无法打开压缩包,
那可能是你电脑上还没有安装压缩工具,
请先点击下面的链接到 7-zip官方网站下载安装 7-zip:
http://sparanoid.com/lab/7z/

aardio3.png

解压后的目录如上图, 找到 aardio.exe,这个就是 aardio 开发环境的启动程序了,
鼠标左键双击 aardio.exe 就可以启动 aardio( aardio编程开发环境 )

启动以后可点击 aardio 开始页的【创建桌面快捷方式】键接,如图:
aardio5.png

评分

参与人数 36 +385 收起 理由
zyof + 3 很给力!
muniubuy + 1 很给力!
wghr + 1 很给力!
程序人生 + 5 淡定
murphy3847 + 1 很好很强大,很适合“杂家”使用。
svip + 1 很给力!
wsd3000 + 5
lightsmile + 1 很给力!
gdgzwqz + 5 赞一个!
0ximi + 1 神马都是浮云
xiao3883415 + 5 很给力!
zhijia + 5 很给力!
bye2016 + 1
menglovelili + 1 赞一个!
锦瑟无端 + 1 很给力!
mxk123 + 1 很给力!我想知道从前这个论坛发的帖子还能.
hatesky + 11
2535163639 + 5 赞一个!
zlyl3520 + 1 赞一个!
TYZRPVX + 1 很给力!

查看全部评分

42

主题

628

回帖

3765

积分

版主

积分
3765
 楼主| 发表于 2012-11-19 11:25:30 | 显示全部楼层
第一次启动aardio,会弹出创建工程的向导,
你也可以点击“aardio主菜单 -> 新建工程 -> 对话框应用程序” 打开创建工程的对话框。
如下图(  鼠标点击图片可放大 ):

1.png

显示的工程向导如下图(  鼠标点击图片可放大 ):

2.png
在上图的对话框界面中直接点击创建工程按钮 - 创建一个工程。

在左侧找到【工程管理器】,点击【工程根目录】,
然后点击工程管理器顶部左侧第一个按钮【显示工程属性 】
可在【属性面板】修改工程属性。如下图(  鼠标点击图片可放大  ):
6.png

修改属性项以后,鼠标单击其他属性以完成输入。
我们试试把工程名字改为“我的工程”,可以看到【工程管理器】顶部的【保存】按钮变成可用状态。
点击【保存】按钮保存新的工程设置。如下图(  鼠标点击图片可放大  ):
7.png

在工程中可以看到 main.aardio 源码文件,
*.aardio 是aardio源码文件的专用格式,这实际上是一个纯文本的文件( 可以使用普通记事本打开编辑 )

而 main.aardio 是应用程序的入口文件,
应用程序启动总是会首先运行 main.aardio 里编写的代码。

在【工程管理器】中双击 main.aardio ,
在aardio编辑器中打开该文件,因为 main.aardio 里包含的是创建对话框的源码,
所以编辑器默认显示的是【对话框设计器】,可以点击【代码视图】切换到【代码编辑器】,
如下图( 鼠标点击图片可放大 ):
9.png


在左侧【工具箱】点选按钮控件,
然后在对话框上按下鼠标拖动,画出第一个按钮控件,
如下图( 鼠标点击图片可放大 ):
10.png

点击按钮控件,在右侧【属性面板】修改控件属性,
如下图( 鼠标点击图片可放大 ):
11.png

在【对话框设计器】上双击【按钮控件】,
自动切换到【代码编辑器】,输入代码 mainForm.msgbox("hello world")
如下图( 鼠标点击图片可放大 ),可以看到编辑器会自动提示可选的完成代码:
12.png


mainForm 是【窗体对象】,
一个【对象】有他的【成员属性】,也有他的成员方法 - 我们叫他【成员函数】。
mainForm.msgbox 就是一个【成员函数】,用来显示一个【信息对话框】。
圆点称为【成员操作符】,不介意的话你可以把圆点读为“的”。例如:“mainForm的msgbox”

在函数后面放一对圆括号,也就是写成 mainForm.msgbox() 就表示执行该函数。
在圆括号中可以添加【参数】,mainForm.msgbox("hello world") 就是将【字符串参数】 "hello world" 传给 mainForm.msgbox 函数,然后mainForm.msgbox就会在【对话框】上显示接收到的【参数】,也就是 "hello world"。

我们在aardio上点击【运行】按钮,运行当前打开的aardio文件,
运行效果如下图( 鼠标点击图片可放大 ):
13.png

我们的第一个程序已经制作出来了,
不要问我什么是函数,什么是字符串,老实说我的表达能力不太好,又没看过什么书,
就好像一个两岁的孩子问我【硬度】是什么,我虽然知道很简单,但是无奈干着急讲不清楚,我觉得最好的办法,就是这孩子不小心从柔软的床上掉到坚硬的地面,这下子不用你说他也知道什么叫硬度了,所以不要每天纸上谈兵,也不要去看太多理论,动手试一试吧,摔几次你就很快明白了,空谈理论是学编程的大忌

如果你实在搞不清楚一些编程知识,或者你对掌握的编程知识存在或多或少的疑问,那就去制造更多的错误让自已摔更多的跟头,你就会真真切切的通过自己的努力掌握这些知识,你每天制造的编程错误越多,你的编程技术提升的就越快,别人给你的理论终究是来的容易去的快。

下面我们将我们的第一个程序生成为可独立运行的EXE文件,
aardio生成的EXE文件不需要外部运行库,而且可以将工程中添加的所有目录方便的嵌入EXE文件,分发给你的朋友或用户都非常方便。

友情提醒一下:发布以前请关闭那些比较严格的杀毒软件、安全软件,尤其是基于云查杀的软件,
现在的安全杀毒软件都非常敏感,要知道一部正常的电脑是不会频繁生成他没见过的全新的EXE文件,而且也不会频繁的修改这些EXE文件,软件开发工具完全正常的操作对于普通电脑可能就是不正常的,所以有可能他会干扰你的发布操作,导致生成的EXE启动运行出错,当然这些问题并不总是会出现,如果你不关也没问题,那也可以不关,当你遇到发布不正常时,那么记住我前面说的,关掉他们试试。

最后点击发布,如下图( 鼠标点击图片可放大 ):
14.png

发布完成后,弹出下图的对话框:
3.png

点击“打开发布目录”,可以看到生成的EXE文件,如下图:
16.png
恭喜,你的第一个aardio程序已经制作出来了。

如果你安装了基于云查杀的安全杀毒类软件,有可能会对一个新的未知的EXE文件产生误报,
别着急,解除误报很简单,请参考下面的帖子:
安全软件,杀毒软件厂商误报分析提交地址
http://bbs.aardio.com/thread-8299-1-1.html

评分

参与人数 5 +14 收起 理由
svip + 1 很给力!
PudgeRoyal + 5
auyxj + 5 赞一个!
aoqi521 + 1 赞一个!
dzxhlq + 2 赞一个!

查看全部评分

42

主题

628

回帖

3765

积分

版主

积分
3765
 楼主| 发表于 2012-11-19 11:26:09 | 显示全部楼层
在【工程管理器】中点击【工程名字】,
然后点击鼠标右键,在【右键菜单】中点击【浏览工程目录】,如下图:

17.png

在【资源管理器】中打开了工程文件在【硬盘】上的目录,
如下图( 鼠标点击图片可放大 ):

18.png
default.aproj 是aardio工程文件 - 存储了工程的所有配置属性、工程包含的目录文件等,
实际上这是一个文本文件,使用记事本可以打开编辑(不过建议新手还是不要手动编辑此文件)。
也可以直接双击 default.aproj 启动aardio并打开工程文件

工程里包含的目录称为虚拟目录,虚拟目录不等于硬盘目录,
例如在硬盘上的"/res/"目录,在工程里显示的名字是“资源目录”,虚拟目录的名字与实际目录的名字可以不一样
而且虚拟目录的路径与实际目录的路径也可以不一样。

只有添加到工程里的文件或目录,才会被真正包含到应用程序中。
了解aardio工程文件,必须首先弄清楚虚拟目录与硬盘目录的区别。

如果一个虚拟目录绑定到一个硬盘目录,
硬盘目录下的文件与虚拟目录下的文件列表可以是不一样的
如果你希望他们完全一样,可以右键点击工程目录,在弹出菜单中选择【同步本地目录】,

如下图:
20.png

在工程管理器中点击工程目录,在右侧【属性面板】可以设置发布的方式是否【内嵌资源】,
如果设置为true,那么目录下的文件在发生时会被嵌入到EXE文件内部,如下图:
19.png

无论工程里的目录是否设置为【内嵌资源】,通常程序代码不需要任何修改,
aardio标准库里读取文件的函数一般都会自动支持【内嵌资源文件】

一个工程里必须包含一个 main.aardio 文件,否则点击【发布】会报错。
应用程序启动时首先会运行 main.aardio 中的代码。

注意:你在aardio中点击【运行】按钮,运行的是当前打开的aardio文件,
每个 aau 文件都可以单独运行,如下图( 鼠标点击图片可放大 ):
21.png

在aardio【功能区工具栏】中的按钮【运行】,【编译】针对的都是当前打开的 aau 文件.
【编译】按钮指的是将aardio文件编译为二进制格式,二进制aardio文件是不可编辑的。

评分

参与人数 3 +4 收起 理由
svip + 1 很给力!
qdmall + 1 赞一个!
dzxhlq + 2 赞一个!

查看全部评分

42

主题

628

回帖

3765

积分

版主

积分
3765
 楼主| 发表于 2012-11-19 11:26:41 | 显示全部楼层
Hi, 别指望在这里看到我写下一堆术语跟你解释什么是“库”,
我劝你别浪费这些时间,更不会给你语法手册的相关链接,老实说,我自己也没有看过这些东西(说难听一些其实我看不懂)。

来,跟我一起动手吧:

首先创建对话框应用程序,
打开 main.aardio,在【对话框】上添加一个按钮,
如下图(鼠标点击图片可放大 ):

22.png


然后暂时忘记这按钮,
在工具箱点击鼠标指针,
然后在【对话框设计器】中点击【窗体】,
按钮控件周围的八个小方块不见了,这表示他失去焦点了。
然后我们点击aardio右侧【属性面板】,在里面修改边框属性为:resizable
23.png

如果你搞不清楚resizable是什么意思,你可以到爱词霸查一下:
http://www.iciba.com/resizable

当然,你也可以装一个有道词典,免费的,而且支持划词翻译,网址如下:
http://cidian.youdao.com/

把边框设置为resizable,
那么窗体运行以后就可以用鼠标拖动边框调整大小了。
24.png

然后继续在【对话框设计器】上添加一个【文本框控件】,
用鼠标拖动控件右下角的小方块调整到合适大小, 如下图:

25.png

别忘记了窗体是可调整大小的,
我们希望【控钮控件】大小不变,总是显示在【窗体】的右下角,
然后我们希望【文本框控件】大小是可变的,总是尽可能显示到最大,

首先点击【文本框控件】,
在属性面板中点击【固定边距】前面的加号展开所有选项:
26.png
然后设置左、右、上、下四个边距的属性为true,
true就是真,false就是假,在编程中称为【逻辑值】或者【布尔值】

再按上面的方法设置【按钮控件】固定下边距、固定右边距。
然后在aardio中点击【运行】测试一下效果,试试最大化运行显示的对话框。

然后修改按钮控件的文本属性为“点我抓取”,如下图:
27.png

然后在【对话框设计器】中双击按钮控件,自动切换到代码视图。
aardio编辑器自动的添加了一个事件函数:
  1. mainForm.button.oncommand = function(id,event){
  2.     //mainForm.msgbox( mainForm.button.text );
  3. }
复制代码
首先,我们删除上面的注释,
双斜杠开始的行是注释语句,一般显示为绿色,
注释语句在运行时会被忽略,这里的注释语句仅仅是演示用法,
我们可以先删掉不必要注释(程序中不要包含不必要的注释是一个良好习惯),变成下面这样:
  1. mainForm.button.oncommand = function(id,event){
  2.    
  3. }
复制代码
function关键字定义一个函数,
函数将一小段代码包含在一对大括号里,构成了一个短小的子程序。
下次我们要调用这段子程序,只要输入函数名字加圆括号就可以,

例如我们执行代码 mainForm.button.oncommand() 也就是执行上面我们定义的函数。
不过 oncommand是个特殊的函数,一般不是我们自己调用,而是在用户点击按钮时,
由窗体对象自动调用的函数 - 也就是回调函数。

例如你认识了一个新朋友,
他会跟你说:“Hi,请把你的电话号码留给我,你不要打电话给我,我有需要会打给你的”,这就是回调的一种形式了,
回调函数也一样,你定义好 mainForm.button.oncommand 这个函数,窗体会在有需要时自动调用你的oncommand函数。

我们决定在用户点击按钮时修改文本框的内容,
于是我们输入 mainForm.edit.  当输入圆点以后,aardio编辑器自动列出了
名字为edit的控件对象所有可用的成员属性、以及成员函数。如下图:

28.png

根据经验,我们选择 text 属性

29.png

经验是个很好的东西,所有的控件用法类似,
甚至在不同编程语言里 - 常用的属性名、函数名都是类似的,再加上aardio编辑器提供的代码自动提示功能,我们一般能快速的找到需要的属性、或方法。

有的新手可能会说:
我是真正的小白,什么经验也没有,我还是想知道edit控件到底有哪些可用的属性,最好是中文的说明”,
好吧,我告诉你怎么找到这些东西,所有的窗口控件,都是在标准库的 win.ui.ctrl 名字空间下定义的(别问我什么是名字空间,你不需要搞清楚,其实我也不清楚)。

在标准库中找到 win.ui.ctrl.edit 然后双击鼠标左键打开库文件, 如下图:

30.png

  1. /***intellisense()
  2. !edit.cls = 设计时类名
  3. !edit.className = 运行时类名
  4. !edit.text = 编辑控件文本属性
  5. end intellisense***/
复制代码

你可以看到一堆这样的注释语句,
注释语句在运行编译时被忽略,那这些语句写的这么复杂有什么特殊用途呢?

英语不好,打开爱词霸查一下:
http://www.iciba.com/intellisense
看了解释明白了,原来这些绿色的代码是edit控件对象的智能提示配置。

!edit.text = 编辑控件文本属性
这句的意思是定义edit控件对象的智能提示列表中增加text属性,text属性的说明是 "编辑控件文本属性",
到这里我们明白了,所有标准库里定义的函数都可以在相应的库文件中找到最详细的列表和用法说明。

不要问我更进一步的定义intellisense的语法,
我对这些不感兴趣,也记不住,你要是对文档有狂热的兴趣,你可以打开下面的链接进一步了解:
http://www.aardio.com/zh-cn/doc/library-guide/intellisense.html

好吧,回到我们的程序,
完成我们所有的代码如下( 鼠标放到代码上,然后你能在代码右上角看到复制源码的工具条 ):
  1. import win.ui;
  2. /*DSG{{*/
  3. mainForm = ..win.form( right=491;bottom=337;parent=...;text="aardio Form";border="resizable" )
  4. mainForm.add(
  5. button={ dr=1;bottom=330;right=437;left=319;top=298;z=1;db=1;text="点我抓取";cls="button" };
  6. edit={ dr=1;dl=1;bottom=287;right=479;left=12;dt=1;top=12;text="edit";z=2;db=1;multiline=1;edge=1;cls="edit" }
  7. )
  8. /*}}*/

  9. mainForm.button.oncommand = function(id,event){
  10.     mainForm.edit.text = "hello world";
  11. }

  12. mainForm.show()
  13. win.loopMessage();
复制代码

我们进一步修改上面的程序,
我们希望点击按钮控件不仅仅只是显示 “hello world”,
而是抓取一个网页的html源码,并显示在文本框中。

我们希望在标准库中有一个名字空间叫 myTools 包含了我们需要的函数,
而我们希望 myTools 名字空间下有一个 myTools.getHtml() 函数用来抓取网页的HTML源码。

但是很遗憾,标准库里没有这些东西,
当然,我们可以在工程的用户库里添加自定义的库。

下面我们在工程用鼠标右键中点击【用户库】,弹出下图的菜单:
31.png


在弹出的【用户库】菜单中点击【新建库】,弹出【新建】对话框如下图:
32.png

直接输入新用户库的名字"myTools",点后点击【打开】按钮,
一切很顺利,在【工程管理器】的【用户库】目录下多了库文件 myTools,
并且在编辑器中自动打开了这个库,如下图:
33.png

用户库中添加了默认代码
  1. namespace myTools{
  2.    
  3. }
复制代码
namespace 定义一个新的名字空间,
我们可以在名字空间中添加需要的函数 getHtml,修改用户库代码如下;
  1. namespace myTools{
  2.     getHtml = function(){
  3.    
  4.         return "返回值";
  5.     }
  6.    
  7. }
复制代码
return 语句指定函数的返回值。
继续修改上面的代码,将 return "返回值"; 改为返回网页源码。

因为我们需要抓取网页,需要用到标准库中的 inet.http 对象,
我们使用 import inet.http; 导入这个库备用,修改代码如下:
  1. import inet.http; //导入需要使用的标准库

  2. //定义名字空间
  3. namespace myTools{
  4.    
  5.     //定义函数
  6.     getHtml = function(){
  7.    
  8.         //创建一个http对象
  9.         var http = ..inet.http(); //访问外部名字空间要加上两点
  10.         
  11.         //var关键字将对象定义为局部变量(禁止在函数外部使用以避免冲突)
  12.         var 网页源码 = http.get("http://bbs.aardio.com"); //下载网页
  13.    
  14.         return 网页源码; //返回网页源码
  15.     }
  16. }
复制代码
点击aardio【快捷工具栏】的【保存】按钮保存库文件。
34.png

切换到 main.aardio ,修改按钮回调函数为如下代码:
  1. import myTools;//导入自定义的用户库
  2. mainForm.button.oncommand = function(id,event){

  3.     var 网页源码 = myTools.getHtml();//调用用户库函数抓取网页源码
  4.    
  5.     mainForm.edit.text = 网页源码; //使用文本框显示网页源码
  6. }
复制代码
我们发现一点小小的不足,myTools.getHtml()只是固定的抓取指定网址,
这非常的不方便,我们再回到 myTools 用户库,将网址修改为可变的函数参数,
修改后的 myTools库源码如下( 修改部分为粗体字 ):
  1. import inet.http; //导入需要使用的标准库

  2. //定义名字空间
  3. namespace myTools{

  4.    
  5.     //定义函数
  6.     getHtml = function( 网址参数 ){
  7.    
  8.         //创建一个http对象
  9.         var http = ..inet.http(); //访问外部名字空间要加上两点
  10.         
  11.         //var关键字将对象定义为局部变量(禁止在函数外部使用以避免冲突)
  12.         var 网页源码 = http.get( 网址参数 ); //下载网页
  13.    
  14.         return 网页源码; //返回网页源码
  15.     }
  16. }
复制代码
函数多了一个网址参数,在调用时需要由调用者在参数中传入要抓取的网址,
在 myTools用户库最后面,添加一小段智能提示配置代码,如下:
  1. /**intellisense(myTools)
  2. getHtml(.(网址) = 抓取并返回网页源码,参数指定要抓取的网址
  3. end intellisense**/
复制代码
点击【保存】按钮保存库文件,
然后在【工程管理器】中右键点击用户库,在弹出菜单中点击【刷新目录、智能提示】
36.png

我们回到 main.aardio 文件,
修改 mainForm.button.oncommand 事件回调函数如下:
  1. import myTools;//导入自定义的用户库
  2. mainForm.button.oncommand = function(id,event){

  3.     var 网页源码 = myTools.getHtml("http://bbs.aardio.com");//调用用户库函数抓取网页源码
  4.    
  5.     mainForm.edit.text = 网页源码; //使用文本框显示网页源码
  6. }
复制代码
点击【全部保存】按钮:

35.png

我们还遇到一个问题,如果网速比较慢的话,抓取的时间会很长,
在单线程的窗口程序中,如果线程被耗时的操作所阻塞,也就不能正常的处理用户消息,导致用户点击界面没有反应。

这时候就需要用到多线程了,使用 thread.create() 可以创建线程,
我们还要用 thread.waitOne() 函数等待线程执行完成。

在窗口程序中,可以使用更简单的 win.invoke() 函数创建工作线程。
win.invoke() 会创建一个工作线程执行代码,并且等待线程结束,然后获取返回值。

我们修改 main.aardio 中 mainForm.button.oncommand 函数代码如下:
  1. mainForm.button.oncommand = function(id,event){

  2.     var 网页源码 = win.invoke(
  3.         function(){
  4.             import myTools;//线程函数一定要在线程内部导入需要使用的库
  5.             return myTools.getHtml("http://bbs.aardio.com");//调用用户库函数抓取网页源码
  6.         }
  7.     )
  8.    
  9.     mainForm.edit.text = 网页源码; //使用文本框显示网页源码
  10. }
复制代码
全部源码见附件:
抓取网页测试工程.zip (1.89 KB, 下载次数: 4780)

关于import语句、库的更多知识,请参考aardio帮助文档的相关链接:
http://www.aardio.com/zh-cn/doc/library-guide/import.html


评分

参与人数 4 +28 收起 理由
svip + 1 很给力!
PudgeRoyal + 5 您的签名,恶魔好像太抬举不懂欣赏的人了
fen + 20 很给力!
dzxhlq + 2 赞一个!

查看全部评分

42

主题

628

回帖

3765

积分

版主

积分
3765
 楼主| 发表于 2012-11-19 11:27:12 | 显示全部楼层
计算机硬件里有两个重要的硬件,一个是CPU,一个是内存。

什么是CPU呢?
CPU是英文Central Processing Unit的缩写,中文的意思是中央处理器,你可以把他理解为计算机的心脏,电脑的所有运算工作都是他来负责的,CPU的运算能力越快你的电脑的速度也就越快, 因为CPU是心脏,所以CPU挂了你的电脑也就挂了,不信你把CPU从主板上拔下来,看你的电脑是不是不能用了?!

cpu.jpg

那CPU运算什么东西呢?
运算的当然都是各种各样的数据了。

那数据是什么呢?
数表示信息,据表示载体,数据是某种载体上记载下来的信息。
你每天在账本上记下你今天花了多数钱,这就是你的财务数据,当你用你的大脑算账时,你的账本就是信息的载体,你的大脑就是运算的中央处理器(CPU )

计算机CPU运算时的数据载体就是内存( 我们暂时忽略硬盘,寄存器这些知识 )
不知道大家有没有玩过那种小游戏机,每个不同的游戏都放在一张卡片上,往游戏机上一插就可以玩了,其实这也可以理解为一种内存卡。

mem.jpg

在我们的电脑中有一个或多个内存卡,
每个程序启动以后,就会把数据放到内存里,你可以把内存想象为超市的寄存柜,谁先去就可以抢一个柜子放东西,东西放好后会给你一张小票,其实计算机程序也是一样的,你把数据放到内存里,内存就会划出一小块给你,然后你通过地址就可以访问了,例如:“第1格,第2格..........第n格”,这个表示内存地址的玩意儿一般叫做指针,指针的值也就是一个表示内存地址的数值。

addr.jpg
但是因为程序启动的先后顺序不是固定的,所以你每次启动可能分配到不同的内存,你可能每次都得到不同的地址,记忆这些地址就很麻烦了,而且他是变动的也没办法在程序里用数值来记录,这时候就有了变量这个东西,变量就是定义一个名字来表示某一块内存的数据,你可以把他理解为超市寄存柜的小票。

ptr.jpg

下面的代码就定义了一个变量:
变量名字 = "这是放到内存里的文本字符串"

以后你想访问这个内存里的数据,就直接使用变量名字就可以了,这就好像我们用寄存柜的小票又可以把寄存的东西取回来。

变量名字还可以放在不同的名字空间里,什么是名字空间呢?
张家有个孩子叫“兵兵”,李家也有个孩子叫“兵兵”,虽然用了相同的名字,但是他们的全名并不冲突,因为人的全名里家族姓氏起到了名字空间的作用,我们用代码来表示如下:
  1. //定义名字空间
  2. namespace 张家{

  3.     兵兵 = "本人张兵兵"
  4. }

  5. //定义名字空间
  6. namespace 李家{

  7.     兵兵 = "本人李兵兵"
  8. }

  9. //导入控制台支持库
  10. import console;

  11. //调用console名字空间的log函数
  12. console.log( 张家.兵兵 )

  13. //调用console名字空间的log函数
  14. console.log( 李家.兵兵 )
复制代码
鼠标放到上面的代码上不动,你能在右上角看到多出来的工具条,
第第二个按钮复制上面的源码到aardio中运行测试,如下图:

37.png

运行效果如下图:

38.png

这个黑窗口叫【控制台】,也可以叫【命令行窗口】,
这个窗口默认是禁止点击关闭按钮的(发布后可以点关闭,仅仅是在aardio开发环境中运行程序时有此限制),用鼠标点击控制台,然后按CTRL+ C组合键就可以关掉控制台了,实际上可以不要管他,你每次在aardio中运行程序都会自动关闭上次打开的【控制台窗口】

好吧,我们继续回到变量的话题,
变量是用来表示内存地址的,内存是用来放数据的,
数据有不同的类型,这就好像我们塞到超市寄存柜里的东西也可以归类。

我们点击aardio的【语法】面板,看下aardio的基本数据类型有多少种

39.png

在【语法】面板列出了aardio的各种基本语法。

暂时我们不用管太多,看几个最基本的:
  1. //双斜杠后面是注释,就是被忽略不执行的说明语句

  2. 字符串 = "字符串通常是被放到双引号里"

  3. 数值 = 123; //数字开始的字面量表示数值
复制代码
我们先了解两个最基本的【数据数型】:数值,字符串。
而在程序源代码里,除了【注释】,【字符串】以外的部分都是【程序代码】,
程序代码里的每一个字符就必须严格遵守编程语言的语法规则。

你可以在【字符串】或【注释】里随便加一个逗号什么的,
但是在字符串和注释以外的【代码部分】不能随意添加额外的逗号,书写代码必须遵守基本的语法规则。

关于变量的详细解释,请参考手册:
http://bbs.aardio.com/doc/reference/ ... es%20constants.html

关于名字空间的详细说明,请参考手册:
http://www.aardio.com/zh-cn/doc/language-reference/namespace.html



点评

真棒: 5.0 同意: 5.0
真棒: 5
非常棒,看了很有帮助。  发表于 2012-12-1 21:58

评分

参与人数 5 +37 收起 理由
svip + 1 很给力!
sheng + 3 赞一个!
程序猿 + 10 很给力!
dzxhlq + 3 赞一个!
流浪汉!_! + 20 很给力!

查看全部评分

42

主题

628

回帖

3765

积分

版主

积分
3765
 楼主| 发表于 2012-11-19 11:28:31 | 显示全部楼层

建议您将前面几节的几个小练习反复练习熟练,

然后打开aardio帮助手册,仔细阅读一遍《aardio语言》这个目录下的全部内容,通读一遍,不必看懂。
然后通读第二遍,不必看懂.........帮助手册里其他内容就暂时不必看了。

帮助手册也可以在线浏览:
http://bbs.aardio.com/doc/reference/

附图: 打开aardio帮助文档

175000t1wi4llaqzi1cwyq.gif

105822kptkislhfpstkiso.gif 在我的电脑上无法阅读CHM电子书怎么办

当您用鼠标双击下载的CHM文件时,
在弹出的安全警告对话框上取消选项“打开此文件前总是询问”即可正常浏览了。

或者鼠标右键点击CHM文档在右键菜单中点“属性”,然后在弹出的对话框中选择"解除锁定"。

技巧提示:
在aardio编辑器中选中你要查询的代码,然后按键盘上的F1可搜索浏览官方网站上的在线帮助。


附图: 在aardio代码编辑器中使用代码完成, 查看智能提示:


222124wna22vj2wcjrwn1c.jpg



快捷键 Ctrl + J 显示代码提示,快捷键 Ctrl + K 刷新智能提示数据.[/b

42

主题

628

回帖

3765

积分

版主

积分
3765
 楼主| 发表于 2012-11-19 11:30:12 | 显示全部楼层
本文供初次接触aardio的用户快速的了解aardio的特殊符号最基本的用法。
这里只会简单的说明一些这些特殊符号的作用,不会详细的讲,+ - * / 这些较通用的操作符下面不会列出,详细的参考语法手册

.  成员操作符
用于访问对象的成员,
例如 io.file 表示 open函数是io对象的成员( 这里是名字空间成员 )

.. 全局成员操作符
这个操符符用在自定义的名字空间里访问全局名字空间 global;
例如 ..import console 实际上等价于 global.import console

:: 全局常量操作符
这个操符符用于将一个变量名转换为 global名字空间下的全局常量名 - 并保护该常量在其后加载的代码中一旦赋为非空值后即不可修改,例如:
::Kernel32 := raw.loadDll("Kernel32.dll");

全局常量需要遵守以下使用规则
1、全局常量名首字母大写(以区别普通变量 )。
     aardio默认定义了少量全局常量函数名 - 这些关键函数全部小写首字母,但在aardio编辑器中显示为蓝色高亮状态。

2、
当一个变量被定义为全局常量,赋于非空值以后其值即不能再随意更改 。
     全局常量一般使用 ::Name := 初始值 赋值,等价于使用 ::Name = ::Name or 初始值  以避免重复初始化。

3、::的作用域是根据代码的载入顺序向下向后的,所以在同一文件中已定义的全局常量名时再次使用可以省略::前缀,但因为代码文件的载入有不确定性 -  在其他文件首次使用该常量名时仍然应该使用::定义一次。

[ ] 下标操作符( 或者叫索引操作符 )
也是用来访问对象的成员,中括号里面应当是一个合法的表达式。
例如 io.file 用索引索作符来表示就是 io["open"]
        
而 .成员操作符 这里的成员名字不需要放到引号里,并且必须是一个合法的变量名。
但索引操作符就不同了,可以放任意的表达式,例如 io[ "o" + "pen" ] 这样写也是可以的。
        
另外一个区别:当你使用索引操作符调用成员函数时,被调用函数的 owner 参数为空。
所以一般不应当这样写 io["open"]() ,而应当写 import console

[[ ]] 直接下标操作符
这玩意与 [] 的用法基本是一样的,
唯一的区别是他不会触发元方法,所以数组里实际有这个成员就是有,没有就是没有,忽悠不了这个操作符。

这个直接下标操作符可以应用于任何类型的对象( 包括null空值 )不会报错,
如果对象不包含直接下标操作符中指定的成员就简单的返回 null空值。所以[[]]即可以用来取值同时又可以方便的检测对象类型,例如:

  1. if( 可能为空或任意类型的变量[["test"]] ){
  2.         console.log(  可能为空或任意类型的变量[["test"]] )
  3. }
复制代码
将普通下标操作符用于字符串时, []操作符取的是字节码、是个数值,而 [[]] 取出来的是字符。
例如定义字符串变量 str = "abcd" 这时候 str[1] 是他的ASCII码97,而str[[1]]则返回字符"a"

@ 元表操作符
这个操作符表来读取或设置对象的元表, 关于这个请查看帮助文档
一个简单的示例

var tab = { a = 123 };

tab@ = {
    _get =
function(name){
        
return "有木有:" + name;
    }
}

import console
console.log( tab.a )
// -> 显示123
console.log( tab.b ) // -> 显示"有木有"
console.log( tab[["b"]] ) // -> 显示 null空值

@ 在模式匹配里还有特殊用途。
如果一个模式表达式的第一个字符是‘@’,表示全局禁用模式语法执行普通的二进制匹配。
如果一个模式表达式的第一个字符是两个'@@',同上表示禁用模式语法并且执行文本匹配(不会截断宽字符。)
也可以在模式表达式的尖括号中使用一个'@" 或两个 '@@' 表示局部禁用模式语法( 两个‘@@’ 表示启用文本匹配,并且忽略大小写 )

示例如下:
var  str = "abc\d测试字符串"

//模式匹配
var i,j = string.find(str,"\\d")

//禁用模式匹配
var i,j = string.find(str,"@\d")

//禁用模式匹配、且启用文本匹配
var i,j = string.find(str,"@@\d")

//局部禁用模式匹配
var i,j = string.find(str,"<@\d@>:+")

//局部禁用模式匹配、且启用文本匹配、并且忽略大小写
var i,j  = string.find(str,"<@@\D@>:+")   

# 数字符
当 #在一个数组或字符串前面时,计算并返回数组的长度.
如果 #在一个单引号包含的字符后面,计算并返回字符的ASCII码,例如 'a'# 返回 数值97

当#放在数字中间时,用来表示自定义进值,例如 2#101 表示2进制的101
这个 2#101 也可以换个等价的写法用 2_101 表示

_ 下划线
如果在一个成员变量的前面加上下划线,则声明该变量的值为只读,在赋值后不可修改
例如 _version = 123 你就不能在后面再修改为 _version = 456, 这种习惯在其他编程语言中通常只是一种书写习惯,但是在aardio则是语法级别的强制约束。

如果下划线后面的变量名全部大写,则表示全局只读的常量
例如 _VERSION = 123 表示他在所有名字空间都有效

另外他也可以用来表示自定义进制 2#1012_101都表示2进制的101

$ 包含指令符
这个符号挺有意思,只要在文件路径前面加上这个符号, 就会将该文件编译为一个普通的字符串对象.
例如  str = $"e:/我的图像/x.jpg" 如果编译或发布以后, 你就不需要这个图像文件了,即使别人电脑上没有这个E盘也没有关系,因为文件已经编译成一个普通的二进制字符串了。

在aardio编辑器里,只要将资源管理器里的文件直接往编辑器里一拖就行了,会自动加上这个包含指令符。

++ 字符串连接操作符
在 aardio 里 1 + 2 的结果是数值3( 好像是废话哦 ),
1 + "" + 2 的结果是字符串 "12" 这个不难理解吧?

上面的 + "" + 可以直接缩写为 ++
也就是说 1 ++ 2 的结果就是 字符串 "12"

实际上一个加号也可以连接字符串,例如:
"1" +  "2" 的结果是 字符串 "12"

也就是说,只有在 + 号前后没有常量字符串(或者叫没出现引号)
你需要用这个 ++ 来告诉aardio,你要做的的是字符串连接,而不是数值加运算。

// 行注释语句
这个是比较通用的语法, 不过在aardio里有一个特殊的用法:
行注释可以用于赋值语句中表示字符串,例如 var str = //这是一个字符串

这个与双引号类似,字符串都表示字面意义,没有转义符。

/* 段注释语句 */
这个也类似其他类C语言,但注意首尾的星号可以用多个、并且首尾星号的数目一定要匹配。
aardio使用这个特性来解决注释嵌套的麻烦问题。

另外,段注释也可以用在赋值语句中表示字符串,字符串都表示字面意义,没有转义符。
而换行总是被强制解释为 '\r\n',以避免不同文本编辑器导致的可能混淆的结果。
这个特性用来包含HTTP头之类严格指定回车换行的文本很方便。


aardio中可以调用一些其他语言的源代码,通常要包含大段的其他语言的源码,放到这个段注释里赋值给字符串变量就可以了。直接复制粘帖,不需要象其他语言里一样苦闷的折腾字符串转换。

"这个用来表示
普通字符串字面值"
双引号里表示普通字符串、不支持转义符。
而且双引号里面的文件是可以换行的,换行都被强制解释为 '\n'
也就是说在双引号里绝对不会、也没办法出现回车符,也就是 '\r'。

'这个用来表示转义字符串,
例如\r\n表示回车换行,
注意这后面的换行被忽略
注意这前面的换行被忽略'
单引号表示字符串时支持转义符,例如'\r\n'表示回车换行,
而且只能用 '\r\n'表示回车换行,文本本身的换行会被忽略,上面的示例中就只有一个回车换行

** 乘方运算
例如 2 的3次方写为 2 ** 3

% 取模运算
例如24小时制的19点转换为12时制请问是几点, 就可以写为 19 % 12 结果是 7点

or ||  :  逻辑或运算符
这几个运算符语义都是完全相同的,唯一的区别是 : 的优先级略低

and && ?  逻辑与运算符
这几个运算符语义也是完全相同的,唯一的区别提 ? 的优先级略低

a ? b : c
这个是三元运算符,注意当b为假的时候则会返回c, 实际上这里的 : 是逻辑或的语义

() 括号
这个用在表达式中可以改变操作符的优先级, 例如 7 * ( 2 + 3 ) 括号里面的会先运算.
放在函数名后面则表示调用执行该函数,例如

import console //打开控制台
console.log("还可以写一个或多个参数")

定义函数的时候用来表示形参,例如

func =
function(a,b,c){
   console.log(
"收到参数",a,b,c )
}

... 不定参数
运行一下下面的示例你就明白了

func = function( a,... ){
   console.log(
"收到参数",... )
}

import console
func( 1 )
func( 1,2 )
func( 1,2,3,4 )

点评

很给力很给力很给力很给力很给力很给力  发表于 2014-4-13 23:39

评分

参与人数 2 +6 收起 理由
svip + 1 很给力!
kangmingxuan + 5 赞一个!

查看全部评分

8

主题

90

回帖

716

积分

三级会员

积分
716
发表于 2012-11-19 12:02:54 | 显示全部楼层
占楼期待

0

主题

36

回帖

363

积分

二级会员

积分
363
发表于 2012-11-19 14:52:29 | 显示全部楼层
占坑留位。
收藏在哪里?

9

主题

193

回帖

1297

积分

四级会员

积分
1297
发表于 2012-11-19 20:53:37 | 显示全部楼层
对自学编程的朋友帮助很大。免费的程序。优秀的教程,

16

主题

170

回帖

1404

积分

四级会员

积分
1404
发表于 2012-11-19 22:02:27 | 显示全部楼层
神贴.

0

主题

3

回帖

17

积分

新手入门

积分
17
发表于 2012-11-20 22:26:43 | 显示全部楼层
先顶后学。

6

主题

60

回帖

514

积分

荣誉会员

积分
514
发表于 2012-11-21 09:03:07 | 显示全部楼层
真是一篇好教程,由浅入深,循序渐进,谢谢

48

主题

542

回帖

3328

积分

五级会员

积分
3328
发表于 2012-11-21 09:15:56 | 显示全部楼层
非常不错的教程

0

主题

7

回帖

41

积分

新手入门

积分
41
发表于 2012-11-21 12:07:34 | 显示全部楼层
拜读完了以后经过反复嚼磨认真思考终于弄懂了,原来是这样子滴~。。太感谢您的这篇图文并茂。真心谢谢~

2

主题

39

回帖

301

积分

培训班

积分
301
发表于 2012-11-21 12:41:45 | 显示全部楼层
这篇教程会帮到非常多的人迈进aardio的大门。

6

主题

52

回帖

453

积分

二级会员

积分
453
发表于 2012-11-21 20:24:12 | 显示全部楼层
楼主辛苦了  。。。。

8

主题

110

回帖

904

积分

三级会员

积分
904
发表于 2012-11-21 21:51:30 | 显示全部楼层
学习了

0

主题

13

回帖

157

积分

一级会员

积分
157
发表于 2012-11-22 12:18:14 | 显示全部楼层
写的很好啊,谢谢分享了啊!
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-1-13 15:54 , Processed in 0.086845 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表