aardio教程一) 基础语法-下

2024-03-17 23:52
文章标签 基础 教程 语法 aardio

本文主要是介绍aardio教程一) 基础语法-下,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

条件判断语句

使用ifelseifelse来对变量或表达式进行判断

io.open() //打开控制台var a=1if(a==1){io.print("if")
}
elseif(a==11){io.print("elseif")
}
else{io.print("else")
}

也可以使用select对变量或表达式进行判断,也就是JavaScript中的switch语句,有一点不同的是,无需每个case都写一个break。

io.open() //打开控制台var a = 1;select( a ) {case 1 { //判断 1===a 是否为真io.print("a==1")//其他代码}case 1,9,10 { //判断 a 是否其中的一个io.print("a是1,9,10其中之一")}case 10;20 { //判断 ( 10<=a and a <=20 ) 是否为真io.print("a在10到20的范围")}case "a"{ // 也可以判断字符串相等io.print("a等于'a'")}case !=0{ //判断 a是否不等于0,这是自已指定关系运算符的示例io.print("a不等于0")}else{ //所有条件不符时执行else语句块io.print("a是其他值(0)")}
}
循环语句

aardio中的循环有whilefordo whilefor in,而while又有两种语法

第一种(和其他语言语法一样):

while(表达式){}

第二种(和其他语言for语法类似,不一样的是条件判断语句在第三个语句里):

while( var 初始化循环变量列表;判断条件前执行语句;条件判断语句 ) { //需要循环执行的语句
}

do while和其他语言是一样的

do{ //需要循环执行的语句
} while( 条件判断语句 )

for循环则有点像Python中的for in range

for( 计数器变量= 初始数值; 最大数值; 步进数值) { //步进可以省略,默认值为1。//需要循环执行的语句
}

举个例子:

io.open();for( i=1;10;2 ){ //计数器i从1循环到10,每次递增2io.print(i)
}
//支持修改计数器变量
for( i=1;10;1 )begini++;//如果你将i赋值为非数字,在下次循环以前将会被自动恢复为计数器值
end;//递减计数器
for( i=1;-10;-1 )beginio.print(i)
end;execute("pause") //按任意键继续
io.close();//关闭控制台
循环中断语句

breakcontinue两个语句,语法和其他语言中的基本一样。

aardio中还增加了一个标号,来指定在嵌套循环中中断哪一层循环,比如break 1表示中断当前循环,break 2表示中断上一层循环,你也可以在循环开始时指定一个标号(例子如下)。continue也是类似语法

这个额外的语法只需要做了解即可,实际我也没用到过,可能是写其他语言已经习惯了,也会避免写多层循环。

io.open(); //打开控制台 while( true ){ 循环体2: //可以在循环体的开始指定一个标号 io.print("循环体2开始" );while( true )begin io.print("循环体1开始" );break 2;//中断上层循环break 循环体2; //这句的作用与上面的break作用是一样的io.print("循环体1结束" );end; io.print("循环体2结束" );
}execute("pause") //按任意键继续
io.close();//关闭控制台
异常捕获

try catch,一般很少会用到,要想程序够健壮,需要做很多次判断。如果用try来捕获所有语句,虽然程序不报错了,但还是没有正常执行。

有个特殊的情况需要使用,有时候用一些多线程库的时候,即使某个线程报错了,程序确没有任何提示,控制台也不会打印异常,这个时候就需要用try来看看是线程里的哪个语句出错了

io.open(); //打开控制台窗口try{b="aaaaaaaaaaaa" *2io.print("错误会中断try语句块")
}
catch(e){ //catch部分可以省略io.print( "错误信息:",e )//在这里可以调用debug库//在栈释放以前调用错误处理//所以可以调用debug库中的函数收集错误相关的信息
}io.print("错误不会中断程序")

函数

定义函数
function f1(a, b){io.print(a, b);
}
// 将一个匿名函数赋值给了一个变量
f2 = function(a, b){io.print(a, b);
}
成员函数

