Używanie zmiennych do przechowywania wartości

Ukończone

Wszystkie programy zwykle składają się z wielu kroków, w których program działa na danych. W ramach uruchamiania wszystkich tych kroków często przechowuje się pośrednie wyniki oraz dane w nazwanym odwołaniu. Następnie możesz odczytywać lub manipulować danymi później. Nazwane odwołania są często określane jako zmienne .

Zmienne, wiązanie wartości

Zmienne to nazwane referencje przypisane do wartości, do których chcesz się odwoływać w swoim kodzie. W F# myśli się o tym jako o wiązaniu wartości. Więc to, co należy zrobić, to przypisać lub powiązaćwartość do nazwanej referencji, czyli do zmiennej. Aby powiązać wartość, należy użyć słowa kluczowego let, podać nazwę odwołania i przypisać do niej wartość, jak w poniższym kodzie:

let name = "Chris"

name to odwołanie nazwane, a jego powiązaną wartością jest "Chris".

Po przypisaniu wartości do zmiennej nie można jej zmienić, jest niezmienna. Poniższy kod nie powinien się skompilować i generuje błąd z komunikatem w stylu "błąd FS0027: Ta wartość nie jest modyfikowalna".

let name = "Chris"
name <- "Luis" // not allowed

Uczyń to zmiennym

Można zmienić zmienne, ale musisz zasygnalizować, że chcesz je ustawić jako modyfikowalne. Używając słowa kluczowego mutable w definicji zmiennej, można zmienić wartość bez błędu kompilacji, jak w poniższym kodzie:

let mutable name = "Chris"
name <- "Luis" // this statement is now allowed

Typy zmiennych

W języku F#istnieje szereg różnych typów. Wiele typów musi mieć związek z przechowywaniem liczb o różnych rozmiarach i z liczbami dziesiętnymi lub bez nich. Inne typy są skojarzone ze zmiennymi tekstowymi lub logicznymi. Poniżej znajduje się lista typów, które prawdopodobnie napotkasz podczas nauki języka F#.

Typ Opis
Bool możliwe wartości to true lub false
Int Wartości z -2,147,483,648 do 2,147,483,647.
ciąg Tekst Unicode
zmiennoprzecinkowy, podwójny 64-bitowy typ zmiennoprzecinkowy.

Typ jest określany na podstawie danych

W przypadku deklarowania zmiennej można to zrobić z typem lub bez. Jeśli nie podasz typu podczas deklarowania zmiennej, kompilator języka F# najlepiej zgaduje, jaki typ powinien być wartością przypisaną do zmiennej. Weź pod uwagę następujące stwierdzenia:

let age = 65 // int
let PI = 3.14 // float
let name = "my name" // string

Kompilator wywnioskował, jakie typy powinny być, i ma rację. Możesz również wyraźniej określić, jakiego rodzaju typ chcesz. Aby przypisać dane, należy użyć składni variableName:<type>, na przykład w tym kodzie:

let sum:float = 0.0

Często chcesz mieć możliwość drukowania na ekranie. Może to być z różnych powodów, takich jak:

  • dane wyjściowe aplikacji: aplikacja wykonuje pewne obliczenia i chcesz wyświetlić dane wyjściowe.
  • Debugowanie: Podczas debugowania kodu możesz potrzebować wyświetlić wynik w określonym momencie, aby zrozumieć, co poszło nie tak.

Istnieją inne powody, dla których chcesz wyświetlić dane wyjściowe na ekranie, ale poprzednie dwa scenariusze są najbardziej typowe.

Jak więc drukować na ekranie? W języku F# istnieją trzy różne funkcje, których można użyć. Są one printf, printfn, a nawet Console.WriteLine. Więc jaka jest różnica?

  • printf: Drukuje w linii stdout (bez znaku nowej linii).
  • printfn: Drukuje do stdout i dodaje znak nowego wiersza.
  • Console.WriteLine: ta funkcja pochodzi z przestrzeni nazw System i działa we wszystkich językach platformy .NET.

Teraz znasz różnicę, ale której z nich należy użyć? Cóż, printf i printfn są uważane za bardziej idiomatyczne i preferowane w języku F#.

Formatowanie

W ramach drukowania na ekranie możesz połączyć tekst i liczby. Możesz też chcieć sformatować dane wyjściowe w określony sposób, na przykład przy użyciu:

  • argumenty pozycyjne: aby sformatować, można użyć funkcji .NET, takiej jak String.Format, która używa argumentów pozycjonowanych, takich jak String.Format("My name is {0} and I live in {1}", "Chris", "UK").

  • interpolacja ciągów: Innym sposobem łączenia zmiennych i tekstu jest użycie czegoś o nazwie interpolacja. Aby go użyć, należy poprzedzić ciąg znakiem $ i wskazać symbole zastępcze z nawiasami {}. Oto przykład użycia interpolacji:

    let name = "Luis"
    let company = "Microsoft"
    printfn $"Name: {name}, Company: {company}"
    

    Możesz również dodawać wyrażenia między nawiasami, w następujący sposób:

    let firstNumber = 2000
    let secondNumber = 21
    printfn $"The year is: {firstNumber + secondNumber}"
    

    Notatka

    Nie ma sprawdzania typów przy użyciu interpolacji, więc może wydawać się proste w użyciu. Pamiętaj, aby poprawnie połączyć elementy.

  • Specyfikatory: Można również użyć specyfikatorów formatu w ramach tego, co chcesz wydrukować. Używanie specyfikatorów jest najczęściej używanym sposobem formatowania w języku F#. Oto przykład:

    let name = "Chris"
    printf "Hi %s" name
    // prints: Hi Chris
    

    Tutaj możesz zobaczyć, jak formater %s jest używany do łączenia pierwszego ciągu ze zmienną name.

    Notatka

    W przypadku używania formatów, takich jak %s lub %i, kompilator sprawdza typy. Jeśli argument pozycyjny nie jest typu, który został określony, zgłasza błąd.

Specyfikatory formatu

Istnieje wiele specyfikatorów formatu. Oto niektóre, które prawdopodobnie napotkasz.

Specyfikator Opis Przykład
%s Służy do ciągów i zawartości niesformatowanych printf "Witaj %s" name
%d, %i Sformatowany jako liczba całkowita dziesiętna, podpisany, jeśli jest podpisany podstawowy typ liczby całkowitej printf "Wiek: %i" 65
%b Wartość logiczna true lub false printf "Ustawienie na: %b" true

Więcej informacji na temat formatowania. Jeśli chcesz poznać wszystkie możliwości, zobacz formatowanie w dokumentacji F# doc.