Menu
CoddyTech

Setter method

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

Getter method memungkinkan kamu membaca data internal melalui titik akses yang terkontrol. Setter method (juga disebut method mutator) melakukan hal sebaliknya. Setter menyediakan cara terkontrol untuk mengubah state internal.

Alih-alih langsung menetapkan car.speed = 50, kamu memanggil car:setSpeed(50):

local Car = {}
Car.__index = Car

function Car:new()
    local instance = {}
    setmetatable(instance, self)
    instance.speed = 0
    return instance
end

function Car:setSpeed(newSpeed)
    self.speed = newSpeed
end

function Car:getSpeed()
    return self.speed
end

Sekilas, ini tampak seperti pekerjaan tambahan untuk hasil yang sama. Namun, setter menjadi berguna saat kamu perlu menambahkan aturan nantinya. Bayangkan kamu ingin memastikan kecepatan tidak pernah menjadi negatif atau melebihi batas maksimum:

function Car:setSpeed(newSpeed)
    if newSpeed < 0 then
        self.speed = 0
    elseif newSpeed > 200 then
        self.speed = 200
    else
        self.speed = newSpeed
    end
end

Sekarang setiap perubahan kecepatan melewati logika validasimu. Setiap kode yang menggunakan :setSpeed() otomatis mendapat manfaat dari pemeriksaan ini tanpa perlu diubah. Inilah nilai sebenarnya dari setter. Setter menyediakan satu titik untuk mengontrol perubahan data, sehingga object-mu lebih aman dan lebih mudah dipelihara.

challenge icon

Tantangan

Mudah

Mari buat class Thermostat yang menggunakan setter method untuk mengatur suhu dengan cerdas. Alih-alih mengizinkan nilai suhu apa pun, thermostat-mu akan menerapkan batas yang wajar agar suhu tetap berada dalam rentang yang nyaman.

Kamu akan menyusun kodemu dalam dua file:

  • Thermostat.lua: Definisikan class Thermostat menggunakan pola prototipe standar. Setiap thermostat harus melacak temperature saat ini. Sertakan:
    • Constructor :new() yang menginisialisasi suhu ke 20 (nilai bawaan yang nyaman)
    • Getter :getTemperature() yang mengembalikan suhu saat ini
    • Setter :setTemperature(newTemp) yang memperbarui suhu, tetapi menjaganya tetap dalam batas: minimum 10 dan maksimum 30
  • main.lua: Minta module Thermostat dan buat sebuah instance thermostat. Gunakan setter untuk mencoba beberapa perubahan suhu dan amati bagaimana batas diterapkan.

Method :setTemperature()-mu harus menerapkan aturan berikut:

  • Jika suhu baru di bawah 10, atur nilainya menjadi 10
  • Jika suhu baru di atas 30, atur nilainya menjadi 30
  • Jika tidak, atur nilainya ke nilai yang diminta

Kamu akan menerima dua input:

  1. Suhu pertama yang akan diatur
  2. Suhu kedua yang akan diatur

Di file utamamu, buat thermostat, lalu:

  1. Cetak suhu awal
  2. Atur suhu ke nilai input pertama, lalu cetak hasilnya
  3. Atur suhu ke nilai input kedua, lalu cetak hasilnya

Cetak setiap suhu pada baris tersendiri (hanya angkanya).

Contohnya, jika inputnya adalah 25 dan 50, output-nya harus seperti berikut:

20
25
30

Perhatikan bagaimana percobaan kedua untuk mengatur 50 menghasilkan 30: setter secara otomatis menerapkan batas maksimum!

Coba sendiri

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

-- Baca input
local temp1 = tonumber(io.read())
local temp2 = tonumber(io.read())

-- TODO: Buat instance termostat

-- TODO: Cetak suhu awal

-- TODO: Atur suhu ke temp1 dan cetak hasilnya

-- TODO: Atur suhu ke temp2 dan cetak hasilnya
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