Brug variabler til at gemme værdier
Alle programmer består normalt af mange trin, hvor programmet fungerer på data. Som en del af at køre alle disse trin er det almindeligt at gemme det intermitterende resultat, dataene, i en navngivet reference. Derefter kan du læse eller manipulere dataene senere. Navngivne referencer kaldes ofte variabler.
Variabler, bind en værdi
Variabler er navngivne referencer, der er bundet til en værdi, som du fortsat vil referere til i din kode. I F#opfattes det som binding af en værdi. Det, du gør, er at tildele eller binde, en værdi til en navngiven reference, en variabel. Hvis du vil binde en værdi, skal du bruge nøgleordet let, et navn til din reference og tildele den en værdi, f.eks. i nedenstående kode:
let name = "Chris"
name er den navngivne reference og "Chris" dens bundne værdi.
Når en værdi er tildelt til en variabel, kan den ikke ændres, den er uforanderlig. Følgende kode kompileres ikke og resulterer i en fejl, der siger noget i stil med "fejl FS0027: Denne værdi kan ikke slås fra."
let name = "Chris"
name <- "Luis" // not allowed
Gør det muligt at slå den fra
Du kan ændre variabler, men du skal angive, at du vil gøre dem justerbare. Ved at bruge nøgleordet mutable i variabeldefinitionen kan du ændre en værdi uden en kompileringsfejl, f.eks. i følgende kode:
let mutable name = "Chris"
name <- "Luis" // this statement is now allowed
Variabeltyper
Der findes en række forskellige typer i F#. Mange af typerne har at gøre med lagring af tal i forskellige størrelser og med eller uden decimaler. Andre typer er knyttet til tekststrenge eller booleske variabler. Her er en liste over typer, som du sandsynligvis vil støde på, når du begynder at lære F#.
| Slags | Beskrivelse |
|---|---|
| Bool | mulige værdier er true eller false |
| Int | Værdier fra -2.147.483.648 til 2.147.483.647. |
| streng | Unicode-tekst |
| float, dobbelt | En 64-bit flydende taltype. |
Typen udledes
Når du deklarerer en variabel, kan du gøre det med eller uden type. Hvis du ikke angiver en type, når du deklarerer en variabel, giver F#-compileren et bedste gæt på, hvilken type der skal være af den værdi, du tildeler variablen. Overvej følgende udsagn:
let age = 65 // int
let PI = 3.14 // float
let name = "my name" // string
Compileren udleder, hvad typerne skal være, og det er rigtigt. Du kan også være mere eksplicit med, hvad typen skal være. Hvis du vil tildele en data, skal du bruge syntaksen variableName:<type>, f.eks. i denne kode:
let sum:float = 0.0
Udskriv til skærmen
Du vil ofte kunne udskrive på skærmen. Det kan være af forskellige årsager, f.eks.:
- Programoutput: Programmet udfører en form for beregning, og du vil gerne se outputtet.
- fejlfinding: Som en del af fejlfindingen af din kode skal du muligvis sende resultatet på et givet tidspunkt for at forstå, hvad der går galt.
Der er andre årsager til, at du gerne vil sende output til skærmen, men de to foregående scenarier er de mest almindelige.
Så hvordan ville du udskrive til skærmen? I F#er der tre forskellige funktioner, du kan bruge. De er printf, printfnog endda Console.WriteLine. Så hvad er forskellen?
-
printf: Den udskrives for atstdoutindbygget (intet newline-tegn). -
printfn: Den udskrives for atstdouttilføjer et newline-tegn. -
Console.WriteLine: Denne funktion er fra navneområdetSystemog fungerer på alle .NET-sprog.
Nu kender du forskellen, men hvilken skal du bruge? Nå, printf og printfn betragtes som mere idiomatisk og foretrækkes i F#.
Formatering
Som en del af udskrivningen på skærmen kan det være en god idé at kombinere tekst og tal. Eller du ønsker måske, at outputtet skal formateres på en bestemt måde, f.eks. ved hjælp af:
positionelle argumenter: Hvis du vil formatere , kan du bruge en .NET-funktion, f.eks.
String.Format, som bruger positionsargumenter, f.eks.String.Format("My name is {0} and I live in {1}", "Chris", "UK").Strenginterpolering: En anden måde at kombinere variabler og tekst på er ved at bruge noget, der kaldes interpolering. Hvis du vil bruge den, skal du foran strengen have et
$-tegn og angive pladsholdere med kantede parenteser{}. Her er et eksempel på brug af interpolering:let name = "Luis" let company = "Microsoft" printfn $"Name: {name}, Company: {company}"Du kan også tilføje udtryk mellem kantede parenteser, f.eks.:
let firstNumber = 2000 let secondNumber = 21 printfn $"The year is: {firstNumber + secondNumber}"Seddel
Der er ingen typekontrol ved hjælp af interpolering, så det kan virke ligetil at bruge. Sørg for at kombinere tingene korrekt.
Specifiers: Du kan også bruge formatangivelser som en del af det, du forsøger at udskrive. Brug af angivelser er den mest anvendte måde at formatere på i F#. Her er et eksempel:
let name = "Chris" printf "Hi %s" name // prints: Hi ChrisHer kan du se, hvordan formateringsfunktionen
%sbruges til at blande den første streng med variablenname.Seddel
Når du bruger formateringsfunktionen, f.eks. %s eller %i, kontrollerer compileren typerne. Hvis dit positionsargument ikke er af den type, du har angivet, udløses der en fejl.
Formatangivelser
Der er mange formatangivelser. Her er nogle, du sandsynligvis vil støde på.
| Betegnelse | Beskrivelse | Eksempel |
|---|---|---|
| %s | Bruges til strenge og indhold uden baggrund | printf "Hej %s" navn |
| %d, %i | Formateret som et decimal heltal, signeret, hvis den grundlæggende heltalstype er signeret | printf "Alder: %i" 65 |
| %b | Boolesk true eller false |
printf "Indstilling for: %b" true |
Der er flere oplysninger om formatering. Hvis du vil vide mere om alle funktionerne, skal du se formatering i F# doc.