İçeriğe geç
LexerLangv0.1.0

Sınıflar ve modüller

static ve dynamic class, module, self ve use ile dosya aktarımı.

LexerLang
static class Person          # "new" yazılmadan çağrılır
dynamic class Animal         # yalnızca "new" ile
module Ayarlar               # static class'ın ikinci adı

dynamic class#

LexerLang
dynamic class Animal
    $species as string
    $age as int32

    func __construct($species as string, $age as int32) as void
        self.$species = $species
        self.$age = $age
    end func

    func make_sound() as string
        return "Bu bir " + self.$species
    end func

    func __destruct() as void
        out("yok ediliyor: " + self.$species)
    end func
end class
LexerLang
$a = new Animal("kopek", 3)
out($a.make_sound())

Gövdede yalnızca alan bildirimi ($ad as tip) ve fonksiyon bulunur. Serbest deyime izin verilmez — ne zaman çalışacağı belirsiz olurdu.

dynamic class üyelerine new olmadan erişmek hata verir.

static class ve module#

LexerLang
module Ayarlar
    $port as int32

    func adres() as string
        return "http://localhost:" + self.$port.to_string()
    end func
end class
LexerLang
out(Ayarlar.$port)
out(Ayarlar.adres())

Kurucusu parametre istemiyorsa dosya yüklenirken tek bir örnek kurulur ve üyelerine doğrudan erişilir. Kurucu parametre istiyorsa böyle bir örnek yoktur; sınıf yalnızca çağrılarak örneklenir:

LexerLang
$p = Person("Ahmet", 25)     # static class — "new" yazılmaz

self#

Metotların içinde örneğin kendisidir. Metot dışında kullanılamaz.

Dosya aktarımı#

LexerLang
use "/lib/site.lx" as site
use "yardimci.lx"            # as verilmezse package adı kullanılır
YolNeye göre
"/a/b.lx"proje kökü — giriş dosyasının bulunduğu dizin
"b.lx"içeren dosya — yanındaki dosya

Ayrım bilinçli: kökten yazılan yol dosya taşınsa da aynı kalır, göreceli yol komşu dosyalar için kısadır.

LexerLang
$p = classes.Person("Ahmet", 25)
$a = new classes.Animal("Kopek", 3)
out(functions.topla(5, 10))

Kapsam#

Aktarılan dosya kendi kapsamında çalışır: çağıranın değişkenlerini görmez, onları değiştiremez. Ad alanına yalnızca dışa aktarılan sınıflar ve fonksiyonlar girer — değişkenler paylaşılmaz.

Bu, dilin durumu nasıl taşıdığını belirleyen bir karar. Modül düzeyinde bir "şu an hangi dildeyiz" değişkeni tutamazsınız; o bilgi ya parametre olarak geçer ya da $app.globals üzerinden taşınır.

Aktarılan bir fonksiyon ya da sınıf metodu kendi dosyasının isimlerini görür, çağıranınkileri değil.

Aynı dosya bir çalıştırmada birden fazla kez aktarılsa da bir kez çalışır — yan etkileri (bir bağlantı açmak gibi) tekrarlanmamalıdır. Döngüsel aktarım hata verir.

Dışa aktarma#

Adı büyük harfle başlayan sınıflar dışa aktarılır.

Harici kütüphaneler#

LexerLang
use_lib jwt

Faz 2'de gelecek; şu an hangi aşamada olduğunu söyleyen bir hata verir. Tırnaklı use proje içi, use_lib proje dışıdır — hangi ismin nereden geldiği okurken bellidir.

Sırada#

Hata yönetimi.