成员函数和普通函数基本一样,只是可以通过owner访问成员变量

tab = {};
tab.函数名字 = function( 形参列表 ) {//函数内部内码
}tab = {x=1};
function tab.函数名字( 形参列表 ) {//函数内部内码io.print(owner.x);
}
可变参数
function f1(...){var kwargs = {...};console.dump(kwargs)
}
f1(1, 2, 3);
f1(1, 2);
关键词参数

aardio并不支持关键词参数,只能通过传整个表当参数

function f1(kwargs){console.dump(kwargs);
}
f1({a=1;b="2"});
// 大括号也可以省略
f1(a=1;b="2");
返回值

函数可以返回多个值,接收的时候可以定义多个变量来接收,例如:var a,b = f();

当函数有很多个返回值时,你这个时候又只需要其中几个,则可以使用rget来获取区间内的返回值 例如:

//打开控制台
io.open()//定义一个函数 
func = function(){ return 1,2,3; //函数有多个返回值 
}var re,re2 = rget(2,func() ) //从第二个参数开始返回, re==2,re2==3
io.print( re,re2 ) var re,re2 = rget(-1,func() ) //从倒数第一个参数开始返回, re==3,re2==null
io.print( re,re2 ) 
lambda(匿名函数)

因为aardio本身就支持在定义函数时不指定函数名,例如: function(){}。这样定义匿名函数更方便和理解,所以lambda实际并不需要使用

变量作用域

Python中定义一个变量后可以在函数的任意一个位置使用这个变量

for i in range(10):a = 1
print(a)

而aardio中使用var定义的局部变量作用域只限于当前语句块。

io.open()
while(true){var a = 1;break;
}
// 这个时候a就已经是null了
console.log(a)
namespace(名字空间)

namespace和Python模块的含义基本一样, 它其实就是个盒子,盒子里可以放你想放的函数或者变量,访问时通过名称+点+变量名来访问, 例如:

namespace module{a = 1;
}
io.print(module.a)

global是默认的全局名字空间,aardio代码文件加载时,默认都运行在global名字空间。self表示当前名字空间

导入名字空间(import)

和Python的导入库也基本类似,aardio的查找路径优先级:

  • 内核库,aardio内核提供的库,如string、raw等
  • 标准库,位于aardio根目录下的lib目录下,库路径与名字空间路径完全一致
  • 用户库,当前工程下的lib目录
  • 扩展库, 如果是开发环境(用编辑器启动没有编译成exe),还会查找扩展库列表。如果扩展库有的话,会提示你是否安装

这篇关于aardio教程一) 基础语法-下的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820586

相关文章

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

JAVA集成本地部署的DeepSeek的图文教程

《JAVA集成本地部署的DeepSeek的图文教程》本文主要介绍了JAVA集成本地部署的DeepSeek的图文教程,包含配置环境变量及下载DeepSeek-R1模型并启动,具有一定的参考价值,感兴趣的... 目录一、下载部署DeepSeek1.下载ollama2.下载DeepSeek-R1模型并启动 二、J

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

MySQL zip安装包配置教程

《MySQLzip安装包配置教程》这篇文章详细介绍了如何使用zip安装包在Windows11上安装MySQL8.0,包括下载、解压、配置环境变量、初始化数据库、安装服务以及更改密码等步骤,感兴趣的朋... 目录mysql zip安装包配置教程1、下载zip安装包:2、安装2.1 解压zip包到安装目录2.2

Java使用Tesseract-OCR实战教程

《Java使用Tesseract-OCR实战教程》本文介绍了如何在Java中使用Tesseract-OCR进行文本提取,包括Tesseract-OCR的安装、中文训练库的配置、依赖库的引入以及具体的代... 目录Java使用Tesseract-OCRTesseract-OCR安装配置中文训练库引入依赖代码实

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创