KABAFORCEGeliştirici KabaOS'u edinin

Temeller · 70 satır

Konsol uygulaması

KomutSatiri ile bayrak ve argüman ayrıştırma, --yardim üretimi, kullanıcı girdisi.

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

Çalıştırın

Uçbirim
kabalang calistir 04_konsol_uygulamasi.kbl

Kaynak kod

04_konsol_uygulamasi.kbl
# ╔═══════════════════════════════════════════════════════════════════╗
# ║  KONSOL UYGULAMASI — argüman ayrıştırma + kullanıcı girdisi       ║
# ║  Çalıştır:  kabalang calistir 04_konsol_uygulamasi.kbl --yardim   ║
# ║             echo "İstanbul" | kabalang calistir 04_... --sayac    ║
# ╚═══════════════════════════════════════════════════════════════════╝
kullan kaba.sistem

# ── 1. Komut satırını TANIMLA ───────────────────────────────────────
# `--yardim` metni bu tanımlardan kendiliğinden üretilir; elle yazılmaz.
ks = KomutSatiri("selam", "Girdiyi okur, isterse karakterlerini sayar")
ks.secenek("kisi", "k", "Selamlanacak kişinin adı")
ks.bayrak("sayac", "s", "Her satırın karakter sayısını da yaz")
ks.konumsal("onek", "Çıktının başına konacak ön ek")

c = ks.coz()

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

# ⚠️ Tanımsız seçenek sessizce yok sayılmaz: hata stderr'e gider,
#    çıkış kodu 2 olur. Böylece kabuk betiği yanlışı görebilir.
eger c.hatali_mi():
    c.hata_yaz_ve_cik()

kisi   = c.secenek("kisi").deger_veya("dünya")
# ⚠️ Değişkene `etiket` DENMEDİ: `etiket` bir BİLEŞEN TÜRÜ adıdır ve
#    denetçi `etiket = ...` satırını bileşen bildirimi sanıp "kullanılmayan
#    değişken" uyarısı veriyor (ölçüldü — denetçinin bilinen sınırı).
onek = c.konumsal("onek").deger_veya("»")

yazdir(f"Merhaba {kisi}!")

# ── 3. Girdiyi oku ──────────────────────────────────────────────────
# ⚠️ DOSYA SONU (EOF) ile BOŞ SATIR AYRI ŞEYLERDİR.
#    `satir_oku()` bir `belki<metin>` döner:
#       bos       → girdi bitti (Ctrl-D / boru kapandı)
#       dolu("")  → kullanıcı yalnızca Enter'a bastı
#    Bu ayrım olmadan aşağıdaki döngü ya sonsuza kadar döner ya da
#    kullanıcı Enter'a bastığında erken biter.
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():
        kir
    satir_sayisi = satir_sayisi + 1
    eger c.bayrak("sayac"):
        yazdir(f"{onek} {s.deger()}  [{s.deger().uzunluk()} karakter]")
    degilse:
        yazdir(f"{onek} {s.deger()}")
    eger konsol.etkilesimli_mi():
        konsol.yaz("Satır yazın (bitirmek için Ctrl-D): ")

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

# ── 4. Sayı okuma — NEDEN önemli olduğu için `sonuc` ────────────────
# `sayi_oku()` iki ayrı nedenle başarısız olabilir ve ikisi ayırt edilir:
#   bulunamadi        → girdi bitti
#   ayristirma_hatasi → yazılan şey sayı değil
# Tek bir "boş" dönseydi, "tekrar sor" ile "çık" ayırt edilemezdi.
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(f"Sayı okunamadı: {n.hata().mesaj()}")