Tür Dönüştürme ve Çevirme
Dizeler ve sayılar arasındaki otomatik tür dönüştürmeyi, ayrıca açıkça tonumber/tostring kullanımını öğrenin.
Tür Dönüştürme ve Çevirme, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
Tür Dönüştürme Nedir?
Tür dönüştürme, bağlam gerektirdiğinde bir değerin bir türden diğerine otomatik olarak dönüştürülmesidir. Lua, dönüştürmeyi iki belirli yönde gerçekleştirir: aritmetik bağlamlarda dizgeden sayıya ve birleştirme bağlamlarında sayıdan dizgeye.
JavaScript'in aksine Lua'daki dönüştürme sınırlı ve öngörülebilirdir. Boole değerlerini sayılara veya tabloları dizgelere otomatik olarak dönüştürmez.
-- String to number (arithmetic context)
print("10" + 5) -- 15 (coerced)
print("3.14" * 2) -- 6.28
-- Number to string (concatenation context)
print(10 .. "px") -- 10px
print(3.14 .. "!") -- 3.14!
-- No boolean coercion
-- print(true + 1) -- ERROR!Dizgeden Sayıya Dönüştürme Kuralları
Bir dizge aritmetik bir ifadede göründüğünde Lua onu sayıya dönüştürmeyi dener. Dizge geçerli bir sayıyı temsil etmiyorsa çalışma zamanı hatası oluşturulur. Geçerli sayısal dizgeler arasında tamsayılar ("42"), ondalıklı sayılar ("3.14"), onaltılık sayılar ("0xff") ve bilimsel gösterim ("1e3") bulunur.
Başında veya sonunda boşluk bulunan dizgeler kabul edilir; Lua dönüştürme sırasında bu boşlukları kaldırır.
print("42" + 0) -- 42 (integer)
print("3.14" + 0) -- 3.14 (float)
print("0xff" + 0) -- 255 (hex)
print(" 10 " + 0) -- 10 (whitespace ok)
print("1e3" + 0) -- 1000.0
-- This will error:
-- print("hello" + 0) -- attempt to perform arithmetic on a string valueSayıdan Dizgeye Dönüştürme
Bir sayıyı .. ile birleştirdiğinizde Lua sayıyı otomatik olarak dizgeye dönüştürür. Tamsayılar ondalık gösterimlerine dönüşür; ondalıklı sayılara ondalık basamaklar eklenebilir. Biçim üzerinde kesin denetim için örtük dönüştürmeye güvenmek yerine her zaman tostring() veya string.format() kullanın.
print(10 .. "!") -- 10!
print(3.14 .. "!") -- 3.14!
print(1/3 .. "!") -- 0.33333333333333!
-- Explicit is better for precision
print(string.format("%.2f", 1/3)) -- 0.33
print(tostring(10)) -- 10
print(tostring(10.0)) -- 10.0tonumber(): Açık Dönüştürme
tonumber(v), bir değeri açıkça sayıya dönüştürür. Başarılı olursa dönüştürülmüş sayıyı, dönüşüm başarısız olursa nil değerini döndürür; hiçbir zaman hata oluşturmaz. Tamsayı ayrıştırma için isteğe bağlı bir taban (2–36) belirtilebilir; bu sayede ikili, sekizli ve onaltılık dönüşümler yapılabilir.
Kullanıcı girdisini işlerken tonumber() işlevinin dönüş değerini her zaman nil açısından kontrol edin.
print(tonumber("42")) -- 42
print(tonumber("3.14")) -- 3.14
print(tonumber("0xFF")) -- 255
print(tonumber("hello")) -- nil (no error!)
print(tonumber(true)) -- nil
-- Base conversion
print(tonumber("ff", 16)) -- 255
print(tonumber("11", 2)) -- 3 (binary)
print(tonumber("77", 8)) -- 63 (octal)tostring(): Açık Dönüştürme
tostring(v), herhangi bir değeri dizgeye dönüştürür. Sayılar için ondalık veya bilimsel gösterimli bir dizge üretir. Boole değerleri için "true" veya "false" üretir. nil için "nil" döndürür. Tablolar ve işlevler için, bir __tostring meta yöntemi tanımlanmadığı sürece "table: 0x..." benzeri bir adres döndürür.
print(tostring(42)) -- 42
print(tostring(3.14)) -- 3.14
print(tostring(true)) -- true
print(tostring(false)) -- false
print(tostring(nil)) -- nil
print(tostring({})) -- table: 0x...
-- Useful for safe concatenation
local val = nil
local msg = "Value: " .. tostring(val)
print(msg) -- Value: nilmath.tointeger()
math.tointeger(x) (Lua 5.3+), yalnızca değerin tam bir tamsayı gösterimi varsa ondalıklı sayıyı tamsayıya dönüştürür. Dönüşüm kesinlik kaybına yol açacaksa nil döndürür. Bu, her zaman başarılı olan ancak sessizce kesme yapabilen math.floor() işlevinden daha güvenlidir.
Kesin tamsayı doğrulaması gerektiğinde, örneğin tam tamsayılar gerektiren API'lerle çalışırken bunu kullanın.
print(math.tointeger(5.0)) -- 5 (exact)
print(math.tointeger(5.5)) -- nil (not exact)
print(math.tointeger(2^53)) -- 9007199254740992
-- Contrast with math.floor
print(math.floor(5.9)) -- 5 (truncates)
print(math.floor(5.0)) -- 5
-- Check before use
local n = math.tointeger(val) or error("need integer")Karşılaştırmalarda Dönüştürme
Lua, eşitlik karşılaştırmalarında türleri dönüştürmez. İşlenenlerin türleri farklı olduğu için 1 == "1" her zaman false olur. Ancak ilişkisel operatörler (<, > vb.) dizgeler ile sayılar arasında dönüştürmeyi tetikler; fakat yalnızca her iki işlenen de aynı türdeyse. Sıralama karşılaştırmalarında türleri karıştırmak hataya neden olur.
print(1 == "1") -- false (no coercion)
print(1 == 1.0) -- true (int/float equal)
-- Ordering: same type only
print("abc" < "abd") -- true (string compare)
print(1 < 2) -- true (number compare)
-- This ERRORS: mixing string and number
-- print(1 < "2") -- attempt to compare number with stringUygulama: Kullanıcı Girdisini Ayrıştırma
Lua programlarında çok yaygın bir kalıp, kullanıcı girdisinden (örneğin io.read() aracılığıyla) bir dizge okumak ve bunu sayıya dönüştürmektir. Geçersiz girdiyi çökmeden düzgün biçimde ele almak için her zaman tonumber() kullanın ve sonucu nil açısından kontrol edin.
-- Safe input parsing pattern
local function parseNumber(input)
local n = tonumber(input)
if n == nil then
return nil, "Invalid number: " .. tostring(input)
end
return n, nil
end
local val, err = parseNumber("42")
print(val, err) -- 42 nil
local val2, err2 = parseNumber("abc")
print(val2, err2) -- nil Invalid number: abcTamsayı/Ondalıklı Sayı Kesinliği Tuzakları
Ondalıklı sayıların kesinliği sınırlıdır. Tamsayı ile ondalıklı sayıyı karıştıran işlemler, IEEE 754 gösterimi nedeniyle beklenmedik sonuçlar üretebilir. Bir double olarak gösterilebilen en büyük kesin tamsayı 2^53 = 9,007,199,254,740,992'dir. Bu değerin üzerindeki tamsayılar ondalıklı sayı olarak saklandığında kesinlik kaybeder.
Lua 5.3 ve üzerindeki yerleşik 64 bit tamsayılar, çok daha büyük olan 2^63-1'e kadar kesin değerleri destekler. Kesinlik önemli olduğunda her zaman tamsayı aritmetiğini kullanın.
-- Float precision limit
print(2^53) -- 9.007...e+15
print(2^53 + 1 == 2^53) -- true (precision lost!)
-- Integer stays exact
local big = math.maxinteger
print(big) -- 9223372036854775807
print(math.type(big)) -- integer
-- Mixing promotes to float
print(math.type(1 + 1.0)) -- floatDizge Biçimi Dönüşümleri
string.format(), kesinlik, dolgu ve gösterim üzerinde denetim gerektiğinde sayıdan dizgeye dönüşüm için en güçlü araçtır. C dilinin printf biçim belirleyicilerini kullanır. Görüntüleme, dosya çıktısı ve varsayılan tostring() gösteriminin yeterli olmadığı her yerde bunu kullanın.
print(string.format("%d", 255)) -- 255
print(string.format("%x", 255)) -- ff
print(string.format("%05d", 42)) -- 00042
print(string.format("%.2f", 3.14159)) -- 3.14
print(string.format("%e", 12345.0)) -- 1.234500e+04
print(string.format("%s=%d", "x", 10)) -- x=10Kısa Kontrol
Lua'da tonumber("hello") ne döndürür?
Özet: Tür Dönüştürme ve Dönüşüm
Öğrendikleriniz:
- Lua, aritmetikte dizgeleri sayılara, birleştirmede sayıları dizgelere otomatik olarak dönüştürür
tonumber()başarısızlık durumunda nil döndürür; her zaman kontrol edin!tostring()herhangi bir değeri güvenle dizgeye dönüştürür- Eşitlik (
==) hiçbir zaman dönüştürme yapmaz; farklı türler hiçbir zaman eşit değildir - Kesin sayı biçimlendirme için
string.format()kullanın - Ondalıklı sayı kesinliği sınırı 2^53'tür; büyük ve kesin değerler için yerleşik tamsayıları kullanın
Sıradaki konu: if/elseif/else ve döngülerle denetim akışı.
Sıkça Sorulan Sorular
“Tür Dönüştürme ve Çevirme” dersi ücretsiz mi?
Evet — “Tür Dönüştürme ve Çevirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Tür Dönüştürme ve Çevirme” dersinde ne öğreneceğim?
Dizeler ve sayılar arasındaki otomatik tür dönüştürmeyi, ayrıca açıkça tonumber/tostring kullanımını öğrenin. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Tür Dönüştürme ve Çevirme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Lua Veri Türlerine Genel Bakış
- Lua'da Değişken Tanımlama
- Aritmetik ve Karşılaştırma Operatörleri
- Tür Dönüştürme ve Çevirme