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.

14. Anahtar sözcük başvurusu

Dilin bütün anahtar sözcükleri. Bu sayfa elle tutulan bir liste değildir: cekirdek/test_belge_ornekleri.py aşağıdaki tabloyu dilin tek tabanıyla (cekirdek/sozcukler.ANAHTARLAR ∪ cekirdek/linter.ANAHTAR_KELIMELER) iki yönlü karşılaştırır. Dile yeni bir anahtar sözcük eklenip buraya yazılmazsa test düşer; burada olup dilde olmayan bir sözcük yazılırsa da düşer.

⚠️ Anahtar sözcükler rezervedir: değişken ya da fonksiyon adı olarak kullanılamazlar.

Akış denetimi

Sözcük Ne yapar
eger koşullu blok
degilse koşul yanlışsa çalışan blok; degilse eger <koşul>: zincir kurar
iken koşul doğru olduğu sürece dönen döngü
dongu dongu x icinde liste: — liste/aralık üzerinde döngü · iki ad: dongu i, x icinde l.numarali():, dongu k, v icinde s.ciftler():
adim aralık döngüsünde artış: dongu i icinde 0..100 adim 5: · 10..0 adim -1 (bağlamsal: yalnız döngü başlığında aralıktan sonra; başka yerde sıradan ad)
icinde dongu ile ve KAVRAMAda kullanılan bağlaç
icin kavrama (comprehension): [x * 2 icin x icinde liste] · süzgeç eger ile: [x icin x icinde l eger x > 2] · sözlük biçimi {k: v icin k icinde l}
arayuz arayuz Ad: — uygulayan yapının yazacağı imzalar + varsayılan metotlar; yapi K(Ad): ile uyulur; yalnız statik gönderim (bağlamsal: kaba.arayuz modül adıyla çakışmaz) — 5. sayfa
genislet genislet Tur: — var olan türe metot ekler (gölgeleyemez; bağlamsal)
degisir fonksiyon f(degisir l: …) — çağıranın değişkenini değiştirir; çağrıda f(&l) zorunlu (bağlamsal)
esles desen eşleme: esles x: + kollar Desen: · çoklu A, B: · aralık 400..499: · koşullu Uye(a) eger a > 0: · _:; eksiksizlik denetlenir (ESLES_EKSIK). Bağlamsal (esles = 5 bir değişkendir) — 5. sayfa
kir döngüden çık · kir dis: dis: etiketli çevreleyen döngüden çık
devam döngünün bu turunu atla · devam dis: etiketli döngünün sonraki turuna geç
ad: (etiket) dis: dongu … / dis: iken … — döngüye kir/devam için ad verir (yeni sözcük değil)

Tanımlar

Sözcük Ne yapar
fonksiyon fonksiyon/metot tanımı
don fonksiyondan değer döndür (⚠️ dondur değil)
yapi veri yapısı (struct) tanımı
sinif selfli metotları ve kur kurucusu olan sınıf
sayilabilir kapalı değer kümesi (enum)
kullan modül içe aktarma (kullan kaba.sistem / kullan "dosya.kbl")
degismez sabit bildirimi: degismez PI = 3.14 — yeniden atama derleme hatası (bağlamsal; degismez = 7 bir değişkendir)
ozel dosya düzeyinde modül dışına kapalı tanım: ozel fonksiyon yardimci() (bağlamsal)
kuresel fonksiyonun başında: kuresel sayac — fonksiyon, dışarıda (modül düzeyinde) tanımlı değişkene YAZABİLİR. Bildirim yoksa yazmak derleme hatası (KURESEL_BILDIRIMSIZ); okumak serbest. Bkz. 2. Temel sözdizimi

Değerler ve işleçler

Sözcük Ne yapar
dogru mantıksal doğru
yanlis mantıksal yanlış
ve mantıksal VE
veya mantıksal VEYA
degil mantıksal DEĞİL
.. · ..< aralık: 1..5 üst sınır DAHİL · 0..<n üst sınır HARİÇ (döngüde, dilimde, kavramada)
& \| ^ ~ << >> bit işleçleri (yalnız sayi); mantık için ve/veya/degil

Hata yönetimi

Sözcük Ne yapar
dene istisna yakalanacak blok
yakala istisnayı yakalayan blok (yakala e: ya da yakala:)
firlat istisna fırlat
sonunda dene bloğundan nasıl çıkılırsa çıkılsın koşan temizlik: sonunda: (bağlamsal; 6. sayfa)

