Brug variabler til at gemme værdier

Fuldført

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

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 at stdout indbygget (intet newline-tegn).
  • printfn: Den udskrives for at stdout tilføjer et newline-tegn.
  • Console.WriteLine: Denne funktion er fra navneområdet System og 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 Chris
    

    Her kan du se, hvordan formateringsfunktionen %s bruges til at blande den første streng med variablen name.

    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.