Literaller ve Tanımlayıcılar
Sayı Literalleri
FunC, ondalık ve onaltılık tam sayı literallerine izin verir (ön ek sıfırlar izinlidir).
Örneğin:
0
,123
,-17
,00987
,0xef
,0xEF
,0x0
,-0xfFAb
,0x0001
,-0
,-0x0
geçerli sayı literalleridir.
Dize Literalleri
FunC'de dizeler çift tırnak içinde " "
alınır, örneğin "bu bir dizedir"
.
İsteğe bağlı olarak, dize literalleri sonrasında bir tür belirtebilir, örneğin "dize"u
.
Aşağıdaki dize türleri desteklenir:
- tür olmadan—asm işlev tanımları için ve ASCII dizesi ile bir dilim sabit belirlemek için kullanılır
s
—içeriğine göre ham bir dilim sabiti tanımlar (hex kodlu ve isteğe bağlı olarak bit ile doldurulmuş)a
—belirtilen adrestenMsgAddressInt
yapısını içeren bir dilim sabiti oluştururu
—sağlanan ASCII dizesinin hex değerlerine karşılık gelen bir int sabiti oluştururh
—dizenin SHA256 hash'inin ilk 32 bitini içeren bir int sabiti oluştururH
—dizenin SHA256 hash'inin tüm 256 bitini içeren bir int sabiti oluştururc
—dizenin crc32 değerini içeren bir int sabiti oluşturur
Aşağıdaki değerler karşılık gelen sabitleri verir:
"string"
x{737472696e67}
dilim sabitine dönüşür"abcdef"s
x{abcdef}
dilim sabitine dönüşür"Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF"a
x{9FE6666666666666666666666666666666666666666666666666666666666666667_}
dilim sabitine dönüşür (addr_std$10 anycast:none$0 workchain_id:int8=0xFF address:bits256=0x33...33
)"NstK"u
0x4e73744b
int sabitine dönüşür"transfer(slice, int)"h
0x7a62e8a8
int sabitine dönüşür"transfer(slice, int)"H
0x7a62e8a8ebac41bd6de16c65e7be363bc2d2cbc6a0873778dead4795c13db979
int sabitine dönüşür"transfer(slice, int)"c
2235694568
int sabitine dönüşür
Tanımlayıcılar
FunC, çok geniş bir tanımlayıcı sınıfına (işlevler ve değişken adları) izin verir.
Yani, özel semboller ;
, ,
, (
, )
,
(boşluk veya sekme), ~
ve .
, yorum veya dize literali ("
) ile başlamayan, bir sayı literali olmayan, bir alt çizgi _
olmayan ve bir anahtar kelime olmayan herhangi (tek satırlık) dize geçerli bir tanımlayıcıdır.
Ayrıca, işlev tanımlarındaki işlev adları .
veya ~
ile başlayabilir.
Örnek geçerli tanımlayıcılar:
query
,query'
,query''
elem0
,elem1
,elem2
CHECK
_internal_value
message_found?
get_pubkeys&signatures
dict::udict_set_builder
_+_
fatal!
Bir değişken adının sonundaki '
, genellikle eski değerin değiştirilmiş bir versiyonunun tanıtıldığı zaman kullanılır.
~
ile ön ekli olanlar hariç) bir hashmap alır ve gerekirse, başka verilerle birlikte hashmap'in yeni bir versiyonunu döner. Bu değerleri, aynı ada sahip olup '
ile sonlandırmak uygun olur.Suffix ?
, genellikle boolean değişkenler için kullanılır (TVM'nin yerleşik bir boolean türü yoktur; boolean'lar tam sayılarla temsil edilir: 0 yanlış ve -1 doğrudur) veya genellikle bir işlemin başarısını gösteren bir bayrak döndüren işlevler için kullanılır (örneğin, stdlib.fc
içindeki udict_get?
).
Geçersiz tanımlayıcılar:
take(first)Entry
"not_a_string
msg.sender
send_message,then_terminate
_
Daha nadir geçerli tanımlayıcı örnekleri:
123validname
2+2=2*2
-alsovalidname
0xefefefhahaha
{hehehe}
pa{--}in"`aaa`"
Geçersiz tanımlayıcılar:
pa;;in"`aaa`"
(çünkü;
yasaktır){-aaa-}
aa(bb
123
(bu bir sayı)
Örneğin, `Ben de bir değişkenim`
geçerli bir tanımlayıcıdır, ayrıca `herhangi bir sembol ; ~ () burada geçerlidir...`
de geçerlidir.
Sabitler
FunC, derleme zamanında sabitler tanımlamanıza izin verir; bu sabitler derleme sırasında değiştirilir ve önceden hesaplanır.
Sabitler şu şekilde tanımlanır:
const optional-type identifier = value-or-expression;
optional-type
, belirli bir sabit türünü zorlamak ve daha iyi okunabilirlik için kullanılabilir.
int
ve slice
türleri desteklenmektedir.value-or-expression
, bir literali veya sabitlerin ve literallerin önceden hesaplanabilir bir ifadesini içerebilir.
Örneğin, sabitler şu şekilde tanımlanabilir:
const int101 = 101;
int101
sabitini tanımlar; bu, sayısal literale eşdeğerdir101
const str1 = "const1", str2 = "aabbcc"s;
bu, kendi karşılık gelen dizelerine eşit olan iki sabiti tanımlarconst int int240 = ((int1 + int2) * 10) << 3;
hesaplamanın sonucuna eşit olanint240
sabitini tanımlarconst slice str2r = str2;
str2r
sabitini tanımlar; bu,str2
sabitinin değerine eşittir