Eşzamanlılık

Sözcük Ne yapar
birlikte yapılandırılmış görev kapsamı; çıkmadan önce görevleri bekler
baslat kapsam içinde görev başlat (baslat f() / g = baslat f())
bekle görev tutamacını bekle (g.bekle()) — uyku için uyu(ms)
kanal görevler arası tipli kanal (kanal(n))
arkada_calistir kapsamsız arka plan bloğu (⚠️ yerel değişken yakalayamaz)
async ⚠️ rezerve, henüz uygulanmadı — bugün birlikte/baslat kullanılır

Servis yaşam döngüsü

Sözcük Ne yapar
baslarken servis başlarken bir kez çalışan blok
calisirken servisin ana gövdesi
dururken durdurma sinyalinde çalışan kapanış bloğu

⚠️ servis anahtar sözcük değildir: o bir modül adıdır (servis.baslat("sshd")). Anahtar sözcük yapılsaydı modül çağrıları sahte hata üretirdi.

Arayüz (GUI)

Sözcük Ne yapar
pencere pencere tanımı
izinler uygulamanın hak beyanı (AppArmor profili buradan üretilir)
sekme sekme_kutusu içinde bir sekme
zamanlayici zamanlayici 1000ms: — düzenli aralıkla çalışan blok
yatay_kutu bileşenleri yan yana dizen yerleşim
dikey_kutu bileşenleri alt alta dizen yerleşim
yineleyici yineleyici 3: / yineleyici ["a","b"]: — gövdeyi her öğe için yeniden üretir (10. sayfa, yineleyici bölümü)
oge yineleyici gövdesinde o anki öğe
sira yineleyici gövdesinde 0 tabanlı sıra numarası
tiklandiginda tıklama olayı
degistiginde değer değişimi olayı
cift_tiklandiginda çift tıklama olayı
secildiginde seçim olayı

Bellek modeli

Sözcük Ne yapar
sayilan sayilan<T> tipi / sayilan(x) — paylaşılan, başvurusu sayılan nesne
zayif zayif<T> tipi / zayif(s) — güçlü sayacı artırmayan başvuru, döngüyü kırar
arena arena AD: — blok içinde kurulan sayilan<T> nesneleri blok bitince tek seferde serbest

⚠️ arena, zayif ve sayilan rezerve DEĞİLDİR. Anlamları yalnız yukarıdaki dizilimlerde vardır; arena = 3 ya da zayif = 5 yazan kodunuz derlenmeye devam eder. (Rezerve etmek mevcut kodu iki kez kırmıştı.)

