控制结构

       本节深入解析Lua的所有流程控制结构,包含条件分支、循环结构、流程控制语句及其在Android开发中的最佳实践和性能考量。

1. 条件语句

       Lua提供if-else条件分支结构,是UI逻辑和业务决策的核心。

1.1 基础if语句

local battery = 15

if battery < 20 then
    print("电量不足")
    showLowBatteryWarning()
end
if结构流程图:
┌─────────────┐
│ 条件判断 │──真→ 执行代码块
└─────────────┘


后续代码

1.2 if-else语句

local network = "wifi"

if network == "wifi" then
    downloadLargeFile()
else
    showMobileNetworkWarning()
end

1.3 多重elseif

Android网络状态判断示例:

local signal = getNetworkSignal()

if signal >= 4 then
    setNetworkQuality("优")
elseif signal >= 2 then
    setNetworkQuality("良")
elseif signal > 0 then
    setNetworkQuality("差")
else
    setNetworkQuality("无信号")
end

2. 循环结构

       Lua提供三种循环结构,处理Android中的重复任务和异步事件。

2.1 while循环

-- 读取socket数据
local dataChunks = {}
local chunk = readNextChunk()

while chunk ~= nil do
    table.insert(dataChunks, chunk)
    chunk = readNextChunk()
end

2.2 repeat-until循环

-- 至少执行一次的循环
local attempt = 0
local success = false

repeat
    attempt = attempt + 1
    success = connectToServer()
until success or attempt >= 3

2.3 for循环

数值for循环

-- 初始化列表项
for i = 1, 10 do
    listItems[i] = createListItem(i)
end

-- 带步长的倒序循环
for i = 10, 1, -1 do
    print("倒计时:", i)
end

泛型for循环

-- 遍历数组
local colors = {"red", "green", "blue"}
for index, value in ipairs(colors) do
    print(index, value)
end

-- 遍历表键值对
local config = {width=1080, height=1920}
for key, val in pairs(config) do
    print(key, val)
end

3. 流程控制语句

       精细控制循环和代码块执行流程,在Android事件处理中尤为重要。

3.1 break语句

-- 搜索列表项
for i, item in ipairs(itemList) do
    if item.id == targetId then
        foundItem = item
        break  -- 找到后立即退出循环
    end
end

3.2 return语句

local function findUser(users, name)
    for _, user in ipairs(users) do
        if user.name == name then
            return user  -- 提前返回
        end
    end
    return nil  -- 未找到
end

3.3 goto语句(Lua 5.2+)

-- 错误处理集中化管理
local function processFile(filename)
    local file = io.open(filename)
    if not file then goto error end
    
    -- 处理逻辑...
    file:close()
    return true

::error::
    print("文件处理失败:", filename)
    return false
end

4. 嵌套控制结构

       复杂业务逻辑中的控制结构组合应用。

4.1 循环嵌套

-- 二维数组初始化
local matrix = {}
for i = 1, 3 do
    matrix[i] = {}
    for j = 1, 3 do
        matrix[i][j] = i * j
    end
end

4.2 条件与循环混合

-- 用户输入验证
local validInputs = 0
for i = 1, 5 do
    local input = getInput()
    
    if input == nil then
        print("输入不能为空")
    elseif #input < 3 then
        print("输入太短")
    else
        validInputs = validInputs + 1
    end
end

5. Android开发实践

       移动端特殊场景下的控制结构优化技巧。

5.1 UI线程优化

-- 分批处理避免ANR
local function processLargeData(data)
    local chunks = splitData(data, 100)  -- 每批100条
    
    local function processChunk(i)
        if i > #chunks then return end
        
        -- 处理当前批次
        for j = 1, #chunks[i] do
            processItem(chunks[i][j])
        end
        
        -- 下一批次放入消息队列
        android.postDelayed(function()
            processChunk(i + 1)
        end, 10)  -- 10ms延迟
    end
    
    processChunk(1)
end

5.2 事件循环处理

-- Androlua中的事件循环
local running = true

while running do
    -- 处理事件
    local event = {android.pollEvent()}
    
    if event[1] == "key" then
        handleKeyEvent(event)
    elseif event[1] == "touch" then
        handleTouchEvent(event)
    elseif event[1] == "quit" then
        running = false
    end
end

5.3 性能敏感代码

-- 避免在循环中创建临时表
local temp = {}  -- 预先分配
for i = 1, 10000 do
    temp[1] = data[i].x
    temp[2] = data[i].y
    processPoint(temp)  -- 复用表对象
end

控制结构黄金法则

  1. 单一出口: 函数尽量只有一个return点
  2. 避免深层嵌套: 超过3层应考虑重构
  3. 循环安全: 确保有明确的退出条件
  4. 性能优先: 大数据集循环避免内存分配
  5. UI友好: 耗时操作分批次执行