Aracılığıyla paylaş


Sabitler

Bu makalede, F# dilinde literal türünün nasıl belirtileceğini gösteren bir tablo sağlanır.

Literal türleri

Aşağıdaki tabloda F# dilindeki literal türleri gösterilmektedir. Onaltılık gösterimde basamakları temsil eden karakterler büyük/küçük harfe duyarlı değildir; türü tanımlayan karakterler ise büyük/küçük harfe duyarlıdır.

Tür Açıklama Son ek veya ön ek Örnekler
sbyte imzalı 8 bit tamsayı y 86y

0b00000101y
bayt işaretsiz 8 bit doğal sayı uy! 86uy

0b00000101uy
int16 imzalı 16 bit tamsayı s 86s
uint16 işaretsiz 16 bit doğal sayı bizi 86us
Int

int32
imzalı 32 bit tamsayı l veya hiçbiri 86

86l
uint

uint32
işaretsiz 32 bit doğal sayı u veya ul 86u

86ul
nativeint imzalı bir doğal sayıya yerel işaretçi n 123n
unativeint işaretsiz doğal sayı olarak yerel işaretçi un 0x00002D3Fun
int64 imzalı 64 bit tamsayı L 86L
uint64 işaretsiz 64 bit doğal sayı UL 86UL
tek, float32 32 bit kayan nokta numarası F veya f 4.14F, 4.14f ya da infinityf ya da -infinityf
Eğer 0x00000000lf
yüzmek; çift 64 bit kayan nokta numarası hiç kimse 4.14 veya 2.3E+32 ya da 2.3e+32 ya da infinity ya da -infinity
LF 0x0000000000000000LF
bigint 64 bit gösterimle sınırlı olmayan tamsayı Ben 9999999999999999999999999999I
On -da -lık sabit nokta veya rasyonel sayı olarak temsil edilen kesirli sayı M veya m 0.7833M veya 0.7833m
Karakter Unicode karakteri hiç kimse 'a' veya '\u0061'
Dize Unicode dizesi hiç kimse "text\n"

veya

@"c:\filename"

veya

"""<book title="Paradise Lost">"""

veya

"string1" + "string2"

Ayrıca bkz. Dizeleri.
bayt ASCII karakteri B 'a'B
byte[] ASCII dizesi B "text"B
Dize veya bayt[] düz metin dizesi @ ön eki @"\\server\share" (Unicode)

@"\\server\share"B (ASCII)

Adlandırılmış sabitler

Sabit olması amaçlanan değerler Literal özniteliğiyle işaretlenebilir.

Bu öznitelik, bir değerin sabit olarak derlenmiş olmasına neden olma etkisine sahiptir. Aşağıdaki örnekte hem x hem de aşağıdaki y sabit değerlerdir, ancak x çalışma zamanında değerlendirilirken, y bir derleme zamanı sabitidir.

let x = "a" + "b" // evaluated at run-time

[<Literal>]
let y = "a" + "b" // evaluated at compile-time

Not

Sabit değerlerin derleme zamanında belirlenmesi gerektiğinden ve çalışma zamanı değerlendirmesine bağımlı olmadığından, işlevler [<Literal>] değerleri hesaplamak için kullanılamaz.

İşlevler neden sabitleri hesaplayamıyor?

[<Literal>] özniteliği, değerlerin derleme zamanında bilinmesini gerektirir. İşlevler, sabit çıkışlar oluşturuyor gibi görünseler bile çalışma zamanında değerlendirilir ve bu da [<Literal>]için uygun olmamalarını sağlar. Bu kısıtlama, değişmez değerlerin desen eşleştirme, öznitelik bağımsız değişkenleri ve harici işlevlerle etkileşim gibi senaryolarda güvenle kullanılabilmesini sağlar.

Örneğin, bir işlevin sonucunu bir sabit değere atamaya çalışmak başarısız olur.

[<Literal>]
let yFunc() = "a" + "b" // error FS0267: this is not a valid constant expression

Bu ayrım, dış bir işlevçağrılırken de önem taşır. Örneğin, DllImport derleme sırasında myDLL değerini bilmesi gereken bir özniteliktir. [<Literal>] bildirimi olmadan bu kod derlenemiyor:

[<Literal>]
let myDLL = "foo.dll"

[<DllImport(myDLL, CallingConvention = CallingConvention.Cdecl)>]
extern void HelloWorld()

Desen eşleştirme ifadelerinde, küçük harfle başlayan tanımlayıcılar her zaman değişmez değer yerine bağlanacak değişkenler olarak kabul edilir, bu nedenle değişmez değerleri tanımlarken genellikle ilk büyük harfleri kullanmanız gerekir.

[<Literal>]
let SomeJson = """{"numbers":[1,2,3,4,5]}"""

[<Literal>]
let Literal1 = "a" + "b"

[<Literal>]
let FileLocation =   __SOURCE_DIRECTORY__ + "/" + __SOURCE_FILE__

[<Literal>]
let Literal2 = 1 ||| 64

[<Literal>]
let Literal3 = System.IO.FileAccess.Read ||| System.IO.FileAccess.Write

Adlandırılmış sabitleri kullanan kısa bir desen eşleştirme örneği

Adlandırılmış değişmez değerler, when yan tümceleri veya ek mantık gereksinimini önleyerek desen eşleştirmeyi daha kısa hale getirir. Mesela:

[<Literal>]
let ErrorCode = 404

let handleResponse code =
    match code with
    | ErrorCode -> "Not Found"
    | _ -> "Other Response"

Açıklamalar

Adlandırılmış sabitler şunlar için kullanışlıdır:

  • when yan tümcesi olmadan desen eşleştirme.
  • Öznitelik argümanları.
  • Statik tür sağlayıcısı bağımsız değişkenleri.

Unicode dizeleri, \u ve ardından 16 bit onaltılık kod (0000 - FFFF) veya \U kullanarak belirtebileceğiniz UTF-32 kodlamaları ve ardından herhangi bir Unicode kod noktasını (00000000 - 0010FFFF) temsil eden 32 bit onaltılık kod kullanarak belirtebileceğiniz açık kodlamalar içerebilir.

||| dışındaki bit düzeyinde işleçlerin kullanılmasına izin verilmez.

Tamsayılar diğer tabanlarda

İmzalı 32 bit tamsayılar sırasıyla bir 0x, 0o veya 0b ön eki kullanılarak onaltılık, sekizli veya ikili olarak da belirtilebilir.

let numbers = (0x9F, 0o77, 0b1010)
// Result: numbers : int * int * int = (159, 63, 10)

Sayısal sabitlerde alt çizgi

Basamakları alt çizgi karakteriyle ayırabilirsiniz (_).

let value = 0xDEAD_BEEF

let valueAsBits = 0b1101_1110_1010_1101_1011_1110_1110_1111

let exampleSSN = 123_45_6789

Özel kayan nokta sonsuzluk değerleri

Hem float hem de single kayan nokta sayısal türleri pozitif ve negatif sonsuzluğu temsil eden özel değerlere sahiptir.

F# değeri F# türü Karşılık gelen .NET değeri
infinity veya +infinity float PositiveInfinity
-infinity float NegativeInfinity
infinityf veya +infinityf single PositiveInfinity
-infinityf single NegativeInfinity

Bu değerler doğrudan kullanılabilir veya bir kayan nokta sıfıra ya da verilen türle temsil edilemeyecek kadar küçük bir sayıya bölündüklerinde döndürülür. Mesela:

> 1.0/0.0;;
val it: float = infinity

> 1.0/(-0.0);;
val it: float = -infinity

> 1.0/0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
;;
val it: float = infinity