慣用法(精巧用法)

2018-02-24 15:45 更新

慣用法(精巧用法)

盡可能使用local修飾變量(重要的事情要說三遍?。?/h3>

原因:

  • 使用local的變量會在作用域結(jié)束時釋放其內(nèi)存
  • 使用local的變量會比全局變量的存取更快
  • 全局變量會污染全局的命名空間,可能會導(dǎo)致詭異的bug出現(xiàn)

直接判斷真假值


-- 不推薦

if  obj  ~=  nil  and  willBreak  ==  false  then

????-- ...

end

-- 推薦

if  obj and  not  willBreak then

????-- ...

end

原因:Lua在邏輯判斷時將所有非falsenil的邏輯判斷視為真,反之視為假,不需要再與布爾值和nil進(jìn)行比對。

但是,在需要對falsenil進(jìn)行區(qū)分時,需要寫明==obj == nilobj == false

默認(rèn)參數(shù)的實(shí)現(xiàn)

范式:param = param or defaultValue

function  setName(name)

????name  =  name or  'noName'

????-- ...

end

原因:or會在第一次為true的時候斷路,返回其判斷的最后一個值。所以當(dāng)name為空時,name or 'noName'返回為'noName',這會將name的值自動設(shè)置為noName。

一行代碼實(shí)現(xiàn)表的拷貝

u  =  {unpack(t)}

一行代碼判斷表是否為空

#t == 0并不能判斷表是否為空,因為#預(yù)算符會忽略所有不連續(xù)的數(shù)字下標(biāo)和非數(shù)字下標(biāo)。

正確做法是:


if  next(t)  ==  nil  then

????-- 表為空

????-- ...

end

因為表的鍵可能為false,所以必須與nil比較,而不直接使用~next(t)來判斷表是否空。

更快的插入代碼

-- 更慢,不推薦

table.insert(t,  value)

-- 更快,推薦

t[#t+1]  =  value

原因:[]和#避免了高層的函數(shù)調(diào)用開銷。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號