前端开发从零开始学Lua-开发环境搭建及基础语法介绍(对照JS)

Lua介绍

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成员有:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo。

Lua 不是一门很难的语言,即使是没有学习过 lua 的前端工程师,凭借着 js 中的语法和知识也可以看懂大部分的 lua 代码逻辑。

之所以学习 lua 是为了之后学习 openrestry 打基础,学习如何开发 api网关

环境搭建

Lua安装

首先进入lua 官网提供的下载地址 ,选择你当前对应的环境点击即可下载。

前端开发从零开始学Lua-开发环境搭建及基础语法介绍(对照JS)_第1张图片

我选择的是 Win64_bin 的包,下载完成后压缩包内内容如下:

前端开发从零开始学Lua-开发环境搭建及基础语法介绍(对照JS)_第2张图片

我们将压缩包解压到任意文件夹中,解压后记得将 三个exe后缀文件名的文件中数字部分去掉 !然后根据解压的目录配置环境变量。

前端开发从零开始学Lua-开发环境搭建及基础语法介绍(对照JS)_第3张图片

win10 用户可以跟我一样直接搜索 高级系统设置 ,打开后选择右下角 环境变量 按钮。

前端开发从零开始学Lua-开发环境搭建及基础语法介绍(对照JS)_第4张图片

在系统变量这里,选择 Path 点击右下角编辑。

前端开发从零开始学Lua-开发环境搭建及基础语法介绍(对照JS)_第5张图片

点击右侧 新建,将刚刚 解压lua的路径 输入并保存

前端开发从零开始学Lua-开发环境搭建及基础语法介绍(对照JS)_第6张图片

然后我们打开命令行输入 lua 查看安装结果,如果安装成功了就会打印版本信息,并且进入输入模式,如下图所示:

image.png

ide工具

作为一个前端工程师,我是直接使用 vscode 作为 ide 工具,在 vscode 中安装 lua 对应的拓展,我安装的是这两个,如下图:

前端开发从零开始学Lua-开发环境搭建及基础语法介绍(对照JS)_第7张图片

前端开发从零开始学Lua-开发环境搭建及基础语法介绍(对照JS)_第8张图片

Lua 数据类型

lua 中的数据类型一共有8种,分别是:nil、boolean、number、string、userdata、function、thread、table。

以下借用菜鸟教程中的一个表格:

数据类型 描述
nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean 包含两个值:false和true。
number 表示双精度类型的实浮点数
string 字符串由一对双引号或单引号来表示
function 由 C 或 Lua 编写的函数
userdata 表示任意存储在变量中的C数据结构
thread 表示执行的独立线路,用于执行协同程序
table Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

nil 类型

nil 类型我的理解就是类似于 js 中的 null + undefined ,在条件表达式中也同样相当于false, 可以表示为未定义的值。同样可以用于释放内存。

boolean 类型

boolean 类型与 js 有一些区别,除了 falsenil 之外,其他都是 true ,在 JS 中条件判断时等于false的 数字0空字符’’ 在 lua 中都是 ture 。

number 类型

number类型和 js 一样,都是 double(双精度) 类型,可以同时表达整数,小数等。

string 类型

string 类型和 js 中不同的点是,在 js 中数字字符串与数字做加法时,会将字符串拼接起来,而 lua 中则会转换类型。

> print("2" + 6)\
8.0

table 类型

table 类型 可能看起来比较陌生,其实就是 js 中的 Object 类型 + Array 类型,使用大括号定义变量,变量中传入值会自动生成索引,但是索引的值不仅可以是数字,还可以是字符串,更接近于js中的 Map类型

local tbl2 = {"apple", "pear", "orange", "grape"}

调用属性时,使用中括号进行调用,使用方式如下:

local table = {"apple", "pear", "orange", "grape"}
print(table[1]) --"apple"

function 类型

在 lua 中定义函数函数体是不需要用大括号框住的,而是在函数的末尾使用一个 end 将函数体包起来

function test()
  print("i'm a function")
end
  
test() --"i'm a function"

与 js 一样,函数同样可以赋值给变量

local test = function()
  print("i'm a function")
end

