首页 > 数据库 > 数据库开发技术 > aardio教程一) 基础语法-上
想开发一些小工具,所以想系统性的学习一遍aardio,顺便可以写些教程,之前都是哪里不会搜哪里。我的主要语言是Python,所以会以Python作为对比来加深印象。
aardio的基础语法和JavaScript基本类似,如果你学过JavaScript,aardio很容易上手。下面的文档来自官方文档 [1]
基础语法看:https://bbs.aardio.com/doc/reference/
一些库的使用,获取文档有以下途径:
变量标识符的定义和Python基本一样,语法如下:
与Python不同的点:
_,其他下划线开头的为常量,定义后无法被修改| - | - |
|---|---|
var 用于定义局部变量 |
def 用于定义关键字 |
and not or 逻辑运算符 |
begin end 用于包含语句块 |
if else elseif 用于条件判断语句 |
for in 用于循环语句 |
select case 用于条件判断语句 |
try catch 用于捕获异常 |
break continue 循环中断语句 |
function 用于创建函数 |
namespace 用于创建或打开名字空间 |
import 用于引用库 |
this 用于在类内部表示当前实例对象 |
global 用于表示全局名字空间 |
owner 用于表示调用函数的主体对象 |
while do 用于循环语句 |
null 用于表示空值 |
false true 用于表示布尔值 |
class ctor 用于创建类 |
return 用于函数中返回值 |
with 用于打开名字空间 |
self 用于表示当前名字空间 |
你如果闲的无聊的话,也可以使用def自定义关键词,比如:
def 如果 = if
def 否则 = else
def 否则是 = elseif
def 名字空间= namespace
def 循环 = while
io.open();
如果 1== 1 {
io.print(" 1等于1 ")
}
否则{
io.print(" 1不等于1 ")
}
改个名字和图标,一款新的中文编程语言就写好了
分隔每条语句可以用换行或者分号, 一下三种方法都可以:var a = 1; var b = 2;
var a, b = 1, 2;
# 后面的分号可写可不写,我一般都写上
var a = 1
var b = 2
注释则是使用//和/*加*/,也可以使用多个/***和***/,只需要前面和后面的数量对应上
| 算术运算符 |
+ 加 |
-减 |
* 乘 |
/ 除 |
** 幂 |
% 模 |
| 按位运算符 |
~ 取反 |
& 与 |
` | ` 或 |
^ 异或 |
<< 左移 |
| 等式运算符 | == |
!= |
||||
| 逻辑运算符 |
! not
|
` |
or :` |
&& and ?
|
||
| 关系运算符 | > |
< |
>= |
<= |
||
| 连接运算符 | ++ |
|||||
| 取长运算符 | # |
|||||
| 全局变量定义 | :: |
|||||
| 成员操作符 | . |
[] |
[[]] |
|||
| 包含操作符 | $ |
|||||
++并不是c语言里面的自增,而是用于字符串和字符串拼接,或者字符串和数值拼接。例如: 1 ++ "2" == "12",也可以省略成1+"2"_len元方法::表示为全局常量,比如::Kernel32 := raw.loadDll("Kernel32.dll");,可以避免重复加载dll$符表示内嵌该文件到编译后的exe中||、or和:再使用上基本没有区别,大部分情况下可以互相替换。
true ? 1 : 0a := 1等同于a = a : 1,可以用于避免重复赋值a ?= f(a)等同于a = a ? f(a),可以只当a不为null执行f(a)a = 1 or 2、b = 0 or 3。语法和意思也和Python是一样的a >>> n 将数值a按位向右移动n位(如果n大于等于32,则为n对32取模结果的位数) ,不保留符号位(负数不保持最高位为1,因此右移后会变成正数)
实际用途:
可以通过右移 0 位将有符号数强制转换为无符号数。例如 -1 >>> 0 的值为 0xFFFFFFFF , 其作用等价于 raw.convert( {int value = -1},{INT value}).value。
不声明调用静态 API 默认会返回 32位有符号整数,如果原 API 返回的是 32位无符号整数,那么只要简单的将返回值 >>> 0 就可以得到原来的无符号数值了
这里有一点很重要: 内存里的数据都是0和1,它是什么值只取决于你以什么类型读取它。
基础数据类型会判断值是否相等,而非基本类型则是判断对象是否相等或者调用_eq元方法判断
元方法类似Python的魔法方法,可以重载对象的符号运算,比如_eq重载==。
0, null 与 false 相等,其他类型都与true想等
跟数值类型比较时:
\r\n\t也是转为0_tonumber元方法转数值| 表达式 | 结果 |
|---|---|
"123"==123 |
true |
"abc"==123 |
false |
""==0 |
true |
'\r\n\t '==0 |
true |
| null==0 | false |
还有一个恒等判断的符号===和!==,它不会调用_eq元方法,直接判断类型和数值都相等
这个东西没必要记,有疑问时加括号即可。遇到别人的代码有疑问,可以运行测试下
| 类型 | 举例值 | 说明 |
|---|---|---|
type.null |
null | |
type.boolean |
布尔值 | |
type.number |
数值 | 默认为64位浮点数 |
type.string |
字符串 | 字符串和Python也基本一样,utf-8编码 |
type.buffer |
raw.buffer | 可用于接收c语言char*数据 |
type.pointer |
指针 | 接收dll返回的指针数据,或者使用topointer(obj)
|
type.table |
表 | aardio中的数组、字典等复杂类型 |
type.function |
函数 | function创建的函数 |
type.cdata |
内核对象 | 一般不用关心 |
type.fiber |
纤程 | 没用过 |
type.class |
类 | class关键词创建的类 |
任何没有定义或赋值的变量默认都是null。如果函数不传参数,默认传过去的也是null。
import console;
console.dump(a);
console.pause(true);
import console;
function f(a){
console.dump(a);
}
f()
console.pause(true);
2#11表示二进制数,8#11表示八进制数,16#A表示十六进制数,也可以表示为0xA。2e+20(2x10**20)表示科学计数法, +仅表示指数的正负,可加可不加_来分隔数值,111_222等同于111222aardio中定义的字符串都是utf-8编码
string.fromUnicode(s)、string.toUnicode(s)可以做utf-8 <=> utf-16的转换,Windows上使用的Unicode编码一般就是指的utf-16,两个函数都可以指定第二个参数,代表目标编码的代码页,用于转换其他编码。
常用的代码页: 936(gb2312)、1200(utf-16 le)、1201(utf-16 be)、65001(utf-8)。所有代码页可以参考: 标准代码页(codepage)列表 [2]
Windows可以在cmd下使用chcp命令查看当前使用的代码页,一般情况下都是936。
定义字符串的话有四种方式: 双引号("")、单引号('')、反引号(``)和注释符(/**/)。其中双引号和反引号用法是一样的
都可以定义多行字符串:
a = "1
2";
b = '1
2';
c = /*1
2*/
不同点:
'\n'表示换行。\n\n\r\n"1222""11111",则等同于'1222"11111'\'表示单引号本身, 例如'1222\'11111',则等同于"1222'11111"'A'#表示这个字符的ASCII值,也就是65'UTF16字符串'u表示UTF-16 LE编码的字符串Python中有str、int、print 这些可以使用的全局函数,aardio中也内置了一些可以全局使用的函数。我觉得用不到的就不在下面列出来了
_tostring元方法。tostring(10, 16)返回0xAtostring(time(), "%Y-%m-%d %H:%M:%S")将参数转换为指针,这个函数我还没用过。到时候用的时候再看什么作用
_tonumber元方法。tonumber("0xA", 16)注意: 这个函数会返回两个值,第一个是转换后的数值。第二个是转换使用的字符数。例如tonumber("12a"), 返回12和2.
一般会使用两个值接收var a, b = tonumber("12a")
invoke(被调用函数, owner, 参数1, 参数2)
调用指定函数,owner这个后面再提
call(被调用函数, owner, 参数)
调用指定函数,跟invoke基本类似
callex(异常处理函数,被调用函数, owner, 参数)
当被调用函数代码出现异常时则调用异常处理函数
加载编译代码,参数可以是代码字符串或者代码路径
加载编译和运行代码,参数可以是代码字符串或者代码路径
编译代码为二进制字节
同步阻塞休眠,和Python的time.sleep一样,单线程情况下会卡住界面。界面中应使用win.delay
用于获取对象的数据类型,一般使用type(obj) == type.string来判断对象是不是字符串,所有类型请看基础语法中的基本数据类型
运行aardio代码,并返回表达式的值
主动抛出异常
https://bbs.aardio.com/doc/reference/https://blog.csdn.net/jianggujin/article/details/80325461https://mp.weixin.qq.com/s/PA0lsojc-zkZ4eltj8P6Kg原文作者:Python成长路;如有侵权,请联系管理员删除。