⚠️ yineleyici, oge ve sira da rezerve DEĞİLDİR — aynı gerekçe. sira = 3, oge = 7 ve yineleyici = 5 yazan kodunuz derlenmeye devam eder; oge/sira yalnız bir yineleyici gövdesinde öğe ve sıra anlamına gelir, başka her yerde sizin sıradan adınızdır. Bir satırın yineleyici başlığı sayılması için sözcükten sonra bir model gelmesi ve satırın : ile bitmesi (ya da açık bir [ bırakması) gerekir — yineleyici = 5 bu yüzden atamadır, başlık değildir. (cekirdek/test_yineleyici.py::KontrolGrubu bunu ölçer ve ölçüm sırasında gerçekten kırmızı yandı: ilk yazım yineleyici = 5i başlık sanıyordu.)

Paylaşılan nesne ve zayıf başvuru — KABALANG-BELLEK-MODELI.md §2. yapi bir değerdir (atama ve işleve geçirme kopyalar). Aynı nesneyi birden çok yerden görmek için onu sayilan<T> yapın:

KabaLang
yapi Dugum:
    ad = ""
    cocuklar: liste<sayilan<Dugum>> = []
    ebeveyn: zayif<Dugum> = bos          # çocuk→ebeveyn ZAYIF

kok = sayilan(Dugum("kok"))
c: sayilan<Dugum> = Dugum("c")           # tipli yerde kendiliğinden kutulanır
c.ebeveyn = kok                          # güçlü → zayıf kendiliğinden
kok.cocuklar.ekle(c)

takma = kok
takma.ad = "KÖK"                         # aynı nesne: kok.ad da "KÖK"
dogrula(kok.ad == "KÖK", "paylaşılan nesne")
dogrula(takma == kok, "== kimliktir")

esles c.ebeveyn.al():                    # al() → belki<sayilan<Dugum>>
    bos:
        yazdir("ebeveyn öldü")
    dolu(e):
        yazdir("ebeveyn: " + e.ad)
  • zayif<T>in alanı doğrudan okunamaz (hedef ölmüş olabilir): önce .al(). .canli_mi() yalnız durum sorar.
  • sayilan<T> alanı varsayılansız bırakılamaz; isteğe bağlıysa belki<sayilan<T>> yazın.
  • Metot içinde self nesnenin yüküdür; başka bir nesneye bu nesnenin başvurusunu vermek için tutamacı dışarıdan geçirin.

Döngü: ebeveyn→çocuk güçlü, çocuk→ebeveyn zayıf. İki yön de güçlü olursa nesneler sızar; derleyici uyarır:

⚠ [DONGU_RISKI] güçlü başvuru döngüsü: A → A.b → B.a → A — iki yön de
  güçlü, bu nesneler SIZAR
  ▸ öneri: geri yönü 'zayif<A>' yapın

Yalnız sayilan<…> bağları güçlü sayılır; düz yapi alanı (liste<Dugum>) bir kopyadır, döngü kurmaz.

Arena — KABALANG-BELLEK-MODELI.md §3:

KabaLang
yapi Dugum:
    deger = 0
    sonraki: belki<sayilan<Dugum>> = bos
    onceki: belki<sayilan<Dugum>> = bos   # bilerek güçlü: halka

fonksiyon halka(n: sayi) -> sayi:
    a = sayilan(Dugum(1))
    b = sayilan(Dugum(n))
    a.sonraki = dolu(b)
    b.onceki = dolu(a)                    # döngü: arenasız SIZARDI
    b.sonraki = dolu(a)
    don a.deger + b.deger

toplam = 0
arena istek:
    toplam = toplam + halka(5)            # sayi değer: dışarı taşınabilir
yazdir(metin(toplam))

Arena bloğunda (çağrılan işlevler dâhil) kurulan sayilan<T> nesneleri blok bitince — döngüdekiler dâhil — tek seferde gider. metin, liste, sozluk ve sayılar değer olduğundan arenadan etkilenmez, dışarı serbestçe taşınır.

⚠️ Kaçış kuralı: arenada kurulmuş olabilecek bir başvuru bloğun dışına yazılamaz (arenadan önce tanımlı değişkene, dış nesnenin alanına ya da listesine, don ile). Derleyici yakalar:

✗ [ARENA_KACISI] arena nesnesi bloktan dışarı sızıyor: 'istek' arenasında
  kurulmuş olabilecek bir başvuru arenadan önce tanımlı 'dis'ye atanıyor

Derleme anında görünmeyen kaçışı (ör. çağrılan işlevin küresel bir listeye eklemesi) arena kapanırken çalışma zamanı yakalar ve programı durdurur. Bloğun kendi tanımladığı başvuru değişkenleri bloktan sonra kullanılamaz.

Bellek raporu — kabalang calistir --bellek-izle dosya.kbl (ya da derle --bellek-izle) programın çıkışında stderre şunu basar: ayırma · serbest · yaşayan kutu sayısı (tür başına: metin, liste, sözlük, nesne, sayilan), arena tepesi, döngü saptayıcı (yalnız birbirine başvurarak yaşayan, yani sızmış sayilan nesneleri tür başına) ve süreç bellek tepesi. Programın stdoutu ve çıkış kodu değişmez.

Bugün yapılamayanlar — hepsi konumu ve alternatifiyle kayıtlı:

İstenen Neden yok Bugünkü yol
Kendi türünde değer alan (ebeveyn: Dugum) kendini kendi içinde taşıyan bir değer sonsuz büyüklükte olur ebeveyn: zayif<Dugum> ya da belki<sayilan<Dugum>>
guvensiz: bloğu KABALANG-SPEC.md §10da tasarlı, depoda eşleşme 0; FFI'nin kapısı zaten zorunlu izinler: beyanıyla kurulu bugünkü karşılığı izinler: dis_cagri = dogru
arena.olustur(ad) (adlandırılmış arena nesnesi) §6 gelecek uzantısı; bugün yalnız blok biçimi var arena AD: bloğu

Kaynak yönetimi (bağlam yöneticisi)

Sözcük Ne yapar
ile ile <kaynak> olarak <ad>: — blok nasıl biterse bitsin kaynağı serbest bırakır
olarak bağlanan ada isim verir — kullan "m.kbl" olarak gda da aynı iş

⚠️ ile ve olarak rezerve DEĞİLDİR. Anlamları yalnız yukarıdaki dizilimde vardır; ile = 3 ya da olarak = "x" yazan kodunuz derlenmeye devam eder. (ile Türkçenin en sık edatıdır; rezerve edilmesi en pahalı sözcüklerden biri olurdu.)

KabaLang
dosya.sil("/tmp/kb_belge.txt")
ile dosya.ac("/tmp/kb_belge.txt", "y") olarak d:
    d.yaz("blok bitince kapanır")
dogrula(dosya.acik_tutamac_sayisi() == 0, "tutamaç serbest bırakıldı")
dogrula(dosya.oku("/tmp/kb_belge.txt") == "blok bitince kapanır", "diske yazıldı")
dosya.sil("/tmp/kb_belge.txt")

Ayrıntı ve üç çıkış yolunun (normal · don · firlat) ölçümü: belgeler/19-baglam-yoneticisi.md.

Dış çağrı arayüzü (FFI)

Sözcük Ne yapar
dis dış (C) bildirimi açar: dis fonksiyon ... / dis kutuphane ...
kutuphane dis kutuphane "m" — bağlanacak C kütüphanesi (-lm)

⚠️ dis ve kutuphane rezerve DEĞİLDİR. Anlamları yalnız yukarıdaki dizilimde vardır; dis = 3 ya da kutuphane = "x" yazan kodunuz derlenmeye devam eder. (Rezerve etmek mevcut kodu iki kez kırmıştı.)

Düzenleyici ikisini de önerir ve üzerine gelince "bağlamsal anahtar sözcük (rezerve değil)" diye açıklar (cekirdek/lsp.py); renklendirme (Kate) de çalışır. Aynı şey arena ve zayif için de geçerlidir.

Yazım — KABALANG-SPEC.md §11:

izinler:
    dis_cagri = dogru

dis kutuphane "m"
dis "C" fonksiyon hypot(a: ondalik, b: ondalik) -> ondalik

# C'nin kendi genişlikleri — dönüşte ve parametrede
dis fonksiyon strlen(s: metin) -> c_ulong
dis fonksiyon atoi(s: metin) -> c_int
dis fonksiyon abs(x: c_int) -> c_int

# Değer döndürmeyen C işlevi
dis fonksiyon tzset() -> hic

dogrula(hypot(3.0, 4.0) == 5.0, "hypot(3,4) 5 olmali")
dogrula(strlen("merhaba") == 7, "strlen 7 olmali")
dogrula(atoi("42") == 42, "atoi 42 olmali")
dogrula(abs(-5) == 5, "abs 5 olmali")
tzset()

Kurallar

  • "C" yazılmazsa varsayılan "C"dir. Başka çağrı biçimi yoktur: yalnız C arayüzlü kütüphane işlevleri çağrılabilir.
  • Dönüş tipi ve her parametrenin tipi ZORUNLUDUR. Dış çağrıda tip çıkarımı yoktur; yanlış genişlik sessiz bellek bozulmasıdır.
  • Dilin tipleri: sayi (long long) · ondalik (double) · mantik (bool) · metin (const char*).
  • Bunların yanında C'nin kendi genişlikleri de yazılabilir (hic yalnız dönüşte):
Yazım C karşılığı Ne zaman
hic void C işlevi değer döndürmüyor (tzset · perror · abort)
c_int int en sık durum (atoi · strcmp · unlink · system)
c_uint unsigned int alarm · sleep
c_long long atol · random; ssize_t ve time_t de budur
c_ulong unsigned long strlen · strspn; size_t budur
c_ullong unsigned long long strtoull
c_float float strtof

⚠️ Neden gerekli: bildirim, sistem başlığındaki yazımla birebir uyuşmak zorundadır. sayi long longdur; int dönen bir işleve sayi demek conflicting declaration ile reddedilir. Ölçüldü (2026-09-26, /usr/include 9 temel başlık): bu genişlikler olmadan çağrılabilen işlev sayısı 4, onlarla 55. ⚠️ Genişlik adı değil, C yazımı esastır. long ile long long 64 bit sistemlerde ikisi de 64 bittir ama C için ayrı tiplerdir; bu yüzden adlar sayi64 gibi genişliğe göre değil, C'nin yazımına göredir. ⚠️ Parametrede daraltma denetlenir. Dönüş genişletmedir (değer korunur); parametre ise daraltmadır. abs(4294967296) gibi C tipine sığmayan bir değer sessizce kırpılmaz: çağrı yapılmaz ve program "… C tarafının tipine sığmıyor" çalışma hatasıyla durur. İşaretsiz tipe (c_uint …) negatif değer de aynı hatayı verir (usleep(-1) ~71 dakika uyumak yerine durur); c_floata sığmayan sonlu değer de öyle. ⚠️ hic dönen bir işlevin değeri kullanılamaz: a = tzset() Türkçe bir derleme hatası verir (DIS_HIC_DEGER); işlevi tek başına bir satırda çağırın. * izinler: bloğunda dis_cagri = dogru ZORUNLUDUR. İzin modelindeki tek zorunlu beyan budur; gerekçesi cekirdek/izin_denetimi.pyde ölçümüyle yazılı — dış çağrı, dilin bütün güvenlik varsayımlarını karşı tarafa devreder. ⚠️ Blok gövdesinin kuralları belgeler/10-arayuz-uygulamasi.mdde (izinler: bölümü): her satır anahtar = deger, bilinmeyen anahtar hata, mantıksal değer yalnız dogru/yanlis. Tanınan anahtarların kanonik kümesi cekirdek/izin_denetimi.py → IZIN_ANAHTARLARIdır; ikinci bir liste açılırsa içe aktarma anında durur. * metin dönüşü kopyalanır, serbest bırakılmaz: getenv statik tampon döner (serbest bırakmak çökme olurdu), strdup malloc'lu döner (bırakmamak sızıntı). Hangisi olduğu derleme zamanında bilinemez; çökmeyen taraf seçildi. Malloc'lu metin döndüren bir C işlevi çağırırsanız bellek sızar. * Bildirimler dosya düzeyindedir (girintisiz). Bir bloğun içine yazılamaz: C sembolü dosyanın tamamında tektir, bir bloğa ait olamaz. * kullan "x.kbl" ile alınan bir modüldeki dis bildirimi de geçerlidir; bildirim ve -l bayrağı programın tamamına taşınır. ⚠️ Beyan zorunluluğu da taşınır: modül FFI açıyorsa dis_cagri = dogru ANA dosyada yazılmalı. * Kütüphane hedefinde (tur = kutuphane) de dis yazılabilir; .so C kütüphanesine bağlanır. ⚠️ Beyan zorunluluğu burada da taşınır: kütüphanenin .kabaarayuz dosyası "dis_cagri": true taşır ve onu kullan eden uygulama da dis_cagri = dogru yazmak zorundadır. * ⚠️ Bildiriminiz sistemdeki gerçek C imzasıyla çelişirse derleme conflicting declaration hatasıyla durur. Bu bir kusur değil, KORUMADIR: çelişki sessizce geçseydi çağrı yanlış türlerle yapılırdı (ölçüldü). Örnek: strlen gerçekte size_t döner; -> sayi demek reddedilir. ⚠️ Bu ileti henüz Türkçeleştirilmedi, İngilizce görünür.

Bugün yapılamayanlar — hepsi cekirdek/dis_cagri.py::UYGULANMADI listesinde konumu ve alternatifiyle duruyor:

İstenen Neden yok Bugünkü yol
gosterici (ham gösterici) dilde sahiplik/ömür kuralı yok (KABALANG-BELLEK-MODELI.md). ⚠️ Ölçülen tüketici yok (2026-09-26): göstericili C yüzeyi isteyen dört kütüphane de kurulu, ama dördünün de KabaLang karşılığı zaten var — libcurl→kaba.ag, libarchive→kaba.arsiv, libcrypto→kaba.kripto, libsqlite3→kaba.veritabani göstericiyi C'de saklayıp sayi tutamaç döndüren ince sarmalayıcı
C yapısı (struct) geçirmek alan yerleşimi/hizalama dilde temsil edilmiyor; struct isteyen yüzeyler gosterici ile aynı dört kütüphanede ve hepsi sarılı → ölçülen tüketici yok alanları ayrı parametre olarak geçirin
dizi/tampon geçirmek uzunluk ve sahiplik sözleşmesi yok; libz.crc32 gibi tampon alan işlevlerin karşılığı kaba.kripto/kaba.arsivde → ölçülen tüketici yok öğeleri tek tek geçiren C sarmalayıcı
geri çağrı (callback) vermek KabaLang işlevleri yakaladıkları değişkenleri yanlarında taşır; böyle bir işlev C'nin beklediği düz işlev göstericisine çevrilemez. Geri çağrı isteyen yüzeyler (libcurl WRITEFUNCTION, qsort) sırasıyla kaba.agde ve liste.siralada → ölçülen tüketici yok —
guvensiz: bloğu KABALANG-SPEC.md §10da tasarlı, depoda eşleşme 0. ⚠️ Zorunlu kılmak çalışan her FFI programını kırardı; isteğe bağlı eklemek hiçbir şeyi güvenli yapmaz — yalnız yeni sözcük rezerve ederdi bugünkü karşılığı izinler: dis_cagri = dogru (zorunlu)
tur = kutuphane hedefinde dis ayrı derleme yolu extern "C" bloğunu ve -l<ad> bayrağını .soya taşımıyor (KABALANG-ABI.md) — açıkça REDDEDİLİR, sessizce kaybolmaz bildirimi uygulama hedefine ya da kullan "x.kbl" ile gömülen bir modüle koyun

Rezerve OLMAYAN özel adlar

Aşağıdakiler anahtar sözcük değildir; bunlar yerleşik fonksiyon ve tiplerdir. Kendi tanımınız onları gölgeler — self = 5 ya da bos = 1 yazan eski kodunuz çalışmaya devam eder. (Rezerve etmek mevcut kodu iki kez kırmıştı; bu yüzden bilerek böyle.)

Ad Ne
yazdir ekrana yaz
dogrula koşulu sına; yanlışsa 1 çıkış koduyla dur
metin · sayi · ondalik tür dönüşümü
tamam · hata sonuc<T,E> kurucuları
bos · dolu belki<T> kurucuları
uyu milisaniye uyu
cikis programı çıkış koduyla bitir
mesaj_kutusu · uyari_kutusu · hata_kutusu GUI iletişim kutuları
KomutSatiri komut satırı ayrıştırıcısı
self sınıf/yapı metodunda örtük ilk parametre
kur sınıf kurucusunun adı (fonksiyon kur(self, ...))
kopyala değerin bağımsız kopyası (arenadan değer taşımak için GEREKMEZ — değerler zaten kopyalanır)

Henüz olmayan sözcükler

Bu sözcükler dilde yoktur, ama yazdığınızda anlaşılmaz bir derleyici hatası yerine "henüz uygulanmadı" yanıtı alırsınız:

Sözcük Ne olacaktı Bugünkü yol
async eşzamansız fonksiyon birlikte / baslat

⚠️ Bunlar rezerve edilmemiştir: arayuz = 5 ya da ozel = 5 yazan eski kodunuz derlenmeye devam eder. Tanıma bağlamsaldır.

Henüz olmayan yazım: dekoratör (@ad)

@property gibi bir dekoratör satırı bir sözcük değil, bir yazımdır; bu yüzden yukarıdaki tablolarda geçmez. Dilde yoktur ve yazdığınızda ham bir sözcükleyici hatası değil, bugün çalışan yolu söyleyen bir teşhis alırsınız:

✗ [UYGULANMADI] 4:5 - `@property` — alan gibi okunan metot henüz
  desteklenmiyor — '@property' KabaLang'ın sözlüğünde YOK … Bugün: metodu
  METOT olarak çağırın … `k.etiket()`
Dekoratör Bugünkü yol
@property metodu metot olarak çağırın — k.etiket()
@<ad>.setter alana doğrudan atayın — k.ad = "Ayşe"
@staticmethod self parametresini hiç yazmayın
@classmethod modül düzeyinde üreteç fonksiyon yazın
@dataclass gerek yok — yapi kurucuyu ve ==i zaten üretir
başka her @ad sarmalamayı elle yapın (ayrı bir fonksiyon)

Karşılıkların çalışan tam örneği: 5. Yapı, sınıf ve sayılabilir.

⚠️ @ 2026-09-26'da ayraç olarak dile girdi; anahtar sözcük EKLENMEDİ. Bu yüzden property, dataclass gibi adlar hâlâ sizin değişken adınız olabilir — property = 5 derlenmeye devam eder.

Sonraki adım

15. Tuzaklar