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.

15. Tuzaklar — hepsi ölçüldü

Bu sayfadaki her madde denenmiş ve hata çıktısı görülmüştür. Hiçbiri tahmin değildir. "Şöyle olsa güzel olurdu" diye yazılmış bir dil özelliği aramayın: burada yazan, bugün derleyicinin yaptığıdır.

1. Ad yanlışları — en sık düşülen tuzak

Yanlış Doğru Ne olur
dondur don "böyle bir fonksiyon tanımlanmamış"
"x".buyuk() / .kucuk() .buyut() / .kucult() "class Metin nesnesinde böyle bir metot bulunamadı"
"x".baslar_mi() .ile_baslar() aynı hata
"x".biter_mi() .ile_biter() aynı hata
l.boyu l.uzunluk() alan bulunamadı
en_buyuk(a, b) eger a > b: iki argümanlı en_buyuk yoktur

2. degilse eger vardır

KabaLang
fonksiyon ana():
    n = 7
    eger n > 10:
        yazdir("büyük")
    degilse eger n > 5:
        yazdir("orta")
    degilse:
        yazdir("küçük")
ana()

⚠️ Bu kılavuzun eski sürümleri degilse egerin olmadığını söylüyordu; o eksik 2026-09-23'te giderildi. Yukarıdaki biçim bugün derlenir ve çalışır.

3. Listede toplam() / en_buyuk() / ters_cevir() yok

Derlenmez
l = [5, 3, 8]
yazdir(metin(l.toplam()))

Ölçülen hata: 'class QList<Sayı>' nesnesinde böyle bir metot veya alan bulunamadı 'toplam'. Bunlar döngüyle yazılır (4. sayfa).

4. baslat tutamacı yalnız birlikte: içinde

Derlenmez
fonksiyon kare(x):
    don x * x

g = baslat kare(6)
yazdir(metin(g.bekle()))

Derleyici: hata[KAPSAMSIZ_BASLAT] (kabalang acikla KAPSAMSIZ_BASLAT). Görev tutamacı kapsama bağlıdır (7. sayfa).

5. arkada_calistir yerel değişken yakalayamaz

Derlenmez
fonksiyon f():
    v = "yerel"
    arkada_calistir:
        yazdir(v)

f()

KACAK_YAKALAMA ile derleme durur — uyarı değil. Yerel değişken görev bitmeden yok olabilirdi. Çözüm: birlikte: + baslat.

6. sonuc yok sayılamaz

Derlenmez
fonksiyon kaydet() -> sonuc<sayi, Hata>:
    don tamam(1)

kaydet()

YOK_SAYILAN_SONUC. Üç meşru yol: ? ile yay · eger r.hatali_mi() ile karar ver · _ = kaydet() ile bilerek yok say.

⚠️ Bu hatanın altında bugün ilgisiz bir "Çözüm: görevi birlikte: kapsamına alın" satırı basılıyor (ölçüldü). Mesajın kendisi doğru, alt satırdaki öneri yanlış yere ait — ona bakmayın.

7. İki don dalı aynı türü döndürmeli

Derlenmez
fonksiyon ortalama(sayilar):
    eger sayilar.uzunluk() == 0:
        don 0
    toplam = 0
    dongu s icinde sayilar:
        toplam = toplam + s
    don toplam / sayilar.uzunluk()

yazdir(metin(ortalama([2, 4, 6])))

Derleme, don toplam / sayilar.uzunluk() satırında iki dalın farklı türler (Sayı ve Ondalık) döndürdüğünü söyleyen bir hatayla durur (bu ileti henüz Türkçeleştirilmedi, İngilizce görünür). Bölme ondalık ürettiği için boş dalda da don 0.0 yazılır.

8. Boş liste [] metin listesidir

Sayı toplayan bir fonksiyona [] geçmek derlemeyi kırar (ambiguous overload for 'operator+'). Boş durumu sınamak için sayı listesinden eleman silin:

KabaLang
fonksiyon topla_hepsini(sayilar):
    toplam = 0
    dongu s icinde sayilar:
        toplam = toplam + s
    don toplam

bos_sayilar = [0]
bos_sayilar.sil(0)

dogrula(topla_hepsini(bos_sayilar) == 0, "boş sayı listesi")
dogrula(topla_hepsini([1, 2, 3]) == 6, "dolu liste")
yazdir("boş liste tuzağı")

9. İşleve geçen liste, sözlük ve yapı kopyadır

Python'dan gelenler için en şaşırtıcı fark: işlev, aldığı listeyi ya da yapıyı değiştirdiğinde çağıranın değeri değişmez. İşlev kendi kopyası üzerinde çalışır.

KabaLang
fonksiyon ekle_bir(l):
    l.ekle(99)
    don l

yapi Sayac:
    n = 0

fonksiyon artir(s):
    s.n = 5

a = [1]
b = ekle_bir(a)
dogrula(a.uzunluk() == 1, "a değişmedi — işlev kopyayı değiştirdi")
dogrula(b.uzunluk() == 2, "değişiklik DÖNEN değerde")

s = Sayac()
artir(s)
dogrula(s.n == 0, "yapı da kopya olarak geçti")
yazdir("kopya tuzağı")

