在您的应用程序开发过程中,不可避免地会遇到需要将代码展示给他人的情况。这可能是因为您在论坛中寻求帮助,或者您正在团队中工作,您的队友需要阅读您的代码。也许您想与他人分享一个有用的模块,甚至出售一个游戏模板。
在所有这些情况下,拥有{
) 放在行尾还是行首?等等…
在我们了解一些改进代码格式的关键方法之前,请考虑以下代码块
local function doit() local variableA = 0 local s = 0 local hs = 0 local sd = display.newText("0",160,10,native.systemFont,16) local function sum(variableA,s) local variableb=s+variableA sd.text = variableb if variableb>hs then hs = variableb end return variableb end sum(variableA,s) print(variableb) end doit()
虽然上面的代码在技术上可以运行,但很难弄清楚它实际上在做什么。现在将其与以下版本进行比较
local function showScore() local count = 0 local score = 0 local highScore = 0 local scoreDisplay = display.newText( "0", 160, 10, native.systemFont, 16 ) local function addToScore( count, score ) local newScore = score + count scoreDisplay.text = newScore if ( newScore > highScore ) then highScore = newScore end return newScore end addToScore( count, score ) print( newScore ) end showScore()
如您所见,正确的代码格式使此版本更易于阅读和理解。showScore()
函数的起始和结束位置清晰,变量和函数的命名准确,添加了空格和缩进以提高可读性,所有内容都具有正确的作用域,甚至 addToScore()
函数也整齐地嵌套在其父函数 showScore()
中。
在以下部分中,我们将探讨常见的代码格式问题以及如何改进您自己的代码。
许多新手开发者不知道缩进是什么意思。简单地说,代码被分解成块,块有开头和结尾。例如,当您定义一个函数时,您就是在创建一个代码块。在某个时候,该块使用 Lua 关键字 end
结束。一般来说,缩进是指在块内有意地将代码向右移动,从而使其更具可读性。例如
local function addNumbers( numberOne, numberTwo ) return numberOne + numberTwo -- This line is indented end
在 Lua 中,块使用以下任何关键字定义
function
if
while
for
repeat
由于所有这些关键字都开始一个代码块,因此它们要求使用 end
语句来完成它们。为了遵守正确的缩进规则,关键字if
)end
应该与编辑器屏幕左侧的距离相同。
出于缩进的目的,根据您的个人喜好,您可以使用多个
通常,您会在其他块内部嵌套块,例如函数内部的 if
语句以及该 if
块内部的另一个命令。在这种情况下,您应该将内部块/行缩进到比其包含块更深一级
local function touchHandler( event ) if ( event.phase == "ended" ) then -- First level of indentation composer.gotoScene( "game" ) -- Second level of indentation end return true end
回到编程的早期,例如使用 BASIC 等语言时,程序员只能使用 A
、B
、I
、X
、Y
等变量名。这些字母以相当标准的方式使用 — A
用于数组,X
/Y
用于坐标,I
用于“索引”for
循环索引中)
现代编程语言允许我们使用更详细的变量名,Lua 有一些通用的指导原则可以很好地发挥作用。例如,i
可能是非常窄作用域中的一个好的索引变量,但对于整个项目来说,它是一个糟糕的“更广泛”的名称。通常,作用域越广,变量名应该越具有描述性。较短的名称(如 move
或 player
)适用于playerUniformColor
。
在 Lua 中,很容易编写包含大量嵌套块的代码。但是,块越长,阅读和维护就越困难。在任何现代编程语言中,函数的目的是编写可重复执行的可管理代码块,这里的关键词是可管理。当您有一系列 function()
、if
、for
和其他块相互嵌套,以及与每个块关联的 end
语句时,即使是正确的缩进也可能不足以阐明逻辑流程。如果整个代码块变得这么大,最好将部分逻辑提取出来并移动到另一个函数中。
就像避免过长的函数和其他块一样,也要避免过长的 Lua 模块。当单个模块过长时,就变得难以管理。如果您在文本编辑器中不断上下滚动以查找内容,则该模块可能“无法管理”,并且将该模块的部分功能移动到新模块中可能是明智之举。过长的模块也可能会超出 Lua 的 200 个局部变量的限制,因此保持模块更短、更简洁是一个好习惯。
虽然一些空格(包括缩进)可以提高可读性,但过多的空格可能会造成问题并且毫无意义。另一方面,避免使用空格会使您的代码显得杂乱无章。通常,您应该在块之间使用一个换行符,在关键字(如 function
)及其参数之间使用一个空格。考虑以下函数
local function addToScore(count,score) local newScore=score+count scoreDisplay.text=newScore if newScore>highScore then highScore=newScore end return newScore end
现在将其与以下函数进行比较,该函数的行为相同,但是通过使用合理的空格量,此版本更易于阅读
local function addToScore( count, score ) local newScore = score + count scoreDisplay.text = newScore if ( newScore > highScore ) then highScore = newScore end return newScore end
使用功能齐全的代码/文本编辑器应用程序将大大改进您的代码。当您深入到代码块中时,这些应用程序通常会自动管理您的缩进。此外,它们通常会提供完整的 Lua 语法着色,其中关键字、值和变量使用不同的颜色进行标记,以帮助提高可读性。例如,编辑器可能会将字符串标记为绿色,如果您忘记包含字符串的结束引号 ("
),则更大的代码块可能会变为绿色,表明您忘记了该结束引号。
合适的编辑器的另一个重要功能是能够显示行号。当 Solar2D 遇到代码错误时,它会报告出现问题的行号(有关更多信息,请参阅 调试指南)。因此,如果您的编辑器显示行号,则更容易追踪问题。
请参阅我们的 入门 指南,了解推荐的文本编辑器列表。
如果您遵循本教程中的实践,您不仅会发现自己的代码更容易阅读,而且当您需要其他开发人员的帮助时,更多的人会愿意帮助您。总的来说,我们讨论的技术和技巧将使您成为更高效、更有生产力的开发人员!