Używanie zmiennych do przechowywania wartości
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
Wyświetl na ekranie
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 liniistdout(bez znaku nowej linii). -
printfn: Drukuje dostdouti dodaje znak nowego wiersza. -
Console.WriteLine: ta funkcja pochodzi z przestrzeni nazwSystemi 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 jakString.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 ChrisTutaj możesz zobaczyć, jak formater
%sjest 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.