本章列出了构成twinBASIC语言核心的全局语句和过程。
分类列表
编译器控制
- Option - 配置编译器选项
- #If ... Then ... Else - 启用或禁用所包含代码的编译
- #Const - 定义模块私有的条件编译常量
声明和定义
- Class, Module - 定义类或模块
- Interface, CoClass - (twinBASIC) 使用twinBASIC语法定义COM接口或组件类
- Sub - 定义过程
- Function - 定义函数
- Property - 定义属性
- ParamArray - 将过程的最后一个参数声明为可变参数列表
- Enum - 定义具有关联常量的枚举类型
- Type - 声明用户自定义数据类型(UDT)/结构体
- Declare - 声明外部/库过程或函数
- Event - 声明事件
- Implements - 指定类实现给定接口
- End - 终止执行,结束Function、Sub、Property或Enum定义,结束Type声明,结束Class或Module,结束If、Select或With块
流程控制
语句:
- Call - 调用过程或函数
- Do ... Loop, For ... Next, For Each ... Next, While ... Wend - 循环
- If ... Then ... Else - 条件执行代码
- Continue - 跳到循环的下一次迭代
- Exit - 退出循环、过程、函数或属性
- Return - 从GoSub子程序返回,或(twinBASIC)从Function或Property Get返回值并退出
- Select Case - 根据表达式选择执行代码块
- With - 将变量或表达式引入作用域
- Goto, GoSub ... Return - 将执行转移到另一位置
- On ... GoTo, On ... GoSub - 根据表达式选择将执行转移到指定位置
- Stop - 中断执行
内联条件函数 --- 上述If...Then...Else和Select Case语句在表达式级别的替代方案:
- If - 计算表达式并返回两个值之一;仅计算所选分支(twinBASIC新增)
- IIf - 计算表达式并返回两个值之一;两个分支始终都会被计算
- Choose - 根据1起始索引从列表中返回一个值
- Switch - 在(条件, 值)对列表中返回第一个True条件对应的值
另见:
错误处理
语句:
过程:
- Err - 返回描述当前运行时错误状态的ErrObject
- Erl - 返回最近运行时错误发生的行号
- Error$, Error 函数 - 返回与给定错误号对应的错误消息
- CVErr - 将数值表达式包装为Error子类型的Variant
- SetThreadGlobalErrorTrap - 注册一个回调,当未处理的运行时错误逃逸调用线程上的活动错误处理链时触发
变量声明
语句:
- Dim - 声明类型化标量或数组变量
- Const - 声明常量
- Public - 在类或模块中声明公共变量
- Private - 在类或模块中声明私有变量
- Protected - (twinBASIC) 声明可在类及其派生类中访问的类成员
- Static - 声明静态持续期的变量
变量赋值和修改
语句:
运算符:
数组
语句:
过程:
- LBound - 数组某一维的最小有效下标
- UBound - 数组某一维的最大有效下标
- IsArray - 返回变量是否为数组
- IsArrayInitialized - 返回数组是否已分配维度
另见:
- Dim - 分配标量或数组变量
- Array, Filter, Join, Split - 数组辅助函数
- vbaAryMove, vbaRefVarAry - 底层Variant数组辅助函数(参见内存和指针)
文件I/O
语句:
- Open, Close - 打开/关闭文件进行I/O操作
- Get, Put - 从打开的随机访问文件读取/写入数据
- Line Input, Print - 从/向打开的文本文件读取/写入一行
- Input, Write - 从/向打开的顺序访问文件读取/写入数据
- Seek - 更改打开文件中的当前访问位置
- Lock, Unlock - 锁定/解锁打开文件中的记录范围
过程:
- Reset - 关闭所有打开的磁盘文件
- Width - 设置打印时的行长度限制
- Input, Input$ - 从顺序文件读取固定数量的字符
- InputB, InputB$ - 从顺序文件读取固定数量的字节
- ChDir, ChDrive - 更改当前工作目录和磁盘驱动器
- MkDir, RmDir - 创建/删除磁盘上的目录
- Name - 重命名磁盘上的文件或目录
- SetAttr - 设置磁盘文件的属性
- FileCopy - 复制磁盘上的文件
- Kill - 从磁盘删除文件
- SavePicture - 将
Picture或Image写入磁盘文件 - MacID - 转换4字符Mac文件类型代码(旧式)
状态管理
过程:
- Load, Unload - 将窗体或控件加载/卸载到内存
- GetSetting, SaveSetting - 从/向系统注册表检索/存储字符串值
- GetAllSettings - 检索应用程序注册表项中某个节的所有键值对
- DeleteSetting - 从系统注册表删除值
事件
语句:
- RaiseEvent - 引发可由事件处理器处理的事件
过程:
- RaiseEventByName - 按名称在对象上引发事件,以Variant数组形式接收参数
- RaiseEventByName2 - 按名称在对象上引发事件,以可变长度参数列表接收参数
- RuntimeCreateGetMessageHook - 创建IGetMessageHook用于过滤发往窗口(及其后代,可选)的Windows消息
另见
- Event - 声明事件
- IGetMessageHook 接口 - 订阅Windows消息类型的回调,然后开始/停止消息传送
用户对话框
过程:
进程控制
过程:
- Shell - 异步运行另一个程序并返回其任务ID
- AppActivate - 将焦点切换到命名窗口或激活该窗口
- SendKeys - 向活动窗口发送按键
- DoEvents - 让出控制权到消息循环,以便处理挂起的事件
COM和自动化
过程:
- CreateObject - 创建COM/Automation对象的新实例
- GetObject - 获取从文件加载或正在运行的Automation对象的引用
- CallByName - 按名称动态调用对象的方法或属性
- CallByDispId - 按 IDispatch 调度ID动态调用对象的方法或属性(twinBASIC新增)
- CreateGUID - 生成新的GUID并以注册表格式字符串返回
- vbaCastObj - 将对象重新解释为另一个COM接口(类型化的
QueryInterface) - vbaObjSet, vbaObjSetAddref - 将原始对象指针赋值给Object变量,可选是否增加引用计数
- vbaObjAddref - 递增给定地址处对象的COM引用计数
另见:
命令行和环境
过程:
- Command$, Command - 返回传递给程序的命令行参数
- Environ$, Environ - 返回进程环境变量的值
颜色
过程:
- RGB - 从红、绿、蓝分量构建RGB颜色值
- RGBA - 从红、绿、蓝和Alpha分量构建RGBA颜色值
- RGB_R, RGB_G, RGB_B, RGBA_A - 提取各个颜色分量
- QBColor - 返回QuickBASIC颜色索引对应的RGB颜色值
- TranslateColor - 将OLE颜色值转换为普通RGB颜色值
数学
过程:
- Atn, Cos, Sin, Tan - 三角函数
- Sqr - 求平方根
- Exp - 计算以$e$为底的指数
- Log - 计算数的自然(以$e$为底)对数
- Sgn - 返回数的符号
- Abs - 返回数的绝对值
- Round - 将数舍入到指定小数位数
- Rnd - 生成[0.0, 1.0)范围内的随机数
- Randomize - 为随机数生成器设置种子
- Partition - 返回字符串标签,标识值落入哪个等宽数值范围(直方图式分桶)
另见:
类型转换
将表达式强制转换为特定类型的过程:
- CBool, CByte, CCur, CDbl, CDec, CInt, CLng, CLngLng, CLngPtr, CSng - 强制转换为特定数值类型
- CStr - 强制转换为String(识别区域设置;优于Str)
- CVar - 强制转换为Variant
- CDate - 强制转换为Date;CVDate返回Date子类型的Variant(旧式)
- CType - 具有调用方提供目标类型的显式强制转换运算符(twinBASIC扩展)
在数值和字符串之间转换的过程:
- Hex$, Hex - 数值的十六进制字符串表示
- Oct$, Oct - 数值的八进制字符串表示
- Str$, Str - 数值的十进制字符串表示
- Val - 将字符串解析为Double
- ValDec - 将字符串解析为Decimal
提取数的整数部分的过程:
其他:
- Nz - 用默认值替换Null
另见:
- Format$, Format - 识别区域设置的数值格式化
- FormatNumber, FormatPercent, FormatCurrency, FormatDateTime - 类型化格式化函数
- CVErr, Error$, Error 函数 - 错误辅助函数(参见错误处理)
类型检查
命名或标识变量子类型的过程:
测试值状态或子类型的过程:
- IsDate - 返回表达式是否可作为日期计算
- IsEmpty - 返回Variant是否未初始化
- IsError - 返回表达式是否为错误子类型
- IsMissing - 返回可选参数是否已提供
- IsNull - 返回变量是否包含Null值
- IsNumeric - 返回表达式是否可作为数值计算
- IsObject - 返回变量是否引用对象
另见:
字符串处理
修改字符串的语句:
检查字符串属性的过程:
- Len, LenB - 字符串的长度
- Asc, AscB, AscW - 返回字符串中第一个字母的字符代码
- StrComp - 比较两个字符串
- InStr$, InStrB, InStr - 在字符串中查找给定子字符串的位置
创建字符串的过程:
- Chr$, Chr, ChrB$, ChrB, ChrW$, ChrW - 返回具有给定代码的字符
- Space$, Space - 返回由空格组成的字符串
- String$, String - 返回由指定字符组成的字符串
返回修改后字符串的过程:
- Left$, Left, LeftB$, LeftB - 提取字符串的左侧子串
- Mid$, Mid, MidB$, MidB - 提取字符串的子串
- Right$, Right, RightB$, RightB - 提取字符串的右侧子串
- LTrim$, LTrim, RTrim$, RTrim - 删除字符串的前导/尾随空格
- Trim$, Trim - 删除字符串的前导和尾随空格
- StrReverse - 反转字符串中的字符顺序
- LCase$, LCase, UCase$, UCase - 将字符串转换为大写或小写
- StrConv - 将字符串转换为指定格式
- Join - 使用给定分隔符连接字符串数组
- Split - 将字符串拆分为字符串数组
- Replace - 替换字符串中的子串
- Filter - 根据条件将字符串数组过滤为子集
- InStrRev - 从末尾搜索,返回子字符串在字符串中的位置
- Format$, Format - 以特定方式格式化数值表达式
- FormatNumber - 将表达式格式化为数值字符串
- FormatPercent - 将表达式格式化为百分比字符串
在数值和字符串之间转换的过程:
- CStr - 将值强制转换为String(识别区域设置)
- Hex$, Hex - 数值的十六进制字符串表示
- Oct$, Oct - 数值的八进制字符串表示
- Str$, Str - 数值的十进制字符串表示
- Val - 将字符串解析为Double
- ValDec - 将字符串解析为Decimal
另见:
- FormatCurrency - 将表达式格式化为货币字符串
- FormatDateTime - 将表达式格式化为日期/时间字符串
日期和时间
过程:
- Date, Time - 设置当前日期和时间
- FormatDateTime - 将表达式格式化为日期/时间字符串
- MonthName - 返回指定月份的名称
- WeekdayName - 返回指定星期几的名称
另见:
自省
过程:
- CurrentProjectName - 返回当前项目的名称
- CurrentComponentName - 返回当前组件(模块或类)的名称
- CurrentComponentCLSID - 返回当前类的类ID(CLSID)
- CurrentProcedureName - 返回调用该函数所在的过程名称
- CurrentSourceFile - 返回当前源文件的完整路径
- ProcessorArchitecture - 返回运行应用程序的处理器架构
- CompilerVersion - 返回twinBASIC编译器版本号
- GetDeclaredTypeProgId, GetDeclaredTypeClsid, GetDeclaredTypeIid, GetDeclaredTypeEventIid - 返回已声明类型的COM ProgID/CLSID/IID/事件IID,在编译时解析
- GetDeclaredMinEnumValue, GetDeclaredMaxEnumValue - 返回已声明枚举的最小/最大值,在编译时解析
另见:
- IMEStatus - 当前输入法编辑器模式(仅限东亚Windows)
内存和指针
过程:
- ObjPtr - 返回对象的COM标识地址
- StrPtr - 返回String底层缓冲区的地址
- VarPtr - 返回变量的地址
- AllocMem, FreeMem - 分配/释放本机内存块
- GetMem1, GetMem2, GetMem4, GetMem8, GetMemPtr - 从内存地址读取N字节到类型化变量
- PutMem1, PutMem2, PutMem4, PutMem8, PutMemPtr - 将N字节的类型化值写入内存地址
- vbaCopyBytes, vbaCopyBytesZero - 复制字节块;Zero形式在复制后清除源
另见:
- vbaAryMove, vbaRefVarAry - 底层Variant数组辅助函数(参见数组)
- vbaObjSet, vbaObjSetAddref, vbaObjAddref - 对象指针赋值和引用计数(参见COM和自动化)
线程和原子操作
过程:
- InterlockedExchangePointer - 原子交换指针大小的值
- InterlockedCompareExchangePointer - 原子比较并交换指针大小的值
- InterlockedCompareExchange32, InterlockedCompareExchange64 - 原子32位/64位比较并交换
- InterlockedIncrement32, InterlockedDecrement32 - 原子32位递增/递减
另见:
- SetThreadGlobalErrorTrap - 每线程错误陷阱(参见错误处理)
内联汇编和代码生成
过程:
- Emit - 将自定义Byte值注入到所在过程的代码生成中
- EmitAny - 将自定义类型化值注入到所在过程的代码生成中(大小从每个值的数据类型推断)
- StackOffset - 返回变量的栈帧偏移量,在编译时解析
- StackArgsSize - 返回所在过程的栈传参数总大小
- UnprotectedAccess - 返回绕过私有成员访问检查的对象引用
另见:
- 直接汇编插入 -
Naked修饰符和示例
表达式求值
过程:
- Eval - 编译并求值以字符串形式提供的twinBASIC表达式
另见:
- ExpressionService 模块 - 底层引擎,当需要对绑定器或已编译表达式复用进行更多控制时使用
财务
过程:
- DDB - 使用双倍余额递减法计算资产折旧
- FV - 具有恒定存款和利率的投资的未来值
- Pmt - 具有恒定付款和利率的贷款的每期付款额
- IPmt - 具有恒定付款和利率的贷款的每期利息付款额
- PPmt - 具有恒定付款和利率的贷款的每期本金付款额
- SYD - 年数总和法计算资产折旧
- SLN - 在一个期间内的直线折旧
- PV - 投资的现值
- IRR - 一系列现金流的内部收益率
- MIRR - 一系列现金流的修正内部收益率
- Rate - 年金的每期利率
- NPV - 投资的净现值
- NPer - 具有恒定存款和利率的投资的期数
- FormatCurrency - 将表达式格式化为货币字符串
单元测试
Assert包的模块:
- Exact - 最严格的比较语义;数据类型必须匹配且不进行隐式转换
- Strict - 区分大小写的字符串比较,否则使用标准twinBASIC相等比较
- Permissive - 不区分大小写的字符串比较,否则使用标准twinBASIC相等比较
每个模块公开相同的十五个断言:Succeed、Fail、Inconclusive、AreEqual / AreNotEqual、AreSame / AreNotSame、IsTrue / IsFalse、IsNothing / IsNotNothing、IsNull / IsNotNull、SequenceEquals / NotSequenceEquals。所有断言均标记[DebugOnly(True)],在发布版本中不编译。
已弃用
语句: