极语言基础
目录
-
目录
-
快速入门
-
启动与界面设计
-
菜单设计
-
窗体与对话框设计
-
极语言语法
-
控件内容操作
-
编辑快捷键
-
常见问题
-
中文输入法问题及解决办法
-
鼠标悬停信息
-
对其他语言的兼容
- 文本变量
- 内存管理
-
内存回收和安全机制
-
-
-
自制中文编程环境
- 安装目录说明
- 文件类型说明
- 使用极语言开发环境保存代码
- 编译方法
-
变量类型
-
变量的定义与使用
-
最简单的变量——整数变量
-
局部变量与全局变量
- 定义与范围
- 全局变量的类型
- 存储空间
-
参数传递
- 参数类型
- 结构体和子类参数
-
变量的作用
-
变量类型转换
- 转换语法
- 示例
-
文本操作
- 文本拼接
- 追加文本
-
运算规则
-
代码规范
-
-
变量类型
-
-
转义和标点符号
- 转义
- 标点
-
运算符号
- 一般运算符号
- 浮点运算专用符号
快速入门
启动与界面设计
- 启动极语言编程,点击“初级程序”进入主界面。
- 若设计界面小窗口未显示图标,请关闭设计窗口后重新打开。
- 控件设计器可通过右键创建或拖曳鼠标绘制控件。
- 调整控件大小:按住鼠标左键拖动控件的四角或四边。
- 选中控件,使用鼠标滚轮调整大小和位置(通过左顶宽高属性)。
- 双击属性列表修改控件名称、文字、位置、尺寸等,控件编号为唯一标识符。
- 控件事件绑定:双击左键或右键单击,自定义事件名称(如按钮点击、列表双击)。
- 右键添加控件时,新控件将与前一个控件大小相同并自动对齐。
菜单设计
- 设计菜单界面,首个添加的自动设为弹出菜单(子菜单)。
- 添加子菜单项目,项目前自动空格缩进,区分菜单层次。
- 添加新子菜单时,需选中“弹出”复选框,添加后自动取消。
- 二级子菜单:在名称前加空格,选中“弹出”选项,继续添加项目。
- 菜单和快捷键可绑定事件,子菜单无编号,事件对应唯一标识编号。
窗体与对话框设计
- 窗体设计共用一个窗体消息接收系统事件,对话框按名称接收。
- 基础应用采用模式对话框,类似消息框,需关闭后才执行后续代码。
- 初级程序窗口设计自动添加控件对象全局变量,后添加的控件在前代码中不可用。
- 对话框设计不增加控件对象,窗体变量在代码中申请获取,可不用控件对象。
- 控件编号可在设计界面查看和修改,有效范围0到32767,不需编号可设为-1。
- 对话框窗体编号指定资源里的编号,与菜单资源绑定一致。
- 控件快捷键:在名称中加入&符号和大写字母(如:
打开(&O)
),Alt+字母触发。 - 窗体图片框可指定资源图标或位图,文字属性设为#资源号显示图像。
- 对话框图标框直接指定文字属性为资源号或加#号,显示图标时修改风格为图标文件。
- 编译程序默认6.0界面风格,取消“新版界面”选择使用Windows 95风格。
极语言语法
- 关键语法:
如果
、否则
、判断
、循环
(四种写法)。 -
循环
和循环于
是为迎合传统编程习惯,不推荐初学者使用。 - 程序段名称后可加小括号传递参数,无类型限制,可自由提交数值或变量指针。
- 程序段可无返回值或返回整数,返回小数需加冒号(如:
返回(:值 * 6.5)
)。 - 参数变量可指定默认值,不指定默认为0,不写参数按默认值提交。
控件内容操作
- 获取控件文字内容使用
~
符号,需申请文本变量(如:文本 内容[16];
)。 - 获取内容:
内容 ~ 文本框1;
内容 ~ 窗体;
内容 ~ 标签1;
- 写入内容:
文本框1 ~ 内容;
标签2 ~ “你好”;
窗体 ~ 内存;
- 写入内容右边的变量可为内存指针的整数变量或一段文字。
编辑快捷键
CTRL+Z | 撤销 |
---|---|
CTRL+Y | 重做 |
CTRL+C | 复制 |
CTRL+V | 粘贴 |
Delete | 删除 |
CTRL+F | 查找 |
CTRL+R | 替换 |
CTRL+P | 编译 |
CTRL+W | 关闭 |
CTRL+拖曳 | 复制文字 |
F1 | 编程帮助 |
F2 | 语法补全 |
F3 | 查找下个 |
F4 | 编辑模块 |
F5 | 水平平铺 |
F6 | 垂直平铺 |
F7 | 标点转换 |
F8 | 更新日志 |
常见问题
中文输入法问题及解决办法
问题:编译运行后,某些独占式运行的输入法会在新进程里自动开启,导致极语言编辑器的输入法关闭。
解决办法:
按CTRL+F
弹出搜索框,然后切换开启输入法。
正常输入中文后,按Esc
取消搜索,输入法将被重新激活。
注意:有些输入法会自动跟随输入框,位置会随焦点窗口改变。
鼠标悬停信息
功能:在极语言编辑器中,选中带颜色的文字可查看相关解释,比搜索更方便。
效率考虑:鼠标指向文字的提示会产生多次鼠标移动事件,效率不高。建议使用键盘选中文字和进行语法补全。
对其他语言的兼容
文本变量
易语言和VB:采用整数指针。
其他语言:string
采用整数对象,与整数有严格区分。
内存管理
这些语言使用的整数先申请约64K内存,随数据量增加自动扩充。
变长文本与字符串概念不同。
字符
vs. 字
:字符为ASCII编码(32-127),字为支持各国文字的编码。
Windows编程API处理字符串时需提交缓冲区和长度,获取文本时返回实际长度。
极语言文本为指定长度的内存缓冲区,需指定长度配合API使用。
使用C库函数注意事项:可能改变堆栈地址,导致数据异常。建议将C库函数放到程序段中调用,以保持堆栈空间稳定。
内存回收和安全机制
内存使用:主要由开发者控制。
局部变量内存:离开程序段时自动回收。
全局变量内存:关闭程序时系统自动回收。
极语言无变长文本,不自动申请临时内存。
内存回收:只要内存被使用,就不能回收。编译和运行时最多能防止内存泄漏,增加安全性。
效率考虑:运行时监视每条执行指令会影响效率。建议开发者根据需要申请文本变量长度,自行控制内存使用。
安全性与透明度:极语言让开发者全透明地管理内存,提高安全性。相比C语言,极语言规则限制少,功能实现更轻松,无需增加复杂特性。
自制中文编程环境
安装目录说明
Sec.exe:集成开发环境(IDE)
Sc.exe:编译器(可配合其他工具编辑代码进行编译)
文件类型说明
.sec
:单文件二进制源码结构
.SEC
和.极
:多文件文本结构
其他扩展名(如.txt
、.c
、.张三
、.李四
等):单文件文本源码
使用极语言开发环境保存代码
保存时需加上扩展名,保存为纯文本源码。
编译方法
- 将保存的文件拖曳到Sc.exe上。
- 运行Sc.exe,点击打开保存的源码。
- 使用命令行编译:
cmd Sc.exe 源码路径
(完整路径前后不用加双引号)。 - 自定义IDE编译:参考使用命令行的编译方法在Sc.exe后面空格加上路径即可实现编译。
变量类型
变量的定义与使用
最简单的变量——整数变量
最常用的变量类型是整数,例如定义一个名为“窗口”的整数变量。整数变量也可以作为万能的指针,在参数传递时,通常只有整数和小数这两种类型。
局部变量与全局变量
定义与范围
局部变量:在程序段内申请的变量,包括传递的参数,都是局部变量。它们的作用域限定在程序段或子类内部。
全局变量:在程序段和子类之外申请的变量是全局变量。全局变量的作用域覆盖整个程序。
全局变量的类型
全局变量可以包括以下类型:
- 字符
- 字节
- 整形(短数)
- 正数
- 整数
- 日期
- 小数
- 浮点
- 大数
- 子类
- 对象
- 自定义类型
存储空间
全局变量:使用静态数据空间存储。
局部变量:使用动态栈内存空间存储。
参数传递
任何变量在作为参数传递时,都是4字节的数值。对于大于4字节的类型(如文本、浮点和自定义类型),传递的是变量的地址,而不是值。地址通常大于0x400000。
参数类型
在大多数情况下,提交的参数都按整数类型处理。
当需要直接进行小数运算时,才需要特别指定小数类型。
因此,程序段的参数通常只有小数和整数这两种。
结构体和子类参数
结构体和子类参数前可以写上类的名称来定义参数,例如:
程序段 示例(坐标类 值)整数 横坐标 = 值.左整数 纵坐标 = 值.顶
示例: 计算函数
程序段 计算(角色类 人物)整数 伤害 = (攻击 - 人物.防御) * 1.5 - 人物.减伤
局部变量的申请与使用
变量的作用
变量的主要用途包括存储数据、传递参数、进行算法运算等。
变量类型转换
转换语法
变量类型之间可以通过等号进行相互转换,语法如下:
变量一 = 变量二
这表示将右侧的变量类型转换为左侧变量的类型。
示例
整数 数一; 小数 数二; 浮点 数三;
数一 = 数二; // 小数转整数
数二 = 数一; // 整数转小数
数一 = 数三; // 浮点转整数
数三 = 数一; // 整数转浮点
文本操作
局部文本和全局文本都可以像操作数组一样,读写其中每个字节。例如:
文本 s(16) = "abc"
s(2) = \d
也可以像其他变量一样,写入数字。例如:
s = 0 // 文本被清空
s = $31323334 // 文本开头等于4321
注意:十六进制是反转的,最后的34写入字符的第一字节,对应文字是4。使用s(1)读取出来就是52。
文本拼接
在转换文本时,可以进行拼接,例如:
文本 内容[16] = "结果:" + 数一 + " 浮点:" + 数三;
等号左边是文本时,会自动进行文本转换或拼接。
追加文本
内容 += 数一 + "\r\n"; // 向内容追加数字和换行符
运算规则
如果等号左边是整数,右边是混合运算,尽量将小数或浮点变量写在前面。
如果等号左边和右边都是整数变量,需要进行浮点运算时,等号后面要加上冒号。
数一 =: 数一 - 数二; // 整数浮点运算
数一 = 数二; // 小数或浮点转整数,无运算
代码规范
代码末尾需要加上换行符或分号,以明确区分浮点运算与整数的转换。
变量类型
|英文名称|中文名称|数值范围和|
||||
||||
||||
||||
||||
||||
||||
||||
||||
||||
||||
||||
||||
||||
||||
Bool | 布尔 | 范围:真(1),假(0)。 数组写法: 布尔 数组[16]; 二维数组: 布尔 数组[10,16]; 自动长度写法: 布尔 数组 = {真,假,真} |
char,sbyte | 字符 | 范围:-128~127。 数组写法: 字符 数组[16]; 二维数组: 字符 数组[10,16]; 自动长度写法:字符 数组={1,2,-3} |
byte,uchar | 字节 | 范围:0到256。 数组写法: 字节 数组[16]; 二维数组: 字节 数组[10, 16]; 自动长度写法: 字节 数组 = {1, 2, 3} |
short | 短数/整形 | 范围:-32768到32767。 数组写法: 短数 数组[16]; 二维数组: 整形 数组[10, 16]; 自动长度写法: 整形 数组 = {1, 2, -3} |
ushort,word | 正数 | 范围:0到65535。 数组写法: 正数 数组[16]; 二维数组: 正数 数组[10, 16]; 自动长度写法: 正数 数组 = {1, 2, 3} |
int,dword | 整数 | 范围:-2147483648到2147483647。 数组写法: 整数 数组[16]; 二维数组: 整数 数组[10, 16]; 自动长度写法: 整数 数组 = {1, 2, -3} |
single | 小数 | 范围:-3.402823E38到3.402823E38。 数组写法: 小数 数组[16]; 二维数组: 小数 数组[10, 16]; 自动长度写法: 整数 数组 = {1, 2.5, 0.3} |
string | 文本 | 申请指定长度的内存缓冲区,可用来存储文字或数据。 数组写法: 文本 数组[10,16]; 自动长度写法: 整数 内容 = "文字"; 整数 数组 = {"你好", "在吗", "朋友"} |
bytes | 字节组 | 一组固定的数据,跟文本性质相似字节组 数组[15, $20, 60, 128]; |
Double | 浮点 | 范围:-1.79769313486232E308到1.79769313486232E308。 数组写法: 浮点 数组[16]; 二维数组: 浮点 数组[10, 16]; 自动长度写法: 浮点 数组 = {1, 2.5, 0.3} |
date | 日期 | 8字节日期时间,Win32编程通常用文件时间类的两个整数结构来表示时间 |
long,ulong | 大数 | 64位整数 范围:-9223372036854775808到9223372036854775807。 数组写法: 大数 数组[16]; 二维数组: 大数 数组[10, 16]; 自动长度写法: 大数 数组={1, 2, 3} |
type | 结构 | 结构 窗口类{整数 句柄, 左边;文本 标题[64], 内容[256]} 用法: 窗口类 窗一; 窗一.标题 = "你好" 数组写法: 窗口类 窗一[10]; 窗一(0).标题 = "你好" |
datab | 数据表 | 数据表 人物表{整数 生命, 内功;字节 等级, 职业;} 用法: 重置 人物表(100); 人物表(2).等级 = 10; 数 = 人物表(0).生命 |
object | 对象 | 申请一个对象变量,结构是(类, 标识, 函数名..) 用法: 对象 内存 = 内存对象; 自定义对象:对象 未知($, $, 接口, 计数, 释放) |
scls | 子类 | 子类 类名{整数 变量1,变量2; 程序段 登陆(账号)...结束;} 用法: 整数 测试 = 新建 测试类;数组写法:整数 测试 = 新建 测试类[10] |
转义和标点符号
转义
转义符号用于特殊字符的处理,使得这些字符能够在文本内容中正确表示。例如,在极语言中,我们可以这样使用转义符号:
s = "您好\r\n世界";
这里的 \r\n
表示换行加回车。极语言的代码允许在字符串中间换行,以下是一些常用的转义符号及其含义:
-
\r
:换行符 -
\n
:回车符 -
\t
:水平制表符 -
\f
:分页符 -
\v
:垂直制表符 -
\"
:双引号 -
\0
:0字符 -
\1
:缩进符号 -
\2
:两个换行和回车符的组合
此外,可以使用 \ 将单个文字转换为编码值,例如:
查字符(str, \s);
或者写作:
查字符(内容, 's');
在极语言中,还可以使用以下方式获取编码值:
-
0#中国
:取两个汉字的编码值 -
0$abcd
:取四个英文的编码值 -
0:1.2.3.4
:支持IP段、颜色值、字节高低位等转换为整数值
标点
标点符号在代码中主要用于区分文字、定义代码范围或行为性质等。虽然这些符号不直接生成执行指令,但它们对于规范代码结构和改变执行指令的生成具有重要意义。
符号 | 类型 | 中文释义和示例 |
---|---|---|
@ | 多用途 | 1. 标记 2. 取内存地址 3. 取已知内存偏移地址 |
|| | 多条件判断 | 或 |
&& | 多条件判断 | 且 |
\undefinedC7A"`,把十六进制字符转换成二进制数据 | ||
` | 宽字符文本 | "`文字内容" ,ANSI转成宽字符文本 |
. | 指针/连接符 | 读写指针偏移,也可在名称中使用 |
_ | 指针/连接符 | 读写指针偏移,也可在名称中使用 |
"" | 文字内容 | 文字内容前后用双引号 |
$ | 声明文本 | 变量或函数后使用,代表是文本数据 |
: | 标记 | 现在已取消冒号标记,请改用中文标记 开头 跳到 开头 |
: | 转成小数运算 | 变量或函数前使用 |
: | 返回小数值 | 返回(:4.5) 返回(:结果) |
# | 表示浮点 | 浮点 值 = 45.63#; |
\ | 取文字编码 | 取单个文字(包括中文)的编码值 |
' | 注释符号 | 符号后面一行内容为注释 |
// | 注释符号 | 符号后面一行内容为注释 |
/* */ | 多行注释 | /*开始到*/之间的内容为注释 |
\undefinedD0A` | ||
0x | 十六进制 | 如 数值 = 0x0D0A |
0# | 取文字编码 | 0#中国 取两个汉字的编码值 |
0$ | 取文字编码 | 0$abcd 取四个英文的编码值 |
0@ | 取日期数值 | 0@2019-4-5 取日期的整数型数值 |
0: | 取字段数值 | ip = 0:192.168.1.1 颜色 = 0:255.64.128 键值 = 0:70,2 即CTRL+F |
( ) | 小括号 | 如果(左 = 右); 相加(数, 值); 整数 组(10); 组(0) = 15; 数 = 组(1); |
[ ] | 数组或文本长度 | 文本 内容[16]; 时间类 时间[5]; 数 = 内容[2] |
{ } | 代码片段 | 用于条件判断或循环 |
运算符号
变量自加、自乘等,数 = 数 + 8
,数 = 数 * 10
也可以用+=
、-=
、*=
、/=
、|=
、&=
、%=
、^=
等等
也可以用更简单的a + 2
、a - 3
、a * b + 3
、a / 10
、a | b
、b & a
,即运算符号后面的等号可以不写。
一般运算符号
|符号|中文|释义和示例|
||||
||||
||||
+ | 加 | 数值相加或者增加文字(数字变量自动转换为文本)。 中文写法: 数 加 值 ,内容 加 “文字” |
- | 减 | 数值相减或者增加文字(数字变量自动转换为十六进制文本)。 中文写法: 数 减 值 ,内容 减 数 |
* | 乘 | 数值相乘 中文写法: 数 乘 值 |
/ | 除 | 除法运算 中文写法: 数 除 值 |
| | 或 | 或运算。两个数值的比特位包含有1,则结果位就为1,否则为0。 中文写法: 数 或 值 |
^ | 异 | 异或运算。两个数值的比特位不相同,则结果位就为1,否则为0。 中文写法: 数 异 值 |
& | 与 | 运算表达式中 与运算:数 与 值 单独变量或函数前 取指针地址; 变量或数组后 取四字节内存值; 检索语句括号后 获取地址; 循环数组的数据变量后 每次读写四字节; |
% | 余 | 取两个数相除后的余数:数 余 值 ,也可以在除法后单独使用:数 = 余 ;在变量或数组后面是取两字节内存值: 数组(1)% 。 |
! | 非 | 数值为0则为1,数值不是0则为0 中文写法: 非 数 |
~ | 反 | ~数,对每个二进制位进行反相,0变1,1变0 中文写法: 反 数 |
= | 转 | 右边变量或表达式的结果值,根据左边变量类型进行转换,然后保存到左边变量地址 |
++ | 加一 | 数++;变量数增加1 中文写法: 数 加一 |
-- | 减一 | 数--;变量数减少1 中文写法: 数 减一 |
= | 等于 | 如果(数 = 值) ,比较两个变量数值是否相等。中文写法: 如果(数 等于 值) |
!= <> | 不等于 | 数 != 值 ,比较判断数不等于值,也可以写作:数<>值 中文写法: 如果(数 不等于 值) |
< | 小于 | 数 < 值 ,左边数小于右边值中文写法: 数 小于 值 |
> | 大于 | 数 > 值 ,左边数大于右边值中文写法: 数 大于 值 |
>= | 不小于 | 数 >= 值 左边数不小于右边值,即大于或等于中文写法: 数 不小于 值 |
<= | 不大于 | 数 <= 值 ,左边数不大于右边值,即小于或等于中文写法: 数 不大于 值 |
-> | 写入 | 根据左边变量长度,向右边变量或表达式的地址处写入数据(字节字符1字节,整形短数正数2字节,小数整数4字节:数 写入 值+10 |
<- | 读取 | 根据左边变量长度,从右边变量或表达式的地址处读取数据(字节字符1字节,整形短数正数2字节,小数整数4字节。 |
>> | 右移 | 数 >> 值 ,移位运算(支持小数)中文写法: 数 右移 值 |
<< | 左移 | 数 << 值 ,移位运算(支持小数)中文写法: 数 左移 值 |
~ | 字 | 内容 ~ 文本框1 ,读写控件内容。左边为文本变量读取右边控件; 左边为控件对象是把右边内容写入控件。详见控件内容操作。 |
? | 存 | 取上次赋值的结果,即一号寄存器的数值 |
?? | 纳秒 | 取纳秒计数器的低32位结果,高32位再用%获取。数 = 纳秒 值 = 余 |
浮点运算专用符号
表达式的小括号之后使用,用法:(a+b)余弦
;(c)正弦
;(a * a + b * b)根
;(数)平方根
;(n)绝对值
;
中文 | 简写 | 释义 |
---|---|---|
绝对值 | 绝 | 变量或表达式取绝对值(含整数);(数 - 值)绝对值 |
余弦 | 余 | 变量或表达式取余弦;(数 - 值)余弦 |
正弦 | 正 | 变量或表达式取正弦;(数 - 值)正弦 |
平方根 | 根 | 变量或表达式取平方根;(数 - 值)平方根 |
正切 | 切 | 变量或表达式取正切;(数 - 值)正切 |
反正切 | 反 | 变量或表达式取反正切;(数 - 值)反正切 |