Nesneleri Birleştirme
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 28 / 70.
Lua'daki .. operatörü dizeleri birleştirir, peki bir nesneyi bir dizeyle birleştirmek istersen ne olur? __concat metametodu bunun tam olarak nasıl çalışması gerektiğini tanımlamanı sağlar.
Lua, a .. b ifadesiyle karşılaştığında ve işlenenlerden birinin __concat metametodu varsa, bu işlevi her iki değerle birlikte çağırır. Bu, nesnelerin dize ifadelerine doğal bir şekilde dahil olmasını istediğinde kullanışlıdır.
local Name = {}
Name.__index = Name
function Name:new(first, last)
local obj = {first = first, last = last}
setmetatable(obj, Name)
return obj
end
function Name.__concat(a, b)
if type(a) == "string" then
return a .. b.first .. " " .. b.last
else
return a.first .. " " .. a.last .. b
end
endFonksiyonun hangi işlenenin dizge olduğunu kontrol ettiğine dikkat et. .., "Hello " .. obj veya obj .. "!" biçiminde kullanılabildiğinden, metametodun her iki durumu da ele almalıdır.
local person = Name:new("Ada", "Lovelace")
print("Dr. " .. person) -- Çıktı: Dr. Ada Lovelace
print(person .. " PhD") -- Çıktı: Ada Lovelace PhDDiğer operatör metametotları gibi, __concat gelenek gereği noktayla yazılır ve her iki işleneni de argüman olarak alır. Aritmetik metametotlardan temel farkı, genellikle farklı türlerle çalışmanızdır: nesneniz ve bir dize.
Görev
Kolay.. işleciyle dize ifadelerine doğal biçimde uyum sağlayabilen bir Title sınıfı oluşturalım. Bu, bir kişinin unvanına saygı ifadeleri veya ekler eklemek gibi, nesneleri dizelerle okunaklı ve sezgisel bir şekilde birleştirmek istediğinizde kullanışlıdır.
Kodunuzu iki dosyaya ayıracaksınız:
Title.lua: Unvan dizesini saklayantextalanına sahipTitlesınıfınızı tanımlayın. Bir:new(text)kurucusu ekleyin ve__concatmetayöntemini uygulayın. Metayönteminiz her iki durumu da ele almalı: dize nesneden önce geldiğinde ("prefix" .. obj) ve dize nesneden sonra geldiğinde (obj .. "suffix"). Sonuç, dizeyi unvanın metniyle uygun şekilde birleştirmelidir.main.lua:Titlemodülünüzü içe aktarın, bir unvan örneği oluşturun ve her iki yöndeki birleştirmeyi gösterin.
Üç girdi alacaksınız:
- Unvan metni (ör. "Engineer")
- Unvandan önce yerleştirilecek bir önek dizesi (ör. "Senior ")
- Unvandan sonra yerleştirilecek bir sonek dizesi (ör. " III")
Ana dosyanızda, verilen metinle bir Title oluşturun. Ardından iki birleştirme işlemi yapın ve her sonucu ayrı bir satıra yazdırın:
- Önek dizesini unvan nesnesiyle birleştirin
- Unvan nesnesini sonek dizesiyle birleştirin
Örneğin, girdiler Engineer, Senior ve III ise çıktı şöyle olmalıdır:
Senior Engineer
Engineer IIIİlk satır öneğin unvanla birleştirilmiş hâlini, ikinci satır ise unvanın sonekle birleştirilmiş hâlini gösterir. __concat metayönteminiz, dizelerin bu şekilde doğal biçimde birleştirilmesini sağlar!
Kendin dene
-- Girdileri oku
local titleText = io.read()
local prefix = io.read()
local suffix = io.read()
-- Title modülünü yükle
local Title = require('Title')
-- TODO: Verilen titleText ile bir Title örneği oluştur
-- TODO: prefix ile title nesnesini birleştir ve sonucu yazdır
-- TODO: title nesnesini suffix ile birleştir ve sonucu yazdır
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1'Self' Kavramı
Fonksiyonlu TablolarAçık 'self'İki Nokta SözdizimiNokta vs İki NoktaÖzet - Hareket Eden Nokta4Proje: Dijital Banka
Proje KurulumuPara Yatırma Metodu7Çok Biçimlilik ve Geçersiz Kılma
Metotları Geçersiz KılmaÜst Sınıf Metotlarını ÇağırmaDuck TypingOrtak ArayüzTür KontrolüÖzet - Çalışan Rolleri2Sınıf Prototip Kalıbı
Prototip Kavramı__index ile Bağlama:new() KurucusuÖznitelikleri BaşlatmaBağımsız ÖrneklerÖzet - Araba Fabrikası5OOP'de Operatör Aşırı Yükleme
Nesneleri ToplamaNesneleri ÇıkarmaNesneleri BirleştirmeNesneleri Karşılaştırma (<, >)Özet - Cüzdan Matematiği8Kapsülleme
Adlandırma KurallarıGizlilik için Closure'larClosure'lar Aracılığıyla ErişimSalt Okunur TablolarDoğrulama MantığıÖzet - Güvenli Kasa11Tasarım Kalıpları (Lite)
Fabrika FonksiyonlarıSingleton TablosuIterator KalıbıObserver (Dinleyici)Özet - Logger Fabrikası3Nesne Durumu ve Davranışı
Örnek DeğişkenleriGetter MetotlarıSetter MetotlarıHesaplanmış ÖzelliklerString BiçimlendirmeEşitlik KontrolleriÖzet - Öğrenci Notu6Kalıtımın Temelleri
Kalıtım KurulumuMetot KalıtımıConstructor'ı GenişletmeAlt Sınıf Metotları EklemePaylaşılan ve BenzersizÖzet - Şekil HiyerarşisiKendi başına pratik yap: Online Lua derleyicisi