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.

9. Konsol uygulaması

Uçbirimde çalışan, argüman alan, girdi okuyan program. KabaLang'in en hafif uygulama türüdür: ek kütüphane gerektirmez, ikili birkaç on kilobayttır.

Hazır iskelet: kabalang yeni <ad> --konsol (13. sayfa).

En küçük konsol programı

KabaLang
kullan kaba.sistem

fonksiyon ana():
    yazdir("=== Rapor ===")
    yazdir("makine: " + sistem.makine_adi())
    don 0

ana()

Komut satırı argümanları — KomutSatiri

Bayrakları elle ayrıştırmayın. KomutSatiri tanımdan --yardim metnini de kendiliğinden üretir.

KabaLang
kullan kaba.sistem

ks = KomutSatiri("selam", "Girdiyi okur, isterse karakterlerini sayar")
ks.secenek("kisi", "k", "Selamlanacak kişinin adı")     # --kisi DEGER / -k DEGER
ks.bayrak("sayac", "s", "Karakter sayısını da yaz")     # --sayac / -s
ks.konumsal("onek", "Çıktının başına konacak ön ek")    # sıralı argüman

c = ks.coz()

# Yardım ve hata AYRI ele alınır:
eger c.yardim_mi():
    c.yardim_yaz()
    cikis(0)

eger c.hatali_mi():
    c.hata_yaz_ve_cik()          # stderr'e yazar, çıkış kodu 2

kisi = c.secenek("kisi").deger_veya("dünya")
onek = c.konumsal("onek").deger_veya("»")

yazdir(f"{onek} Merhaba {kisi}!")
eger c.bayrak("sayac"):
    yazdir(f"{onek} ad uzunluğu: {kisi.uzunluk()}")
Tanım Kullanıcı ne yazar
ks.secenek("kisi", "k", aciklama) --kisi Ayşe ya da -k Ayşe
ks.bayrak("sayac", "s", aciklama) --sayac ya da -s (değer almaz)
ks.konumsal("onek", aciklama) sırayla verilen argüman

⚠️ Tanımsız seçenek sessizce yok sayılmaz: c.hatali_mi() doğru olur, hata_yaz_ve_cik() stderr'e yazıp çıkış kodunu 2 yapar. Kabuk betikleri yanlış kullanımı böyle görebilir.

⚠️ Değişkene etiket adını vermeyin: etiket bir arayüz bileşeni türüdür ve denetçi etiket = ... satırını bileşen bildirimi sanar (ölçülmüş denetçi sınırı).

Kullanıcıdan girdi okumak

KabaLang
kullan kaba.sistem

# İstem yalnız gerçekten bir insan varsa yazılır — boruya yazmak çıktıyı kirletir.
eger konsol.etkilesimli_mi():
    konsol.yaz("Satır yazın (bitirmek için Ctrl-D): ")

satir_sayisi = 0
iken dogru:
    s = konsol.satir_oku()
    eger s.bos_mu():             # ⚠️ DOSYA SONU — boş satır DEĞİL
        kir
    satir_sayisi = satir_sayisi + 1
    yazdir(f"» {s.deger()}  [{s.deger().uzunluk()} karakter]")

yazdir(f"Toplam {satir_sayisi} satır okundu.")

⚠️ Dosya sonu (EOF) ile boş satır ayrı şeylerdir. konsol.satir_oku() bir belki<metin> döner:

Dönüş Anlamı
bos girdi bitti (Ctrl-D, boru kapandı)
dolu("") kullanıcı yalnızca Enter'a bastı

Bu ayrım olmasaydı yukarıdaki döngü ya sonsuza kadar döner ya da kullanıcı Enter'a basınca erken biterdi.

Sayı okumak — iki başarısızlık nedeni ayrılır

KabaLang
kullan kaba.sistem

eger konsol.etkilesimli_mi():
    n = konsol.sayi_oku("Bir tam sayı yazın: ")
    eger n.tamam_mi():
        yazdir(f"Karesi: {n.deger() * n.deger()}")
    degilse:
        yazdir("Sayı okunamadı: " + n.hata().mesaj())
degilse:
    yazdir("etkileşimli değil — okuma atlandı")

konsol.sayi_oku() bir sonuc döner, çünkü iki ayrı nedenle başarısız olabilir ve ikisi ayırt edilmelidir: girdi bitti mi, yoksa yazılan şey sayı değil mi? Tek bir "boş" dönseydi "tekrar sor" ile "çık" ayırt edilemezdi.

Çağrı Dönüş
konsol.satir_oku() belki<metin>
konsol.sayi_oku(istem) sonuc<sayi, Hata>
konsol.ondalik_oku(istem) sonuc<ondalik, Hata>
konsol.tumunu_oku() tüm girdi tek metin
konsol.yaz(m) satır sonu EKLEMEDEN yazar (istem için)
konsol.hata_yaz(m) stderr'e yazar
konsol.etkilesimli_mi() girdi bir uçbirim mi (boru değil mi)

Çıkış kodu

KabaLang
kullan kaba.sistem

fonksiyon ana():
    eger degil dosya.var_mi("/etc/hostname"):
        yazdir("beklenen dosya yok")
        don 1
    don 0

kod = ana()
yazdir(f"çıkış kodu: {kod}")
cikis(kod)

cikis(kod) programı hemen sonlandırır. Kabuk betikleri için 0 başarı, sıfırdan farklı her değer hatadır.

Renkli çıktı

ANSI kaçış dizileri doğrudan yazdırılabilir:

KabaLang
yazdir("\033[38;5;78m● yeşil\033[0m  \033[38;5;220m● sarı\033[0m  \033[38;5;81m● mavi\033[0m")

⚠️ Renkleri yalnız konsol.cikti_etkilesimli_mi() doğruyken yazın; çıktı bir dosyaya/boruya gidiyorsa kaçış dizileri veriyi kirletir.

Sonraki adım

10. Arayüz (GUI) uygulaması