Adakah wawasan tentang cara mengurangi baris kode ini (jika mungkin)?

local function Run(steps)
    if steps < 0 then
        while steps < 0 do
            Foo()
            steps = steps + 1
        end
    else
        while steps > 0 do
            Bar()
            steps = steps - 1
        end
    end
end

Run(5)
Run(-8)

Mungkin ada cara yang lebih efisien dalam hal kinerja?

0
Scootworks 4 April 2021, 14:05

2 jawaban

Jawaban Terbaik

Anda dapat mempersingkat kode itu tetapi saya tidak melihat alasan untuk itu. Kode harus mudah dibaca, tidak sesingkat mungkin.

Satu-satunya hal yang akan saya hapus adalah pernyataan jika kondisinya juga dalam waktu sementara loop. Sementara loop dengan jumlah iterasi yang diketahui berdasarkan penghitung dapat diganti dengan numerik untuk loop saat Egor sudah dijelaskan.

function Run(steps)
  local f = steps < 0 and Foo or Bar
  for i = 1, math.abs(steps) do f() end
end
1
Piglet 4 April 2021, 11:25

Anda dapat menghapus if sepenuhnya.

local function Run(steps)
    while steps < 0 do
        Foo()
        steps = steps + 1
    end
    while steps > 0 do
        Bar()
        steps = steps - 1
    end
end

Run(5)
Run(-8)

Atau Anda dapat menggunakan for loop alih-alih sementara:

local function Run(steps)
    for i = -1, steps, -1 do
        Foo()
    end
    for i = 1, steps, 1 do
        Bar()
    end
end

Run(5)
Run(-8)

Tetapi Anda tidak akan bisa mendapatkan peningkatan kinerja yang terukur di sini.

4
Egor Skriptunoff 4 April 2021, 11:21