快速入门

一、语句、hello world程序

语句是LAScript中的最小单元,即一句LAScript代码,用分号";"、空格、或者换行符表示一个语句的结束。

下面的脚本只有一个LAScript语句,

win.messageBox("hello world!");--这是一个语句,

win.messageBox是个函数(作用是弹出对话框),"hello world!"是字符串参数,分号";"表示一个语句结束。
字符串放在引号里,不在引号里的才是脚本代码, --双横线后面是注释语句(编译时被忽略)。

下面我们再看一个示例(什么是变量)

str = "hello world!"; --我们声明了一个变量str来放 "hello world!"
win.messageBox(str);-- 变量也可以代替实际的数据

再看一个示例(使用赋值语句改变变量的值)

str = "hello"; --我们声明了一个变量str来放 "hello"
str2 = " world!"; --我们声明了一个变量str2来放 " world!"
str = str..str2; --我们用..运算符连接str与str2,并重新赋值给变量str,变量的值是可以改变的
win.messageBox(str);-- 变量也可以代替实际的数据

下面我们来通过一个较完整的hello world示例介绍脚本编写步骤。

1、切换到“源码编辑”界面,在工具栏点击“新建源代码”按钮(工具栏第一个按钮)。
2、在编辑器中输入脚本代码。

编辑器支持代码自动完成、代码智能提示。在您输入代码时会自动在「代码提示窗口」显示相关代码。

按键盘上的上下方向键移动光标、或者在「代码提示窗口」上移动鼠标可以选定需要的代码并查看相关说明。
用鼠标拖动「代码提示窗口」上的滚动条可以快速翻页,按键盘PageDown、PageUP可以快速翻页,按Home键滚动到第一页,按End键滚动到最后一页。
直接按回车键、或者鼠标双击选定的代码输入到编辑器中。
按ESC键、或者用鼠标左键在「代码提示窗口」以外的部份单击关闭自动完成窗口,不输入选定的代码。
Ctrl + j 快捷键可以强制显示「代码提示窗口」。


3、输入下面的LAScript代码以后按F5快捷键运行脚本。

win.consoleOpen(); --打开一个控制台窗口
 
print("hello world!"); -->在控制台窗口显示hello world!
 
delay(3000); --延时3秒(3000毫秒)
 
win.consoleClose(); --关闭控制台窗口

 我们解释一下上面hello world程序中的语句。

win是一个名字空间名字空间包含一组成员变量、成员函数。
就好象人有姓名一样,名字空间就好比人的姓表示一个家族,而变量名就好象人的名字表示具体的对象。

win.consoleOpen();是win名字空间下的一个函数,其作用是打开一个控制台窗口,调用函数函数名后面必须有一对括号,括号可以填写参数,这个函数没有参数,所以括号里没有内容。

print也是一个函数,但是在默认的全局名字空间下,全局名字空间即_G名字空间,所以print也可以写为_G.print,print函数可以有任意多个参数,这个函数的作用是将所有的参数转换为字符串,并输出到控制台窗口。

"hello world!" 是一个字符串,字符串放在双引号中。

delay也是全局名字空间下的一个函数,作用是延时,delay有一个参数(数字值),指定延时的毫秒值(千分这一秒)。

--符号为两个短横线,表示后面直到这一行文本结束是注释语句,模拟精灵在编译LAScript代码时会忽略注释语句(即不会执行注释语句)。

二、语句块(chunk)、局部变量

语句块(chunk):由一组LAScript代码组成。是LAScript中的最小单元,语句块(chunk) 内部可以包含语句块。

 一个LAS文件是一个大的语句块,fap文件中的脚本区块也是一个语句块。一个函数是一个语句块。do ...... end; 指定一个语句块。do表示语句块开始,end;表示语句块的结束。

变量:在脚本运行过程中,用来存储数据值并且其值能被改变的量称为变量。
变量的名称用字母、数字、中文字符、下划线等组成的标识符来表示。

局部变量:语句块(chunk) 内部可以用local语句声明的变量仅在语句块内部有效,称为局部变量。
使用局部变量有两个好处 1.避免命名冲突 2.访问局部变量的速度比全局变量更快.

示例:

win.consoleOpen();
 
local a = "123"; --声明一个变量a,a是一个合乎语法的标识符,存储的值为字符串"123",您可以改变a的值。
 
do --语句块开始
    local a = ""hello"--local语句声明的局部变量a仅在语句块内部有效
    a ="hello world!" --变量的值是可以改变的
    print(a);-->显示hello world
end; --语句块结束
 
print(a); -->显示123 


 上面的例子中没有调用win.consoleClose();关闭控制台窗口,那么在脚本运行结束后控制台窗口并不关闭。这时候,我们点击“全部停止”按钮或者“全部停止热键”即可关闭控制台窗口。

三、全局变量

LAScript中的全局变量不需要声明(局部变量则必须用local语句声明),
给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil(空值的意思)

win.consoleOpen();
 
print(str)  --> 显示nil
 
str = "一个字符串"
print(str)  --> 显示一个字符串
 
 
--将变量赋值为nil空值可以删除一个变量
str = nil
print(str)   --> 显示nil 
 LAScript允许全局变量与局部变量同名,在全局变量与当前作用域内局部变量同名时,LAScript优先使用局部变量。

例如:

str = "abc";--创建一个全局变量

do --用一个新的语句块创建一个新的作用域
    local str = str; --这样创建了一个局部变量,改变str不会改变全局变量,并且访问速度更快。
    str = "123";
