格式良好代码的价值格式良好代码

在您的应用程序开发过程中,不可避免地会遇到需要将代码展示给他人的情况。这可能是因为您在论坛中寻求帮助,或者您正在团队中工作,您的队友需要阅读您的代码。也许您想与他人分享一个有用的模块,甚至出售一个游戏模板。

在所有这些情况下,拥有格式良好的代码是您作为一名程序员能否成功的关键因素。不幸的是,代码格式可能会引发不同程序员之间的激烈争论:您每次缩进使用 3 个空格还是 4 个空格?您使用制表符还是空格进行缩进?您是否将左花括号 ({) 放在行尾还是行首?等等…

在我们了解一些改进代码格式的关键方法之前,请考虑以下代码块

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 中,块使用以下任何关键字定义

由于所有这些关键字都开始一个代码块,因此它们要求使用 end 语句来完成它们。为了遵守正确的缩进规则,关键字(例如 if及其匹配的 end 应该与编辑器屏幕左侧的距离相同。

出于缩进的目的,根据您的个人喜好,您可以使用多个空格 — 3-4 个最常见 —制表符缩进。如果您更喜欢空格,则应使用足够的空格,以便清楚地表明内部代码位于块的“内部”。在使用制表符的情况下,大多数编辑器允许您将单个制表符设置为代表 3 或 4 个空格,并且当您使用退格键/删除键删除缩进时,它会方便地删除整个制表符,而不是强制您逐个删除多个空格。

多级缩进

通常,您会在其他块内部嵌套块,例如函数内部的 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 等语言时,程序员只能使用 ABIXY 等变量名。这些字母以相当标准的方式使用 — A 用于数组,X/Y 用于坐标,I 用于“索引”(例如在 for 循环索引中).

现代编程语言允许我们使用更详细的变量名,Lua 有一些通用的指导原则可以很好地发挥作用。例如,i 可能是非常窄作用域中的一个好的索引变量,但对于整个项目来说,它是一个糟糕的“更广泛”的名称。通常,作用域越广,变量名应该越具有描述性。较短的名称(如 moveplayer)适用于窄作用域变量,但作用域越广,名称应该越长,并且通常应该包含多个单词,例如 playerUniformColor

代码块长度和嵌套代码块

在 Lua 中,很容易编写包含大量嵌套块的代码。但是,块越长,阅读和维护就越困难。在任何现代编程语言中,函数的目的是编写可重复执行的可管理代码块,这里的关键词是可管理。当您有一系列 function()iffor 和其他块相互嵌套,以及与每个块关联的 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 遇到代码错误时,它会报告出现问题的行号(有关更多信息,请参阅 调试指南)。因此,如果您的编辑器显示行号,则更容易追踪问题。

请参阅我们的 入门 指南,了解推荐的文本编辑器列表。

总结

如果您遵循本教程中的实践,您不仅会发现自己的代码更容易阅读,而且当您需要其他开发人员的帮助时,更多的人会愿意帮助您。总的来说,我们讨论的技术和技巧将使您成为更高效、更有生产力的开发人员!