1. 程式人生 > >NodeMcu開發(二)--lua指令碼語言快速入門

NodeMcu開發(二)--lua指令碼語言快速入門

NodeMcu是已lua為指令碼語言開發的, 是不是聽到又要學語言了, 就抓狂了???? 不是的, 其實我感覺只要學好了一門語言, 其他語言就是類似的, 觸類旁通, 經過一個小時的學習後, 發現lua挺像python的, 少說廢話, 來點實際的

lua語言詳細教程參考網站: 菜鳥教程 網址:http://www.runoob.com/lua/lua-tutorial.html

lun快熟入門教程, 也是我看的教程, 是簡書上的:https://www.jianshu.com/p/5927eae240ba

 

做一回大自然的搬運工:

在lua中需要注意

不要在結尾使用                 ;
陣列的第一個元素下標       是1不是0
----------------------------------------------------------------------
不等於                       ~=
邏輯與                      and
邏輯或                       or
邏輯非                      not
---------------------------------------------------------------------
註釋用                       --
空值                        nil
連字元                       ..
所有程式碼塊需要結束標誌        end
--------------------------------------------------------------------
不能使用              i++  i--  ++i   --i

輸出語句

直接用print()輸出

示例:
print("hello world!")
----輸出hello world!
print("5+3="..(5+3))
----輸出5+3=8

變數定義

在lua中,變數的宣告不需要宣告變數的型別,如下

示例:
       i = 6-----宣告全域性變數    
local  i = 7-----宣告區域性變數

if語句

--if語句框架如下

if  (布林表示式)   then 
    --執行語句
end 
--示例:
i=6
if (i<7) then 
    print("yes!")
end 
--輸出yes!

if-else

--if-else語句框架如下

if  (布林表示式)   then 
    --執行語句
else
     --執行語句
end 
--示例:
i=9
if (i<5) then 
    print("yes!")
else
    print("no!")
end 
--輸出no!

elseif

--elseif框架如下

if  (布林表示式)    then 
    --執行語句
elseif (布林表示式) then 
   --執行語句
end
示例:
i=7
if  (i<5)    then 
    print("i<5")
elseif (i>6) then 
   print("i>6")
end
--輸出i>6

while迴圈

--while迴圈框架如下

while (布林表示式) do 
    --執行語句
end
示例:
i=5
while (i>0) do 
    print(i)
    i=i-1
end
--輸出
5
4
3
2
1

for迴圈

--for迴圈框架如下

for var=exp1,exp2,exp3 do 
     --執行語句
end 
 ---exp1為初始值;exp2為終值;exp3為遞增值,省略則預設為1
for i=1,5,1 do 
    print(i)
end
--輸出
1
2
3
4
5

function函式

--函式定義框架如下

function 函式名(引數1,引數2,引數3)
    --執行語句
    return 返回值1,返回值2,返回值3
end
--示例

function f(ex1,ex2)
    ex1=ex1+1
    ex2=ex2-1
    return ex1,ex2
end
i,j=f(9,5)
print("i="..i)
print("j="..j)
--輸出
i=10
j=4

陣列

--陣列定義如下

array1 = {}                    --定義一個空陣列
array2 = {1,2,3,4,5,6}         --定義一個賦初的值陣列
--示例
array = {1,2,3,4,5,6}
for i=1,6,1 do
    print(array[i])
end
--輸出
1
2
3
4
5
6

table

--table的定義

table = {}                  --定義一個空table
table.name="kk"             --給table設定一個屬性,key為name,value為“kk”
table.name=nil              --刪除屬性
--示例
table = {}
table.name="xiaoming"
table.age=12
function table.chifan() 
    print("yes ,yes, yes ")
end

table.age=table.age+5
print(table.name)
print(table.age)
table.chifan()

--輸出

xiaoming
17
yes ,yes, yes 

字串

--字串的定義有三種形式

a1 = 'asdf'--------單引號定義字串
a2 = "asdf"--------雙引號定義字串
a3 = [[asdf]]-------兩個中括號定義字串
--示例
a1 = 'as\ndf'                      --將\n變成回車
a2 = "as\ndf"                      --將\n變成回車
a3 = [[as\ndf]]                    --不會將\n變成回車
print("a1="..a1)
print("a2="..a2)
print("a3="..a3)
--輸出
a1=as
df
a2=as
df
a3=as\ndf

錯誤處理

pcall(function,x1,x2,x3)第一個引數為一個函式的名字,注意沒有(),後面的引數為需要給函式傳遞的引數;
函式的第一個返回值表示是否執行成功,成功為ture,不成功為false
若所傳遞的函式也有返回值,則在pcall返回的第二個值之後接收

function fun(x)
    return 10/x
end
ok,y=pcall(fun,0)
if(ok) then
    print("yes")
    print(y)
    print(ok)
else
    print("no")
    print(y)
    print(ok)
end
--輸出
no
stdin:-1: divide by zero
false

字串常用函式

連線字串..

--示例
s1="asd"
s2="fgh"
s3=s1..s2
print(s3)
--輸出
asdfgh

計算字串長度string.len(str)

--示例
s1="asdfg"
print(string.len(s1))
--輸出
5

查詢字串string.find (str, substr, i ,j)

str中查詢substr,查詢區間為str的第i到第j個之間;找到就返回開始下標和結束下標,找不到返回nil

--示例
s1="asdfg"
i,j=string.find(s1,'df')
print("i="..i)
print("j="..j)
--輸出
i=3
j=4

提取字串string.sub(str,i,j)

提取字串str中的第i個字元和第j個字元之間的所欲字元,包括ij
如果j取-1則取到最後一個,取-2則取到倒數第二個,以此類推

--示例
s1="asdfghjkl"
print(string.sub(s1,2,6))
--輸出
sdfgh

按指定字元分割符串

輸入引數,字元和標誌,返回陣列

--示例
function split( str,reps )
    local resultStrList = {}
    string.gsub(str,'[^'..reps..']+',function ( w )
        table.insert(resultStrList,w)
    end)
    return resultStrList
end
a=[[111,222,333,444]]
print(split(a,',')[1])