0Pricing
Lua Academy · Pelajaran

Beberapa Nilai Kembalian

Kembalikan dan tangkap beberapa nilai dari satu pemanggilan fungsi.

Beberapa Nilai Kembalian adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Mengembalikan Beberapa Nilai

Berbeda dari kebanyakan bahasa, fungsi Lua dapat secara bawaan mengembalikan beberapa nilai dari satu pernyataan return. Beberapa nilai dipisahkan dengan koma setelah return. Dengan demikian, Anda tidak memerlukan objek pembungkus atau parameter keluaran.

local function divmod(a, b)
  return math.floor(a / b), a % b
end

local quotient, remainder = divmod(17, 5)
print(quotient, remainder)   -- 3  2

Menyesuaikan Nilai Kembalian

Lua menyesuaikan nilai kembalian agar sesuai dengan jumlah penerima. Nilai berlebih dibuang; nilai yang kurang menjadi nil. Penyesuaian ini terjadi setiap kali pemanggilan fungsi bukan merupakan ekspresi terakhir dalam sebuah daftar — pada posisi tersebut, hanya nilai pertama yang dipertahankan.

local function triple()
  return 10, 20, 30
end

local a, b, c = triple()
print(a, b, c)      -- 10  20  30

local x, y = triple()
print(x, y)         -- 10  20  (30 discarded)

local p = triple()
print(p)            -- 10  (only first when 1 var)

Penyesuaian pada Posisi Tengah

Ketika pemanggilan fungsi muncul di tengah daftar ekspresi (bukan pada posisi terakhir), Lua memotong hasilnya menjadi satu nilai. Hanya ekspresi terakhir dalam daftar yang dapat menghasilkan beberapa nilai.

local function pair()
  return 1, 2
end

-- pair() in middle: only 1 value used
local t = {pair(), pair()}
print(#t, t[1], t[2], t[3])  -- 3  1  1  2
-- first pair() gives just 1; last pair() gives 1,2

-- pair() at end: all values used
local t2 = {10, pair()}
print(#t2, t2[1], t2[2], t2[3])  -- 3  10  1  2

Tanda Kurung Memaksa Satu Nilai

Membungkus pemanggilan fungsi dengan tanda kurung memaksanya mengembalikan tepat satu nilai. Ini berguna ketika Anda hanya menginginkan nilai kembalian pertama, terlepas dari berapa banyak nilai yang dihasilkan fungsi tersebut.

local function coords()
  return 10, 20, 30
end

print(coords())    -- 10  20  30  (all three)
print((coords()))  -- 10  (parentheses: single value only)

local x = (coords())
print(x)           -- 10

Nilai Kembalian string.find

Banyak fungsi pustaka standar menggunakan beberapa nilai kembalian. string.find mengembalikan posisi awal dan akhir dari kecocokan (serta hasil tangkapan). math.modf mengembalikan bagian bilangan bulat dan pecahan. Memahami pola-pola ini membantu Anda menggunakan pustaka standar dengan lancar.

local s = "hello world"
local start, finish = string.find(s, "world")
print(start, finish)   -- 7  11

-- math.modf: integer and fractional parts
local int, frac = math.modf(3.75)
print(int, frac)       -- 3   0.75

Menangkap dengan table.pack

table.pack(...) menangkap semua argumen (atau nilai kembalian melalui ...) ke dalam sebuah tabel. Tabel tersebut menyertakan field n yang berisi jumlah total, termasuk nilai nil. Hal ini mempertahankan jumlah yang tepat, berbeda dari # yang berhenti pada celah pertama.

local function getData()
  return "Alice", 30, nil, true
end

local t = table.pack(getData())
print(t.n)         -- 4
print(t[1])        -- Alice
print(t[2])        -- 30
print(t[3])        -- nil
print(t[4])        -- true

table.unpack untuk Membentangkan Nilai

table.unpack(t, i, j) mengembalikan elemen-elemen tabel sebagai nilai individual. Ini merupakan kebalikan dari table.pack. Gunakan untuk meneruskan isi tabel sebagai argumen ke suatu fungsi, atau untuk membentangkan nilai dalam pernyataan return.

local args = {10, 20, 30}

local function sum3(a, b, c)
  return a + b + c
end

print(sum3(table.unpack(args)))  -- 60

-- Use in return
local function passThrough(t)
  return table.unpack(t)
end
print(passThrough({5, 6, 7}))   -- 5  6  7

Nilai Kembalian Bergaya Galat

Konvensi Lua yang umum adalah mengembalikan nil, errorMessage saat gagal dan hasil saat berhasil. Pemanggil memeriksa nilai kembalian pertama: jika nil, berarti terjadi galat. Dengan demikian, pengecualian tidak diperlukan untuk kasus kegagalan yang diperkirakan.

local function openConfig(path)
  local f = io.open(path, "r")
  if not f then
    return nil, "cannot open: " .. path
  end
  local content = f:read("*a")
  f:close()
  return content
end

local data, err = openConfig("config.lua")
if not data then
  print("Error:", err)
end

Menukar dengan Beberapa Nilai Kembalian

Beberapa nilai kembalian menyelesaikan masalah penukaran dengan elegan. Sisi kanan dievaluasi sebelum penugasan, sehingga a, b = b, a menukar nilai dengan benar tanpa variabel sementara.

local a, b = 5, 10
print(a, b)   -- 5  10

a, b = b, a
print(a, b)   -- 10  5

-- Works for three-way rotation too
local x, y, z = 1, 2, 3
x, y, z = z, x, y
print(x, y, z)  -- 3  1  2

Konvensi Nilai Kembalian pcall

pcall(f, ...) sendiri menggunakan beberapa nilai kembalian: nilai pertama adalah boolean (true saat berhasil, false saat terjadi galat), sedangkan nilai-nilai berikutnya adalah nilai kembalian f atau pesan galat. Selalu periksa nilai kembalian pertama sebelum menggunakan nilai lainnya.

local function risky(x)
  if x < 0 then error("negative input") end
  return math.sqrt(x)
end

local ok, result = pcall(risky, 16)
print(ok, result)   -- true  4.0

ok, result = pcall(risky, -1)
print(ok, result)   -- false  input:2: negative input

Pemeriksaan Cepat

Apa keluaran dari print((string.find("hello", "ll")))?

Ringkasan: Beberapa Nilai Kembalian

Hal-hal penting:

  • Kembalikan beberapa nilai: return a, b, c
  • Nilai berlebih dibuang; nilai yang kurang menjadi nil
  • Pemanggilan pada posisi tengah dipotong menjadi 1 nilai
  • (f()) memaksa tepat 1 nilai
  • table.pack/table.unpack untuk daftar nilai dinamis
  • Konvensi: kembalikan nil, errmsg saat gagal

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Beberapa Nilai Kembalian” gratis?

Ya — teks lengkap “Beberapa Nilai Kembalian” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Beberapa Nilai Kembalian”?

Kembalikan dan tangkap beberapa nilai dari satu pemanggilan fungsi. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Beberapa Nilai Kembalian” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mendefinisikan dan Memanggil Fungsi
  2. Beberapa Nilai Kembalian
  3. Vararg dan Operator ...
  4. Rekursi dalam Lua
← Kembali ke Lua Academy