Menu
Coddy logo textTech

String Biçimlendirme

Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 16 / 70.

Bir nesneyi doğrudan yazdırdığında Lua, table: 0x55a... gibi pek yardımcı olmayan bir şey gösterir. Yalnızca bir bellek adresi. __tostring metametodu, nesnen yazdırıldığında veya metne dönüştürüldüğünde onu tam olarak hangi dizenin temsil edeceğini tanımlamanı sağlar.

Sınıf deseninde, sınıf tablonuza bir işlev olarak __tostring eklersiniz. Sınıfın kendisi örnekler için metatablo görevi gördüğünden Lua bu işlevi otomatik olarak bulur ve kullanır:

local Player = {}
Player.__index = Player

function Player:new(name, level)
    local instance = {}
    setmetatable(instance, self)
    instance.name = name
    instance.level = level
    return instance
end

function Player:__tostring()
    return "Player: " .. self.name .. " (Level " .. self.level .. ")"
end

Şimdi bir Player örneğini yazdırdığınızda Lua, __tostring metodunuzu otomatik olarak çağırır:

local hero = Player:new("Luna", 5)
print(hero)  -- Çıktı: Player: Luna (Level 5)

__tostring işlevinin iki nokta üst üste söz dizimini kullandığına ve self aldığına dikkat edin; bu sayede tüm örnek verilerine erişebilirsiniz. İşlev bir dize döndürmelidir. Nesneniz için anlamlı olduğu şekilde biçimlendirebilir, tüm öznitelikleri okunabilir bir gösterimde birleştirebilirsiniz.

challenge icon

Görev

Kolay

Kendini tanıtmayı bilen bir Book sınıfı oluşturalım! Bir kitabı doğrudan yazdırdığınızda Lua, anlaşılması güç bir bellek adresi yerine düzgün biçimlendirilmiş bir dize görüntüler: tüm bunlar __tostring metamethod'u sayesinde gerçekleşir.

Kodunuzu iki dosyaya ayıracaksınız:

  • Book.lua: Standart prototip kalıbını kullanarak Book sınıfınızı tanımlayın. Her kitap bir title ve bir author saklamalıdır. Bir :new(title, author) kurucusu ekleyin ve bir kitabı yazdırmanın bilgilerini okunabilir bir biçimde görüntülemesini sağlamak için __tostring metamethod'unu uygulayın.
  • main.lua: Book modülünü require edin, kitap örnekleri oluşturun ve özel dize biçimlendirmenizi çalışırken görmek için bunları doğrudan yazdırın.

__tostring metodunuz tam olarak şu biçimde bir dize döndürmelidir:

"[title]" by [author]

Başlığın çıktı dizesi içinde çift tırnaklarla çevrelendiğine dikkat edin.

Dört girdi alacaksınız:

  1. İlk kitabın başlığı
  2. İlk kitabın yazarı
  3. İkinci kitabın başlığı
  4. İkinci kitabın yazarı

Ana dosyanızda, verilen girdileri kullanarak iki kitap oluşturun ve her kitabı doğrudan (bir metodu çağırarak değil, yalnızca print(book) kullanarak) yazdırın. Her kitap kendi satırında görünmelidir.

Örneğin girdiler The Hobbit, J.R.R. Tolkien, 1984 ve George Orwell ise çıktı şöyle olmalıdır:

"The Hobbit" by J.R.R. Tolkien
"1984" by George Orwell

__tostring'un bir dize döndürmesi gerektiğini ve sınıf tablonuz örnekler için metatablo görevi gördüğünden, Lua'nın bir kitabı yazdırdığınızda __tostring işlevinizi otomatik olarak bulup kullanacağını unutmayın.

Kendin dene

-- Book modülünü yükle
local Book = require('Book')

-- Girdileri oku
local title1 = io.read()
local author1 = io.read()
local title2 = io.read()
local author2 = io.read()

-- TODO: Book:new() kullanarak iki kitap örneği oluştur


-- TODO: Her kitabı doğrudan yazdır (sadece print(book) kullan)

quiz iconKendini test et

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

Kendi başına pratik yap: Online Lua derleyicisi