KABAFORCEGeliştirici KabaOS'u edinin
Önizleme · 0.6.0 — dil 1.0 öncesidir; sözdizimi ve kütüphane değişebilir. Buradaki her örnek derlenerek sınanır.

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

KabaLang
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].

KabaLang
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:

KabaLang
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:

KabaLang
s = "kaba"
s = "K" + s[1..]
dogrula(s == "Kaba", "yeni metin")

Metin metotları

KabaLang
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ı):

KabaLang
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:

KabaLang
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:

KabaLang
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:

KabaLang
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.

KabaLang
sehir = "Şanlıurfa"
dogrula(sehir.uzunluk() == 9, "Türkçe harfler tek karakter sayılır")
yazdir(sehir.buyut())

Sonraki adım

4. Liste ve sözlük