end;

四、定义函数、使用判断语句

函数是封装了一组LAScript代语句,函数是拥有函数名的一段子程序、函数名同时也是一个变量名,在定义了函数以后通过函数名可以调用函数。函数定义以 function() 开始 end;语句结束。在括号中可以定义参数,参数作为函数内部的局部变量。

下面我们自定义一个msg函数。函数的功能是执行一个判断并弹出一个对话框。

function msg(str) -- function语句定义一个函数
    if(str)then --if语句判断str是不是一个有效的参数
        win.messageBox(str); --如果str是一个有效的参数,弹出一个对话框显示str
    else --否则
        error("msg函数至少需要一个参数"); --抛出一个错误信息
    end;       
end;
 
msg("hello world!");--调用函数
 
msg(); --这句代码会导致错


在函数中我们使用了一个简单的判断语句,判断语句以if 开始 end;语句表示结束。

第一次调用 msg("hello world!");出现一个对话框显示hello world!
第二次调用 msg();导致错误,并弹出错误提示

 

五、LAScript代码书写规范

  1. 变量命名

    1. LAScript区分大小写。
    2. 变量名可以使用中文 或者下划线、字母、下划线、数字。
    3. 变量名不能以数字作为第一个字符。包含中文的变量名必须以中文作为每一个字符,中文变量名不能包含数字。

       local 256var = 1; --错误的变量名,不能用数字作为第一个字符
          local a变量名 = 2; --错误的变量名,中文变量必须用中文作为第一个字符
    4. 变量名以小写为主,第一个字符通常为小写,如果变量名由多个单词组成,
      除第一个单词以外的其他单词第一个字符大写。
       local strMsg = "hello world"; --正确
    5. 全局变量用_下划线开始,并以小写为主。
       如果要声明全局变量,应在前面加上下划线以示区别,例如:
      a =10 ; --不被推荐的声明全局变量方法
      _a =10 ; --推荐的声明全局变量的写法,应在前面加上下划

    6. 系统变量以下划线开始并大写,不要改变系统变量的值。
       以下划线开始并大写的变量表示这是系统保留的变量名(系统变量),在运行时不应当被修改。例如_LASDIR 就是这样一个系统变量(存储脚本所在的目录路径),没有任何理由去改变 _LASDIR 的值,虽然你可以这么做。
    7. 所有变量名尽可能的用简洁清晰的命名,
      简洁指的是可以缩写的单词使用最短的缩写,清晰指的是可以考虑用多个单词清晰的表达变量的意义。
    8. 优先使用标准变量名
      在没有变量名冲突的情况下,应优先选用标准变量名。
      模块对象,标准变量名使用 m,m2等
      image对象, 标准变量名使用 img,img2等
      color对象,标准变量名使用 cl,cl2等
      web对象,标准变量名使用 wb,wb2等
      循环、迭代、索引等标准变量名使用 i,j等
    9. 应该尽可能的使用局部变量(使用local语句声明),
      这样做有两个好处:1.避免命名冲突 2.访问局部变量的速度比全局变量更快.


      如:
      a = 10; --不被推荐的写法
      local a = 10 --推荐的写法





  2. 以下字符为LAScript的保留关键字,不能当作变量名。
    and       break     do       else      elseif
    end       false     for      function  if
    in        local     nil      not       or
    repeat    return    then     true      until
    while     namespace import


  3. 正确的代码分行

    在LAScript中可以用空格、分号、换行来表示一句代码的结束。
    不要在一行写太长的代码。适当的使用换行符号(分号; 可以忽略)
    LAScript中,不允许连续的写两个分号,如";;"会导致错误
     LAScript中,不允许连续的写两个分号,如";;"会导致错误


  4. 合理使用括号

    在算术运行中必要的时候应当使用括号表示运算的先后顺序,如果多层嵌套括号最外层括号应间隔两个空格

    如 a + b + c * 2 + 1这样的代码是不被推荐的,
    你应当用括号显示的表示运算的先后顺序; 如( (a + b) + (c * 2) ) + 1;

    下面的代码是不被推荐的


    if a == 1 then
        a = 2;
    end;


    标准的格式应当加上括号写成这样:

    if( a == 1)then
        a = 2;
    end;


  5. 代码应正确反映逻辑结构和嵌套
    标准嵌套块应缩进一个tab键(在模拟精灵中不允许使用四个空格键缩进)
    在网页或其他地方发布源代码、文档等,应当重新处理源代码用四个空格键替换tab键(因为每个程序显示tab键的风格都不相同)。


  6. 注释

    单行注释以两个短横线开始:--这里写注释直到本行结束
    多行注释以--[[ 开始,以 --]] 结束,你可以在方括号( [[或]] )中间添加任意个数的'='符号,]] 中间的等号数目必须与[[中间的等号数目相同。
    技巧

    多行注释可以使一个语句块变为不执行的注释。
    如果需要执行这个语句块。 可以在第一行注释之前再加一个短横线 - ,
    由于第一行变为单行注释,而线束的 --]] 是 -- 开头的, 也自动变为单行注释了.

    --[==[ 在本行前添有一个横线即可以巧妙的取消取释块
       win.messageBox("我在注释块内"); --被注释的代码,不执行
    --]==] LAScript是基于lua的子语言、兼容lua基本语法。

  7. LAScript是基于lua的子语言、兼容lua基本语法。