Lua Academy · Pelajaran

Operator Aritmetik dan Perbandingan

Gunakan operator +, -, *, /, //, %, ^ dan operator perbandingan dengan berkesan.

Pelajaran 3 daripada 412 langkah

Operator Aritmetik dan Perbandingan ialah pelajaran Lua Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Lua Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Gambaran Keseluruhan Operator Aritmetik

Lua menyediakan set lengkap operator aritmetik: + (tambah), - (tolak), * (darab), / (bahagi apungan), // (bahagi lantai), % (modulo), ^ (penjanaan kuasa) dan - uner (penafian). Memahami masa setiap operator mengembalikan integer berbanding apungan amat penting dalam Lua 5.3+.

print(10 + 3)   -- 13
print(10 - 3)   -- 7
print(10 * 3)   -- 30
print(10 / 3)   -- 3.3333...  (always float)
print(10 // 3)  -- 3          (floor division)
print(10 % 3)   -- 1          (modulo)
print(2 ^ 10)   -- 1024.0     (always float)
print(-5)       -- -5

Pembahagian Integer berbanding Apungan

Operator / sentiasa mengembalikan apungan, walaupun apabila dua integer yang dibahagi menghasilkan hasil tepat. Operator pembahagian lantai // mengembalikan integer hanya apabila kedua-dua operan ialah integer; jika salah satunya ialah apungan, hasilnya ialah apungan tetapi masih dibundarkan ke bawah.

Operator penjanaan kuasa ^ sentiasa menukar nilai kepada apungan, jadi 2^3 menghasilkan 8.0, bukannya 8. Gunakan math.tointeger() untuk menukarnya semula jika perlu.

print(6 / 2)        -- 3.0  (float!)
print(6 // 2)       -- 3    (integer)
print(6.0 // 2)     -- 3.0  (float floor)
print(7 // 2)       -- 3    (floor toward -inf)
print(-7 // 2)      -- -4   (floor, not truncate!)
print(2 ^ 3)        -- 8.0  (always float)

Operator Modulo

Operator % Lua ditakrifkan sebagai a % b == a - floor(a/b) * b. Ini bermaksud tandanya mengikut pembahagi, bukannya yang dibahagi. Hal ini berbeza daripada C/Java, yang hasilnya mengikut tanda yang dibahagi.

Operator modulo berguna untuk membalut nilai, mengitar item dalam tatasusunan dan melaksanakan penimbal gelang. Kegunaan biasa: i % n mengitar nilai dari 0 hingga n-1.

print(10 % 3)    --  1  (positive)
print(-10 % 3)   --  2  (sign of divisor!)
print(10 % -3)   -- -2  (sign of divisor)

-- Cycling 1..5 example
for i = 1, 8 do
  local idx = (i - 1) % 5 + 1
  io.write(idx .. " ")  -- 1 2 3 4 5 1 2 3
end

Operator Hubungan

Operator hubungan Lua mengembalikan boolean: == (sama), ~= (tidak sama), <, >, <=, >=. Perhatikan bahawa Lua menggunakan ~= untuk ketaksamaan, tidak seperti != dalam kebanyakan bahasa.

Membandingkan nilai daripada jenis berbeza dengan == sentiasa mengembalikan false — tiada penukaran tersirat untuk semakan kesamaan. 1 == "1" ialah false dalam Lua.

print(3 == 3)    -- true
print(3 ~= 4)    -- true
print(3 < 4)     -- true
print(3 >= 3)    -- true

-- No cross-type equality coercion
print(1 == "1")  -- false
print(0 == false) -- false

-- Strings compare lexicographically
print("abc" < "abd")  -- true

Operator Logik: and, or, not

Operator logik Lua ialah and, or dan not. Tidak seperti kebanyakan bahasa lain, and dan or tidak mengembalikan nilai boolean — sebaliknya, kedua-duanya mengembalikan salah satu operannya. Ciri ini membolehkan corak idiomatik seperti nilai lalai dan penetapan bersyarat.

  • a and b mengembalikan a jika a bernilai falsy; jika tidak, mengembalikan b
  • a or b mengembalikan a jika a bernilai truthy; jika tidak, mengembalikan b
-- and/or return operands, not booleans
print(1 and 2)        -- 2
print(false and 2)    -- false
print(1 or 2)         -- 1
print(false or 2)     -- 2

-- Default value idiom
local name = nil
local display = name or "Anonymous"
print(display)        -- Anonymous

Idiom Ternari

Lua tidak mempunyai operator ternari (?:), tetapi anda boleh menirunya menggunakan and/or. Corak condition and value_if_true or value_if_false berfungsi selagi value_if_true bukan nil atau false.

Ini ialah idiom Lua yang sangat biasa. Beri perhatian kepada kes pinggir: jika cabang benar secara literal ialah false, corak ini gagal — gunakan pernyataan if sebagai gantinya.

local x = 10
-- Ternary idiom
local label = x > 5 and "big" or "small"
print(label)   -- big

-- Works for non-false truthy values
local age = 20
local status = age >= 18 and "adult" or "minor"
print(status)  -- adult

-- Edge case: true branch is false -> use if
local val = true and false or "fallback"
print(val)  -- fallback (wrong!)

Keutamaan Operator

Keutamaan operator Lua daripada paling rendah hingga paling tinggi: or, and, perbandingan (< > <= >= == ~=), |, ~, &, anjakan, .., + -, * / // %, uner (not # - ~), ^. Operator ^ dan .. bersekutu ke kanan; semua operator lain bersekutu ke kiri.

-- Precedence examples
print(2 + 3 * 4)     -- 14  (not 20)
print(2 ^ 3 ^ 2)     -- 512 (right assoc: 2^(3^2) = 2^9)
print(not 1 == 1)    -- false (not (1) == 1 => false == 1)
print(not (1 == 1))  -- false

-- Use parens to be explicit
print((2 + 3) * 4)   -- 20

Operator Bit (Lua 5.3+)

Lua 5.3 menambahkan operator bit asli yang berfungsi pada integer: & (AND), | (OR), ~ (XOR apabila binari, NOT apabila uner), << (anjak kiri), >> (anjak kanan). Operator ini tidak tersedia dalam Lua 5.1/5.2 tanpa pustaka.

Operator bit memerlukan operan integer. Menghantar float akan menyebabkan ralat masa jalan, kecuali float tersebut mempunyai nilai integer yang tepat.

-- Bitwise operators (Lua 5.3+)
print(0xFF & 0x0F)   -- 15  (AND)
print(0xF0 | 0x0F)   -- 255 (OR)
print(0xFF ~ 0x0F)   -- 240 (XOR)
print(~0)            -- -1  (bitwise NOT)
print(1 << 4)        -- 16  (left shift)
print(256 >> 4)      -- 16  (right shift)

Panjang Rentetan dan Penggabungan

Operator # mengembalikan panjang rentetan dalam bait, manakala operator .. menggabungkan dua rentetan. Apabila anda menggunakan .. pada nombor, Lua menukarkannya kepada rentetan secara automatik. Walau bagaimanapun, pencampuran jenis dengan + mengikut peraturan pemaksaan — rentetan yang kelihatan seperti nombor boleh digunakan dalam aritmetik.

local s = "hello"
print(#s)            -- 5
print(s .. " world") -- hello world
print(1 .. 2)        -- 12  (number to string)

-- Length of table = array part length
local t = {10, 20, 30}
print(#t)   -- 3

-- Beware: # on tables with holes is undefined
local h = {1, nil, 3}
print(#h)   -- 1 or 3 (undefined behavior!)

Kesilapan Lazim dengan Operator

Beberapa pepijat berkaitan operator sering berlaku dalam Lua: terlupa bahawa / sentiasa mengembalikan float; menggunakan != dan bukannya ~= (ralat sintaks); menjangkakan 0 atau "" bernilai falsy (kedua-duanya truthy); dan bergantung pada and/or apabila cabang benar mungkin bernilai false.

Sentiasa uji keadaan sempadan, khususnya pembahagian lantai dengan nombor negatif apabila // membundarkan ke arah infiniti negatif.

-- Common mistakes
-- 1. / is always float
local result = 10 / 2
print(math.type(result))  -- float, not integer!

-- 2. ~= not !=
-- if x != 5 then  -- SYNTAX ERROR!
if 3 ~= 5 then print("not equal") end

-- 3. 0 is truthy
if 0 then print("0 is truthy in Lua!") end

-- 4. Negative floor division
print(-7 // 2)  -- -4 (not -3!)

Semakan Pantas

Apakah hasil -7 // 2 dalam Lua?

Imbas Kembali: Operator Aritmetik dan Hubungan

Perkara utama yang dibincangkan:

  • / sentiasa mengembalikan float; // membundarkan ke arah infiniti negatif
  • ^ sentiasa mengembalikan float dan bersekutu ke kanan
  • ~= ialah operator tidak sama dengan (bukan !=)
  • and/or mengembalikan operan, bukan boolean — membolehkan idiom nilai lalai
  • Hanya nil dan false bernilai falsy — 0 dan "" bernilai truthy
  • Operator bit (& | ~ << >>) memerlukan integer Lua 5.3+

Seterusnya: pemaksaan jenis dan fungsi penukaran eksplisit.

Percuma untuk bermula

Pelajari Lua dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
40
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Operator Aritmetik dan Perbandingan” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Lua Academy, termasuk “Operator Aritmetik dan Perbandingan”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Operator Aritmetik dan Perbandingan”?

Gunakan operator +, -, *, /, //, %, ^ dan operator perbandingan dengan berkesan. Anda berlatih Lua Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Lua Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Lua Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Operator Aritmetik dan Perbandingan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Gambaran Keseluruhan Jenis Data Lua
  2. Mengisytiharkan Pemboleh Ubah dalam Lua
  3. Operator Aritmetik dan Perbandingan
  4. Paksaan dan Penukaran Jenis
← Kembali ke Lua Academy