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.kblKaynak 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()}")