Değişikliği görmek için üç yol var:

  • değiştirilmiş değeri döndürüp yeniden atayın: a = ekle_bir(a);
  • değiştirme işini yapının metodu yapın: metot kendi nesnesi üzerinde çalışır (s.artir());
  • nesneyi gerçekten paylaşmak istiyorsanız sayilan<T> yapın: bütün başvurular aynı nesneyi görür (s = sayilan(Sayac()); ayrıntı ve döngü kuralı: 14. sayfa, Bellek modeli);
  • parametreyi degisir yapın — işlev çağıranın değişkenini yerinde değiştirir; çağrı yerinde & zorunludur (niyet iki tarafta da görünür):
KabaLang
fonksiyon ekle_bir(degisir l: liste<sayi>):
    l.ekle(99)

yapi Sayac:
    n = 0

fonksiyon artir(degisir s: Sayac):
    s.n = s.n + 1

a = [1]
ekle_bir(&a)
dogrula(a == [1, 99], "a yerinde değişti")
s = Sayac()
artir(&s)
dogrula(s.n == 1, "yapı yerinde değişti")

& bir yer ister: değişken, alan (&k.sayilar) ya da liste öğesi (&l[1]). &siz çağrı (DEGISIR_ISARET), aynı değişkeni iki degisir argümanına vermek (DEGISIR_CIFT), degismez bir ad ya da baslat ile göreve & derleme hatasıdır. İşlev içinden modül değişkenini & ile vermek de bir yazmadır: kuresel ister. Paylaşılan başvuru eklenmez (D6) — &siz geçen değer yine kopyadır.

(Eskiden bu bölümde anlatılan "yapı listesi yerinde yazılamaz" tuzağı giderildi: ozet([k]) ve hesap.ozet([hesap.Kayit()]) artık derleniyor.)

Benzer bir kural modül düzeyindeki değişkenler için de geçerli: fonksiyon onları okuyabilir ama değiştirmek için gövdesinin başında kuresel ad yazmalıdır — yoksa derleme hatası (KURESEL_BILDIRIMSIZ). Ayrıntı: 2. Temel sözdizimi.

10. EOF ile boş satır ayrı şeydir

konsol.satir_oku() bir belki<metin> döner: bos = girdi bitti, dolu("") = kullanıcı Enter'a bastı. Karıştırırsanız okuma döngünüz ya sonsuza kadar döner ya da erken biter (9. sayfa).

11. Servis tuzakları (üçü de ölçüldü)

  1. servis.uyu() dönüşünü denetleyin — yok sayarsanız SIGTERM duyulmaz, systemd SIGKILL atar, dururken kancası hiç çalışmaz.
  2. Döngü koşulu servis.calisiyor_mu() olmalı; iken dogru: yazarsanız servis yalnız öldürülerek durur.
  3. uyu() değil servis.uyu(): öbürü sinyalle uyanmaz, kapanış bir uyku süresi gecikir.

Ayrıca: servis "ad": bloğu olmayan bir programdan systemd birimi üretilmez (bilerek reddedilir) — öyle bir program açılır açılmaz biter ve systemd onu sonsuza kadar yeniden başlatır.

12. Web tuzakları

  • Sunucu varsayılan olarak yalnız 127.0.0.1i dinler. Ağa açmak açık karardır: web.sunucu(8080, "0.0.0.0").
  • İşleyiciler birden çok iş parçacığında koşar; paylaşılan değişkeni yazmak yarış koşuludur. Tek iş parçacığı: web.sunucu(port, adres, 1).
  • İşleyici yalnız kendisinden önce tanımlanmış değişkenleri görür; aşağıda tanımlanan sunucu değişkenine işleyici içinden erişilemez.
  • Kullanıcı verisi HTML'e girerken web.kacir() ile kaçırılır; kacir yalnız metin gövdesi içindir, öznitelik/script bağlamına yetmez.

13. Arayüz tuzakları

  • gorunur / etkin diye özellik yoktur; yazarsanız sessizce hiçbir şey olmaz (ölçüldü: derleyicide 0 eşleşme).
  • Mantık değerleri noktasız yazılır: secili = dogru. "doğru" yazmak değeri sessizce yanlışa düşürür.
  • Sayı bekleyen bir özelliğe metin yazmak (genislik = "abc") sessizce 0 olur — bileşen görünmez.
  • Değişkene etiket adını vermeyin: denetçi onu bileşen bildirimi sanar.

14. .kbl mi .kaba mı

.kbl kaynak koddur, .kaba kurulum paketidir. Derleyiciye .kaba verirseniz "bu bir kaynak kod dosyası değil" der ve durur.

15. Derleme önbelleği paylaşılır

KabaLang derlemeyi hızlandırmak için bir önbellek tutar. Aynı makinede iki ayrı iş (ör. CI'da paralel iki derleme) aynı önbelleği paylaşır. Hız ölçerken ya da işleri birbirinden yalıtmak istediğinizde her işe ayrı bir önbellek dizini verin:

Uçbirim
XDG_CACHE_HOME=/tmp/kendi-onbellegim kabalang derle ana.kbl
kabalang temizle        # önbelleği tümden sil

Geri dönüş

Başlangıç sayfası