3. Metin ve Türkçe kuralları
KabaLang Türkçe bir dildir; metin işlemleri de Türkçe kurallara göre çalışır. Bu sayfa hem metin metotlarını hem de bu dilde neden özel davrandığını anlatır.
Metin oluşturmak
a = "çift tırnak"
b = "satır sonu\n ve sekme\t kaçışları çalışır"
ad = "Deniz"
c = f"biçimli metin: {ad}, {2 * 21}"
yazdir(a)
yazdir(b)
yazdir(c)Biçim belirteci — hizalama, basamak, binlik ayırıcı
f-string'te {ifade:belirteç} Python'un biçim diliyle çalışır:
[[dolgu]hiza][işaret][0][genişlik][,|_][.basamak][tür].
pi = 3.14159
ad = "Ada"
n = 42
dogrula(f"{pi:.2f}" == "3.14", "iki basamak")
dogrula(f"[{ad:<6}]" == "[Ada ]", "sola yasla")
dogrula(f"[{ad:>6}]" == "[ Ada]", "sağa yasla")
dogrula(f"[{ad:^7}]" == "[ Ada ]", "ortala")
dogrula(f"[{n:5}]" == "[ 42]", "sayı varsayılanı sağa")
dogrula(f"{n:05}" == "00042", "sıfır dolgu")
dogrula(f"{1234567:,}" == "1,234,567", "binlik ayırıcı")
dogrula(f"{1234567.891:,.2f}" == "1,234,567.89", "ayırıcı + basamak")
dogrula(f"{255:x}" == "ff", "onaltılık")
yazdir(f"{ad:<8}|{n:>6}|{pi:8.3f}")⚠️ Anlaşılmayan bir belirteç ({x:#x} gibi) sessizce yok sayılmaz,
çalışma hatası verir. Tablo hizalamak için ayrı bir işlev gerekmez.
Metinler + ile birleştirilir; sayıyı katmadan önce metin() ile çevirin:
adet = 3
yazdir("toplam " + metin(adet) + " kayıt")Metin değiştirilemez: s[0] = "K" derleme hatasıdır (METIN_DEGISMEZ).
Yeni bir metin kurup atayın:
s = "kaba"
s = "K" + s[1..]
dogrula(s == "Kaba", "yeni metin")Metin metotları
dogrula(" boşluklu ".kirp() == "boşluklu", "kirp")
dogrula("abc".uzunluk() == 3, "uzunluk")
dogrula("abc".icerir("b"), "icerir")
dogrula("abc".ile_baslar("ab"), "ile_baslar")
dogrula("abc".ile_biter("bc"), "ile_biter")
dogrula("a-b".degistir("-", "+") == "a+b", "degistir")
dogrula("a,b,c".bol(",").uzunluk() == 3, "bol")
dogrula(["a", "b"].birlestir("-") == "a-b", "birlestir")
dogrula("ab".tekrarla(3) == "ababab", "tekrarla")
dogrula("abcdef".dilim(1, 3) == "bcd", "dilim(baslangic, adet)")
dogrula("abcdef".bastan(2) == "ab", "bastan")
dogrula("abcdef".sondan(2) == "ef", "sondan")
dogrula("abc".bul("b") == 1, "bul — bulunamazsa -1")
dogrula("".bos_mu(), "bos_mu")
yazdir("metin metotları tamam")Metin metotları yeni metin döndürür, alıcıyı değiştirmez (değer anlamı):
s = "a-b"
t = s.degistir("-", "+")
dogrula(s == "a-b" ve t == "a+b", "alıcı aynı kaldı")Sonucu atılan s.degistir(...) deyimi hiçbir şey yapmayacağı için derleme
hatasıdır (DEGISTIR_SONUCU): s = s.degistir(...) yazın. (0.5 ve 0.6'nın
ilk sürümleri alıcıyı da yerinde güncelliyordu — D11 ile düzeltildi.)
| Metot | Ne yapar |
|---|---|
.uzunluk() |
kod noktası sayısı |
.kirp() |
baştaki/sondaki boşlukları atar |
.buyut() / .kucult() |
Türkçe büyük/küçük harf |
.buyut_degismez() / .kucult_degismez() |
dil bağımsız (ASCII) büyük/küçük harf |
.icerir(x) · .ile_baslar(x) · .ile_biter(x) |
arama |
.degistir(eski, yeni) |
değiştirme |
.bol(ayrac) |
listeye böler |
.birlestir(ayrac) |
listeyi metne birleştirir |
.dilim(baslangic, adet) · .bastan(n) · .sondan(n) |
parça alma |
.bul(x) |
ilk konum, yoksa -1 |
.tekrarla(n) · .bos_mu() |
— |
⚠️ Adlara dikkat: uzunluk .uzunluk()tir; büyütme .buyut(),
küçültme .kucult()tür. buyuk() / kucuk() diye metin metodu
yoktur (ölçüldü — 'class Metin' nesnesinde böyle bir metot bulunamadı).
Türkçe büyük/küçük harf
Bu dilin en önemli ayrıntılarından biri. Genel amaçlı kütüphaneler i/I
dönüşümünü İngilizceye göre yapar ve Türkçede yanlış sonuç verir.
KabaLang bunu düzeltir:
dogrula("istanbul".buyut() == "İSTANBUL", "i → İ")
dogrula("IRMAK".kucult() == "ırmak", "I → ı")
dogrula("ığdır çorum şişli öğüt".buyut() == "IĞDIR ÇORUM ŞİŞLİ ÖĞÜT", "tüm harfler")
# Gidiş-dönüş metni BOZMAZ:
dogrula("ÖĞÜT ŞİŞLİ".kucult().buyut() == "ÖĞÜT ŞİŞLİ", "gidiş-dönüş")
dogrula("ÖĞÜT ŞİŞLİ".kucult().uzunluk() == 10, "uzunluk korunur")
yazdir("Türkçe harf kuralları tamam")⚠️ Neden uzunluk() sınanıyor? Unicode'un genel kuralında
"İ".kucult() iki kod noktası üretir (i + birleşen nokta) ve metin
sessizce uzar — 10 karakterlik metin 12 olur. KabaLang bunu yapmaz; bu
sessiz veri bozulması ölçülüp giderilmiştir.
Protokol, dosya adı, anahtar sözcük gibi dil bağımsız davranış gereken yerlerde açık kaçış yolunu kullanın:
dogrula("istanbul".buyut_degismez() == "ISTANBUL", "dil bağımsız büyütme")
dogrula("IRMAK".kucult_degismez() == "irmak", "dil bağımsız küçültme")
yazdir("değişmez biçimler tamam")Türkçe sıralama
Liste sıralaması da Türk alfabesine göredir (a < ç < ı < i < o < ş),
kod noktası sırasına göre değil:
s = ["İzmir", "Ağrı", "Çorum", "Şırnak", "Ordu", "Isparta"]
s.sirala()
yazdir(f"{s}")
dogrula(s[0] == "Ağrı", "Ağrı başta olmalı")
# Kod noktası sırası gerekiyorsa (protokol/karşılaştırma):
k = ["İzmir", "Ağrı", "Çorum"]
k.sirala_kod_noktasi()
yazdir(f"{k}")Metin de Unicode'dur
Kaynak dosyalar UTF-8'dir; değişken ve fonksiyon adlarında da Türkçe harfler kullanılabilir, metin içeriği zaten tam Unicode'dur.
sehir = "Şanlıurfa"
dogrula(sehir.uzunluk() == 9, "Türkçe harfler tek karakter sayılır")
yazdir(sehir.buyut())