Sınıflar ve modüller
static ve dynamic class, module, self ve use ile dosya aktarımı.
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#
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$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#
module Ayarlar
$port as int32
func adres() as string
return "http://localhost:" + self.$port.to_string()
end func
end classout(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:
$p = Person("Ahmet", 25) # static class — "new" yazılmazself#
Metotların içinde örneğin kendisidir. Metot dışında kullanılamaz.
Dosya aktarımı#
use "/lib/site.lx" as site
use "yardimci.lx" # as verilmezse package adı kullanılır| Yol | Neye 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.
$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#
use_lib jwtFaz 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.