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
endSekilas, 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
endSekarang 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.
Tantangan
MudahMari 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 classThermostatmenggunakan pola prototipe standar. Setiap thermostat harus melacaktemperaturesaat ini. Sertakan:- Constructor
:new()yang menginisialisasi suhu ke20(nilai bawaan yang nyaman) - Getter
:getTemperature()yang mengembalikan suhu saat ini - Setter
:setTemperature(newTemp)yang memperbarui suhu, tetapi menjaganya tetap dalam batas: minimum10dan maksimum30
- Constructor
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 menjadi10 - Jika suhu baru di atas
30, atur nilainya menjadi30 - Jika tidak, atur nilainya ke nilai yang diminta
Kamu akan menerima dua input:
- Suhu pertama yang akan diatur
- Suhu kedua yang akan diatur
Di file utamamu, buat thermostat, lalu:
- Cetak suhu awal
- Atur suhu ke nilai input pertama, lalu cetak hasilnya
- 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
30Perhatikan 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
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Konsep "Self"
Tabel dengan Fungsi'self' EksplisitSintaks Titik DuaTitik vs Titik DuaRangkuman, Titik Bergerak4Proyek: Bank Digital
Penyiapan Proyekmethod Setoran7Polimorfisme & Overriding
Menimpa methodMemanggil method indukDuck TypingAntarmuka UmumMemeriksa TipeRingkasan: Peran Karyawan10Proyek: Pengelola Bentuk
Penyiapan Proyekclass Rectangleclass Circlemethod KelilingKumpulan BentukLuas TotalSaring Bentuk2Pola Prototype untuk class
Konsep PrototypeMenghubungkan dengan __indexKonstruktor :new()Menginisialisasi AtributInstans yang MandiriRangkuman: Pabrik Mobil5Pembebanan Operator dalam OOP
Menjumlahkan ObjekMengurangkan ObjekMenggabungkan ObjekMembandingkan Objek (<, >)Ulasan: Aritmetika Dompet8Enkapsulasi
Konvensi PenamaanClosure untuk PrivasiAkses melalui ClosureTabel Hanya-BacaLogika ValidasiRangkuman: Brankas Aman11Pola Desain (Ringan)
Fungsi FactoryTabel SingletonPola IteratorObserver (Listener)Rangkuman, Factory Logger3State dan Behavior pada object
Variabel InstansGetter methodSetter methodProperty TerhitungMemformat stringPemeriksaan KesetaraanRangkuman: Nilai Siswa6Dasar-Dasar Pewarisan
Menyiapkan PewarisanMewarisi methodMemperluas KonstruktorMenambahkan method untuk ChildSama vs UnikRangkuman: Hierarki BentukLatihan sendiri: Compiler Lua online