Sözdizimi
Dosya düzeni, isim yazımı, bloklar, switch ve işleçler.
Her dosya aynı sırayı izler:
package <ad> # zorunlu, ilk satır
use <modül>, ... # package'tan hemen sonra
<gövde>package merhaba
use http_server, html_document
$app = new http_serverUzantılar: .lexer giriş dosyası, .lx sayfa ve kütüphane dosyası.
İsim yazımı#
Bir isim ya baştan sona küçük harf ya da baştan sona büyük harf olmalıdır:
http_request form_data a1 # geçerli — normal isimler
POST GET MAX_SIZE # geçerli — sabitler
Person HttpClient # geçerli — sınıf adlarımyVar formData $Ad # geçersiz — karışık yazımBüyük harfle başlamak yalnızca sınıf adlarında geçerlidir. Küçük harfle başlayıp içinde büyük harf geçen yazım her yerde geçersizdir.
Rakam ve _ her iki biçimde de serbesttir. Keyword'ler yalnızca küçük harfle yazılır; IF yazmak hatadır.
Bloklar#
Blok açan her yapı end <keyword> ile kapanır; süslü parantez yoktur ve girinti anlamlıdır.
if $a == 10 then
out("10")
else
out("diğer")
end if
for $dil in $diller
out($dil)
end for
while $i > 0
$i = $i - 1
end while
func topla($a, $b) as int32
return $a + $b
end func
with $app
.document.add($doc)
end withwith bloğunda nokta ile başlayan satırlar bloğun konusuna uygulanır: .document.add($doc) yazımı $app.document.add($doc) demektir.
Tek satır#
: tek satırlık yazım için deyim ayırıcıdır:
if $a == 10 then: out("10"): end if
func kisa($x): return $x * 2: end funcswitch#
Tek bir değeri birden fazla ihtimale karşı ölçer:
switch $req.path
case "/giris", "/kayit"
$app.layout($kimlik_duzeni)
case in $yonetim_yollari
$app.layout($yonetim_duzeni)
default
$app.layout($magaza_duzeni)
end switch| Yazım | Anlamı |
|---|---|
case "a", "b" | değerlerden herhangi biri eşleşirse |
case in $dizi | konu dizinin içindeyse |
default | hiçbiri eşleşmezse; son dal olmalıdır |
Konu bir kez ölçülür: yan etkili bir çağrı her dalda yeniden çalışsaydı sürpriz olurdu.
Eşleşen ilk dal çalışır ve switch biter — alt dala düşme yoktur. C'deki davranış, break yazmayı unutunca sessizce yanlış dalı da çalıştırırdı.
Hiçbir dal eşleşmez ve default yoksa hiçbir şey olmaz. Dallar arasında serbest deyim yazılamaz: yalnızca case ve default.
İşleçler#
and / or yerine && / || yazılabilir; aynı işleçlerdir, yazım tercihidir. Olumsuzlama yalnızca not.
if $stok > 0 && $urun.aktif then: out("satılabilir"): end if
if $rol == "admin" || $rol == "editor" then: out("yetkili"): end if
if not $sepet then: out("sepet boş"): end ifTek & ve tek | yoktur. Dilde bit işlemleri bulunmadığı için tek işaret yazan kişi neredeyse her zaman ikincisini unutmuştur; ona sessizce başka bir anlam yüklemek yanlış olurdu.
İsimsiz fonksiyon#
func bir ifade olarak da yazılabilir. Tanımlandığı yerdeki değişkenleri görür:
$carpan = 3
$carp = func($x) as int32
return $x * $carpan
end func
out($carp(5)) # 15Yönlendirme tabloları ve session.with_lock bunu kullanır.
Nesnede virgül#
Nesne değişmezinde virgül zorunlu değildir; yeni bir alanın başladığı ad: yazımından anlaşılır. Değeri blok olan tablolarda her end func satırının sonuna virgül koymak gerekmesin diye:
{
"/": func($req, $res) as void
$res.send("a")
end func
"/b": func($req, $res) as void
$res.send("b")
end func
}Yorumlar#
# tek satır
###
Birden çok satır.
###