Menu
CoddyTech

Mengurangkan Objek

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 27 dari 70.

Sama seperti __add menangani operator +, metamethod __sub menentukan perilaku untuk operator -. Polanya identik. Kamu mendefinisikan fungsi yang menerima dua operand dan mengembalikan objek baru.

local Color = {}
Color.__index = Color

function Color:new(r, g, b)
    local obj = {r = r, g = g, b = b}
    setmetatable(obj, Color)
    return obj
end

function Color.__sub(c1, c2)
    return Color:new(c1.r - c2.r, c1.g - c2.g, c1.b - c2.b)
end

Saat bekerja dengan warna RGB, pengurangan dapat menghasilkan nilai negatif. Dalam aplikasi nyata, kamu mungkin ingin membatasi hasil ke rentang yang valid (0-255), tetapi struktur inti metametode tetap sama.

local bright = Color:new(200, 150, 100)
local dim = Color:new(50, 30, 20)
local result = bright - dim

print(result.r, result.g, result.b)  -- output: 150  120  80

Ingat: definisikan __sub dengan titik (bukan titik dua) karena ini adalah metode meta yang dipanggil Lua secara langsung dengan kedua operand sebagai argumen.

challenge icon

Tantangan

Mudah

Mari kita buat class Color yang mendukung pengurangan menggunakan operator -. Warna direpresentasikan dengan nilai RGB, dan mengurangi satu warna dari warna lain akan menghasilkan warna baru dengan selisih setiap komponennya.

Kamu akan menyusun kodemu dalam dua file:

  • Color.lua: Definisikan class Color dengan komponen r, g, dan b yang merepresentasikan nilai merah, hijau, dan biru. Sertakan konstruktor :new(r, g, b) dan implementasikan metamethod __sub agar pengurangan dua warna menghasilkan warna baru dengan selisih setiap komponennya. Ingat, __sub menggunakan sintaks titik dan menerima kedua operand sebagai argumen.
  • main.lua: Gunakan require untuk memuat module Color, buat instance warna dari input yang diberikan, kurangkan keduanya, lalu tampilkan nilai RGB hasilnya.

Kamu akan menerima enam input:

  1. Komponen merah warna pertama
  2. Komponen hijau warna pertama
  3. Komponen biru warna pertama
  4. Komponen merah warna kedua
  5. Komponen hijau warna kedua
  6. Komponen biru warna kedua

Di file utamamu, buat dua warna dengan nilai RGB yang diberikan, kurangi warna kedua dari warna pertama menggunakan operator -, lalu cetak nilai r, g, dan b dari warna hasilnya pada baris terpisah.

Misalnya, jika inputnya adalah 200, 150, 100, 50, 30, 20, outputnya seharusnya:

150
120
80

Warna pertama (200, 150, 100) dikurangi warna kedua (50, 30, 20) menghasilkan warna baru (150, 120, 80).

Coba sendiri

-- Muat module Color
local Color = require('Color')

-- Baca nilai input
local r1 = tonumber(io.read())
local g1 = tonumber(io.read())
local b1 = tonumber(io.read())
local r2 = tonumber(io.read())
local g2 = tonumber(io.read())
local b2 = tonumber(io.read())

-- TODO: Buat dua instance Color dengan nilai RGB yang diberikan

-- TODO: Kurangi warna pertama dengan warna kedua menggunakan operator -

-- TODO: Cetak nilai r, g, dan b dari warna hasilnya pada baris terpisah
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler Lua online