KABAFORCEGeliştirici KabaOS'u edinin

Önizleme · 0.6.0

KabaLang

KabaOS için Türkçe bir programlama dili. Okuması kolay bir sözdizimi, yok sayılamayan hatalar ve doğrudan makine koduna derlenen programlar.

sehirler.kbl
sehirler = ["İstanbul", "Ankara", "İzmir"]
dongu sehir icinde sehirler:
    yazdir(f"şehir: {sehir}")

toplam = 0
dongu i icinde 1..5:          # 1, 2, 3, 4, 5 — üst sınır DAHİLDİR
    toplam = toplam + i
dogrula(toplam == 15, "1..5 toplamı 15 olmalı")

KabaLang'i tanıyın

Anlaşılır

Okunduğu gibi çalışır.

Anahtar sözcükler Türkçe, girinti bloğu belirler, gereksiz noktalama yoktur. yapi ve sinif ile veriyi ve davranışı bir arada tutun; kurucu kur, nesnenin kendisi self.

Yapı ve sınıf ›
KabaLang
sinif Sayac:
    deger = 0

    fonksiyon kur(self, baslangic):     # KURUCU
        self.deger = baslangic

    fonksiyon artir(self):
        self.deger = self.deger + 1

    fonksiyon oku(self):
        don self.deger

s = Sayac(10)                            # kur(...) çağrılır
s.artir()
s.artir()
dogrula(s.oku() == 12, "sınıf kurucu + metot")
yazdir(f"sayaç: {s.oku()}")

Güvenli

Hatalar görmezden gelinemez.

Beklenen başarısızlık sonuc<T, Hata> ile dönüş değeridir. Bir sonucu kontrol etmeden bırakmak derleme hatasıdır — ya ? ile yayarsınız, ya ele alırsınız ya da bilerek yok saydığınızı yazarsınız.

Hata yönetimi ›
KabaLang
fonksiyon bol(a: sayi, b: sayi) -> sonuc<sayi, Hata>:
    eger b == 0:
        don hata("sıfıra bölme")
    don tamam(a // b)

r = bol(10, 2)
dogrula(r.tamam_mi(), "başarılı olmalı")
dogrula(r.deger() == 5, "değer")

h = bol(1, 0)
dogrula(h.hatali_mi(), "hatalı olmalı")
yazdir("hata mesajı: " + h.hata().mesaj())

# Hata olursa yerine kullanılacak değer:
dogrula(bol(1, 0).deger_veya(-1) == -1, "deger_veya")
yazdir("sonuc tamam")

Türkçe

Türkçe harfler, doğru kurallar.

i büyüyünce İ, I küçülünce ı olur. Büyük/küçük harf dönüşümü, uzunluk ve alfabetik sıralama Türkçe kurallarıyla çalışır; gidiş-dönüş metni bozmaz.

Metin ve Türkçe ›
KabaLang
dogrula("istanbul".buyut() == "İSTANBUL", "i → İ")
dogrula("IRMAK".kucult() == "ırmak", "I → ı")
dogrula("ığdır çorum şişli öğüt".buyut() == "IĞDIR ÇORUM ŞİŞLİ ÖĞÜT", "tüm harfler")

# Gidiş-dönüş metni BOZMAZ:
dogrula("ÖĞÜT ŞİŞLİ".kucult().buyut() == "ÖĞÜT ŞİŞLİ", "gidiş-dönüş")
dogrula("ÖĞÜT ŞİŞLİ".kucult().uzunluk() == 10, "uzunluk korunur")

yazdir("Türkçe harf kuralları tamam")

Hızlı

Makine koduna derlenir, işi paylaştırır.

Kaynak dosya doğrudan çalıştırılabilir programa dönüşür — yorumlayıcı, sanal makine ya da ayrıca kurulan bir çalışma zamanı yoktur; derleme LLVM üzerinden yapılır. birlikte bloğunda baslat ile başlatılan görevler aynı anda koşar; blok hepsi bitmeden kapanmaz.

Eşzamanlılık ›
KabaLang
fonksiyon kare(x):
    don x * x

birlikte:
    a = baslat kare(6)
    b = baslat kare(7)
    dogrula(a.bekle() == 36, "a")
    dogrula(b.bekle() == 49, "b")

yazdir("görev değerleri tamam")

Her yerde

Uçbirimden masaüstüne, sunucuya.

Aynı dil, altı proje türü. Her biri tek komutla hazır bir iskeletle başlar.

Web sunucusu, ek kütüphane olmadan

Yol parametreleri, sorgu dizgesi, JSON yanıtı. Kullanıcıdan gelen veri HTML'e girerken web.kacir ile kaçırılır.

Örneğin tamamı ›
alıntı · 01_web_sunucusu.kbl
fonksiyon arama(istek):
    # ⚠️ Kullanıcı verisi HTML'e girerken KAÇIRILIR (web.kacir).
    #    Kaçırılmazsa `?q=<script>` yansımalı XSS olurdu.
    aranan = web.kacir(istek.sorgu("q"))
    don web.html("<p>Aranan: " + aranan + "</p>")

fonksiyon yukleme(istek):
    don web.json("{\"alinan_bayt\": " + metin(istek.govde_boyutu()) + "}")

sunucu = web.sunucu(8080)

sunucu.al("/", ana_sayfa)
sunucu.al("/kisi/{ad}", selamla)
sunucu.al("/ara", arama)
sunucu.gonder("/yukle", yukleme)

Kaynaklar