0Pricing
Lua Academy · Pelajaran

Operator Aritmetika dan Relasional

Gunakan +, -, *, /, //, %, ^ dan operator perbandingan secara efektif.

Operator Aritmetika dan Relasional adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Ikhtisar Operator Aritmetika

Lua menyediakan rangkaian lengkap operator aritmetika: + (menjumlahkan), - (mengurangkan), * (mengalikan), / (membagi menjadi pecahan), // (membagi dengan pembulatan ke bawah), % (modulo), ^ (perpangkatan), dan - uner (negasi). Memahami kapan setiap operator menghasilkan bilangan bulat atau pecahan sangat 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

Pembagian Bilangan Bulat dan Pecahan

Operator / selalu mengembalikan bilangan pecahan, bahkan saat membagi dua bilangan bulat yang hasil pembagiannya tepat. Operator pembagian dengan pembulatan ke bawah // hanya mengembalikan bilangan bulat jika kedua operand berupa bilangan bulat; jika salah satunya berupa bilangan pecahan, hasilnya berupa bilangan pecahan tetapi tetap dibulatkan ke bawah.

Operator perpangkatan ^ selalu mengonversi hasilnya menjadi bilangan pecahan, sehingga 2^3 menghasilkan 8.0, bukan 8. Gunakan math.tointeger() untuk mengonversinya kembali jika diperlukan.

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 % dalam Lua didefinisikan sebagai a % b == a - floor(a/b) * b. Artinya, tandanya mengikuti pembagi, bukan bilangan yang dibagi. Hal ini berbeda dari C/Java, yang hasilnya mengikuti tanda bilangan yang dibagi.

Operator modulo berguna untuk membungkus nilai, melakukan perulangan pada larik, dan mengimplementasikan buffer cincin. Penggunaan umum: i % n berputar 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 Relasional

Operator relasional Lua mengembalikan nilai boolean: == (sama), ~= (tidak sama), <, >, <=, >=. Perhatikan bahwa Lua menggunakan ~= untuk ketidaksetaraan, tidak seperti != pada kebanyakan bahasa.

Membandingkan nilai dari jenis yang berbeda dengan == selalu mengembalikan false — tidak ada pemaksaan tipe implisit untuk pemeriksaan kesetaraan. 1 == "1" bernilai false di 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 Logika: and, or, not

Operator logika Lua adalah and, or, dan not. Berbeda dari banyak bahasa lain, and dan or tidak mengembalikan nilai boolean—keduanya mengembalikan salah satu operandnya. Hal ini memungkinkan pola idiomatis seperti nilai bawaan 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 Ternary

Lua tidak memiliki operator ternary (?:), tetapi Anda dapat menirunya menggunakan and/or. Pola condition and value_if_true or value_if_false berfungsi selama value_if_true bukan nil atau false.

Ini adalah idiom Lua yang sangat umum. Perhatikan kasus khususnya: jika cabang true secara harfiah bernilai false, pola 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!)

Prioritas Operator

Prioritas operator Lua dari yang terendah hingga tertinggi: or, and, perbandingan (< > <= >= == ~=), |, ~, &, pergeseran bit, .., + -, * / // %, unary (not # - ~), ^. Operator ^ dan .. bersifat asosiatif kanan; semua operator lainnya bersifat asosiatif 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 Bitwise (Lua 5.3+)

Lua 5.3 menambahkan operator bitwise bawaan yang bekerja pada bilangan bulat: & (AND), | (OR), ~ (XOR jika biner, NOT jika unary), << (pergeseran kiri), >> (pergeseran kanan). Operator ini tidak tersedia di Lua 5.1/5.2 tanpa pustaka.

Operator bitwise memerlukan operand bilangan bulat. Memberikan bilangan pecahan menyebabkan galat saat runtime, kecuali bilangan pecahan tersebut memiliki nilai bilangan bulat 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 String dan Penggabungan

Operator # mengembalikan panjang string dalam byte, sedangkan operator .. menggabungkan dua string. Saat Anda menerapkan .. pada bilangan, Lua otomatis mengonversinya menjadi string. Namun, pencampuran tipe dengan + mengikuti aturan pemaksaan tipe—string yang tampak seperti bilangan dapat digunakan dalam operasi aritmetika.

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!)

Kesalahan Umum pada Operator

Beberapa galat yang berkaitan dengan operator sering terjadi di Lua: lupa bahwa / selalu mengembalikan bilangan pecahan; menggunakan != alih-alih ~= (galat sintaks); mengira 0 atau "" bernilai falsy (keduanya truthy); serta mengandalkan and/or ketika cabang true mungkin bernilai false.

Selalu uji kondisi batas, terutama pada pembagian bulat dengan bilangan negatif karena // membulatkan ke arah tak hingga 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!)

Pemeriksaan Cepat

Berapakah hasil -7 // 2 di Lua?

Ringkasan: Operator Aritmetika dan Relasional

Poin penting yang telah dibahas:

  • / selalu mengembalikan bilangan pecahan; // membulatkan ke arah tak hingga negatif
  • ^ selalu mengembalikan bilangan pecahan dan bersifat asosiatif kanan
  • ~= adalah operator tidak sama dengan (bukan !=)
  • and/or mengembalikan operand, bukan boolean—memungkinkan idiom nilai bawaan
  • Hanya nil dan false yang falsy—0 dan "" bernilai truthy
  • Operator bitwise (& | ~ << >>) memerlukan bilangan bulat Lua 5.3+

Berikutnya: pemaksaan tipe dan fungsi konversi eksplisit.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Operator Aritmetika dan Relasional” gratis?

Ya — teks lengkap “Operator Aritmetika dan Relasional” 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 “Operator Aritmetika dan Relasional”?

Gunakan +, -, *, /, //, %, ^ dan operator perbandingan secara efektif. 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 3 dari 4.

Berapa lama pelajaran “Operator Aritmetika dan Relasional” 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. Ikhtisar Tipe Data Lua
  2. Mendeklarasikan Variabel di Lua
  3. Operator Aritmetika dan Relasional
  4. Koersi dan Konversi Tipe
← Kembali ke Lua Academy