# ╔═══════════════════════════════════════════════════════════════════╗ # ║ 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` 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()}")