test() --"i'm a function"

函数中还有很多类似 js 的小技巧,例如 参数解构,闭包函数 等,后面单独写一篇~

userdata 类型

userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。

Lua 注释写法

单行注释

两个减号是单行注释:

local a = "hello" --定义变量

多行注释

两个括号用于多行注释

--[[
 所有内容都被注释
 --]]

定义变量

lua 和 js 一样是一门 弱类型语言,因此在定义变量时不需要指定变量类型,可以直接赋值定义全局变量或使用 local定义局部变量,类比于js中的 varlet

a = 5               -- 全局变量\
local b = 5         -- 局部变量\

function joke()\
    c = 5           -- 全局变量\
    local d = 6     -- 局部变量\
end

局部变量只能作用在块级作用域,例如 函数遍历 或者 条件判断 中。

条件判断

if...else... 语法中与 js 不同的一点是,js 是 if 包裹着判断为 true 的操作,else 包裹着判断为false 的操作,而 lua 是用 if 和 end 包裹整个条件判断语句,然后判断为 true 的话就走 then 中的操作,
否则走 else

--[ 定义变量 --]\
a = 100;\
--[ 检查条件 --]\
if( a < 20 )\
then\
   --[ if 条件为 true 时执行该语句块 --]\
   print("a 小于 20" )\
else\
   --[ if 条件为 false 时执行该语句块 --]\
   print("a 大于 20" )\
end\
print("a 的值为 :", a)

在 Lua 中是没有 switch... case... ,不过可以使用 table 类型实现相似的功能,将 table 数据的值设置为想要执行的 函数,通过匹配 key 值实现 switch... case...

local SwitchCase = function (value)
  local caseTable = {
    ["a"] = function ()
      print("a")
    end,
    ["b"] = function ()
      print("a")
    end,
    ["c"] = function ()
      print("a")
    end,
  }
  caseTable[value]()
end
SwitchCase("a") --"a"

Lua 遍历

在学习遍历前,首先我们要了解 Lua 中可以迭代的值有什么,在上一篇文章中,我们讲到了 Lua 中有一个类似 js 中 对象+数组 的类型 table ,table 这个类型是不能直接用于遍历的,但是我们可以对 table 进行一些处理,就像 js 中的对象方法 Object.entries() 可以将对象转换为数组一样,Lua 中也存在类似的函数 ipairspairs

在 Lua 中 for遍历的写法与 js 的 for...in... 相似,只不过是将大括号改成用 do…end… ,如下代码所示:

array = {"Google", "Runoob"}

for key,value in ipairs(array)
do
   print(key, value)
end

[[
    1       Google
    2       Runoob
]]

这里要注意一下,在 Lua 中索引值是以 1 为起始的,不像其他语言第一个索引值是 0

pairsipairs 两个函数之间是有区别的,ipairs 函数如果在遍历的时候遇到了 nil 就会退出遍历!具体区别如下:

  • pairs: 迭代 table,可以遍历表中所有的 key 可以返回 nil
  • ipairs: 迭代数组,不能返回 nil,如果遇到 nil 则退出

Lua 循环

上面的将的是我们如何遍历一个 table 数据,如果我们只是想单纯的进行循环,那么我们可以直接使用 for循环 ,如下代码所示:

for i=1,5 do
  print(i)
end
[[
    1
    2
    3
    4
    5
]]

对应的 js 代码如下:

for (let i = 1; i <= 5; i++) {
  console.log(i)
}

上面的代码就是循环 5 次打印的结果,具体的循环语法如下所示:

for var=exp1,exp2,exp3 do  
    print(exp1)
end  

var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 “执行体” 。exp3 是可选的,如果不指定,默认为1。转换为 js 的代码可能看的更加直观,这里的 var 单纯代表一个具体的变量,而不是js中用于创建变量的语法 var:

for (var = exp1; exp2 <= 5; var + exp3) {
  console.log(var)
} 

总结

这篇文章主要讲了 lua 在windows中开发环境的搭建以及一些数据类型介绍及入门语法,整体文章面向群体偏向于有前端开发基础的学习者。

你可能感兴趣的:(lua,javascript,开发语言)