Lua 代碼編寫規(guī)范

2022-06-25 15:43 更新

Lua代碼編寫規(guī)范 

開發(fā)中,大量使用lua,暫時(shí)根據(jù)當(dāng)前狀況,總結(jié)相對(duì)而言較好的規(guī)范,在多人協(xié)作中可以更好的開發(fā)、交流。

介紹 

該文檔旨在為使用lua編寫應(yīng)用程序建立編碼指南。 
制訂編碼規(guī)范的目的: 

  • 統(tǒng)一編碼標(biāo)準(zhǔn),通用,提高開發(fā)效率; 
  • 使代碼通俗易懂,易于維護(hù)。 

切記:善用調(diào)試器。 

一、 命名慣例 

1.所有l(wèi)ua文件命名時(shí)使用小寫字母、下劃線

2.類名、變量名盡可能使用有意義的英文,類名使用帕斯卡命名法,變量名使用駱駝式命名法 

3.常量、消息號(hào)定義時(shí)用大寫,單詞間 _ 分割  eg:KIND_PET_FOOD

4.枚舉值定義時(shí) 加前綴 enum_ 

5. 函數(shù)名使用駱駝式命名法

注:

駱駝式命名法:第一個(gè)單字以小寫字母開始;第二個(gè)單字的首字母大寫或每一個(gè)單字的首字母都采用大寫字母

帕斯卡命名法:和駱駝命名法很像,只有一點(diǎn)區(qū)別,就是首字母要大寫。(單字之間不以空格斷開或連接號(hào))

二、 文件組織 

1. 文件開頭加上此文件的功能、職責(zé)的簡(jiǎn)要描述; 

如下:

--

-- Author: Feng

-- Date: XXXX-XX-XX

-- 功能描述

每個(gè)文件都加module 限定詞; 導(dǎo)入的模塊都加 local 限定詞;或者使用(module(..., package.seeall)),這樣便于進(jìn)行熱更新

2. 所有提供外部函數(shù)都加如下格式的注釋。 

例如: 

--此函數(shù)檢測(cè)是否可以從A(oldx, oldy)點(diǎn)走到B點(diǎn)(newx, newy) 

--@param oldx 當(dāng)前所在點(diǎn)x 

--@param oldy 當(dāng)前所在點(diǎn)y 

--@param newx 目標(biāo)點(diǎn)x 

--@param newy 目標(biāo)點(diǎn)y 

--@return 若可以到達(dá),返回true;否則返回false 

function Object:checkBar(oldx, oldy, newx, newy) 

… 

end 

3. 函數(shù)與函數(shù)間、以及一些定義之間加上空行。  

4. 函數(shù)內(nèi)的臨時(shí)變量、文件內(nèi)的局部函數(shù)都加上 local 限定詞 

5. 函數(shù)的行數(shù)過長(zhǎng)(大于100行)時(shí),盡量拆分為多個(gè)子函數(shù);函數(shù)中一些晦澀的部分,一定要加上注釋。 

6. 短小的注釋使用 --; 較長(zhǎng)的注釋使用 --[[ ]] 

7. assert函數(shù)開銷不小,請(qǐng)慎用。 

8. Lua類設(shè)計(jì)時(shí),用元表來實(shí)現(xiàn)oop。 

不要直接增加函數(shù)成員,因?yàn)橹苯釉黾雍瘮?shù)成員會(huì)導(dǎo)致內(nèi)存增加并且在jit下執(zhí)行效率和用元表方式無差異。 

9. 文件使用UTF8格式

三、 分隔和縮進(jìn) 

1. 使用空行 

在下述情況下使用單行的空白行來分隔: 

1)在方法之間 

2)在方法內(nèi)部代碼的邏輯段落小節(jié)之間 

3)在注釋行之前 

注釋之前增加一行或者多行空行。 

2.使用空格符

除正常的成分之間以空格符分隔名(如數(shù)據(jù)類型和變量名之間),在下述情況下也應(yīng)使用一個(gè)空格符來分隔:

1)運(yùn)算符和運(yùn)算符之間,如: c = a + b;

2)在參數(shù)列表中的逗號(hào)后面,如:

function m1(year, month)

end

3) 在for語句時(shí),如: 

for k, v in pairs(t) do 

end 

4)在下列情況下不要使用空格。 

例如: 

函數(shù)定義時(shí): 

function test1(a) 

end 

不要這樣: 

function test1( a ) 

end 

函數(shù)調(diào)用時(shí): 

test1(3) 

不要這樣: 

test1( 3 ) 

不要如此的原因在于: 

a).容易忘記相關(guān)空格,導(dǎo)致風(fēng)格不統(tǒng)一,這樣還不如不加; 

b).lua解析語法時(shí)是采用空格等分割來解析的,某些情況下,若不小心加空格會(huì)導(dǎo)致非預(yù)期的結(jié)果。 

3. 使用換行符 

不建議在一行中寫多條語句,一條語句的長(zhǎng)度一般超過了80個(gè)字符時(shí),應(yīng)該換行 

4. 使用小括號(hào) 

可以使用小括號(hào)來強(qiáng)行規(guī)定運(yùn)算順序 

5. 使用縮進(jìn) 

在下述情況下應(yīng)用縮進(jìn) 

1)類中的成分 

2)方法體或語句塊中的成分 

3)換行時(shí)的非起始行 

縮減量一般為在上一級(jí)成分的基礎(chǔ)上跑到下一個(gè)制表位 

四、代碼建議: 

1.代碼中使用的一些函數(shù)盡可能在文件開頭或者當(dāng)前局部環(huán)境中加local前綴重新定義下。 

例如:

local assert = assert  

2.盡量減少表中的成員是另一個(gè)表的引用。 考慮lua的垃圾收集機(jī)制、內(nèi)存泄露等。 

3.高級(jí)特性盡可能不用 

4.寫代碼時(shí)盡可能寫的簡(jiǎn)單,考慮性能時(shí)先做好推斷,看看能提升多少,增加的復(fù)雜度以及造成的代碼晦澀有多嚴(yán)重,然后再?zèng)Q定如何做 

5.加載的xml數(shù)據(jù)表,盡可能的做好數(shù)據(jù)校驗(yàn),若校驗(yàn)失敗,要出發(fā)斷言,使服務(wù)器無法啟動(dòng);不要等出錯(cuò)時(shí),回過頭來檢查是數(shù)據(jù)表問題還是邏輯問題。 

6.出錯(cuò)時(shí),記錄好錯(cuò)誤日志。 

有的函數(shù)開銷比較大,而調(diào)用的頻率很低,那么可以不對(duì)他做優(yōu)化; 

反之,有的函數(shù)開銷較小,但是調(diào)用的頻率很高,從如何降低調(diào)用頻率以及減少函數(shù)開銷兩個(gè)角度去思考,然后定下優(yōu)化方案 

提交代碼之前,去掉或者注釋掉無關(guān)的代碼; 測(cè)試下保證服務(wù)器可以正確啟動(dòng)。

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)