Wartości

Wartości w języku F# to ilości, które mają określony typ; wartości mogą być liczbami całkowitymi lub zmiennoprzecinkowymi, znakami lub tekstem, listami, sekwencjami, tablicami, krotkami, dyskryminowanymi związkami, rekordami, typami klas lub wartościami funkcji.

Wiązanie wartości

Powiązanie terminu oznacza skojarzenie nazwy z definicją. Słowo let kluczowe wiąże wartość, jak w następujących przykładach:

let a = 1
let b = 100u
let str = "text"

// A function value binding.

let f x = x + 1

Typ wartości jest wnioskowany z definicji. W przypadku typu pierwotnego, takiego jak liczba całkowita lub zmiennoprzecinkowa, typ jest określany z typu literału. W związku z tym w poprzednim przykładzie kompilator wywnioskuje typ bunsigned int, natomiast kompilator wywnioskuje typ a , który ma mieć wartość int. Typ wartości funkcji jest określany z wartości zwracanej w treści funkcji. Aby uzyskać więcej informacji na temat typów wartości funkcji, zobacz Funkcje. Aby uzyskać więcej informacji na temat typów literałów, zobacz Literały.

Kompilator domyślnie nie wystawia diagnostyki nieużywanych powiązań. Aby otrzymywać te komunikaty, włącz ostrzeżenie 1182 w pliku projektu lub podczas wywoływania kompilatora (zobacz --warnon w obszarze Opcje kompilatora).

Dlaczego niezmienne?

Niezmienne wartości to wartości, których nie można zmienić w trakcie wykonywania programu. Jeśli używasz języków, takich jak C++, Visual Basic lub C#, może się okazać zaskakujące, że język F# stawia pierwszeństwo nad niezmiennymi wartościami, a nie zmiennymi, które można przypisać nowe wartości podczas wykonywania programu. Niezmienne dane są ważnym elementem programowania funkcjonalnego. W środowisku wielowątkowym współużytkowane zmienne modyfikowalne, które mogą być zmieniane przez wiele różnych wątków, są trudne do zarządzania. Ponadto ze zmiennymi modyfikowalnymi czasami trudno jest określić, czy zmienna może zostać zmieniona po przekazaniu jej do innej funkcji.

W czystych językach funkcjonalnych nie ma zmiennych i funkcje zachowują się ściśle jako funkcje matematyczne. W przypadku gdy kod w języku proceduralnym używa przypisania zmiennej w celu zmiany wartości, równoważny kod w języku funkcjonalnym ma niezmienną wartość, która jest danymi wejściowymi, niezmienną funkcją i różnymi niezmiennymi wartościami jako danymi wyjściowymi. Ta matematyczna ścisłość umożliwia ściślejsze rozumowanie o zachowaniu programu. To ściślejsze rozumowanie umożliwia kompilatorom sprawdzanie kodu bardziej rygorystycznie i wydajniejsze optymalizowanie oraz ułatwia deweloperom zrozumienie i pisanie poprawnego kodu. W związku z tym kod funkcjonalny może być łatwiejszy do debugowania niż zwykły kod proceduralny.

Język F# nie jest czystym językiem funkcjonalnym, ale w pełni obsługuje programowanie funkcjonalne. Użycie niezmiennych wartości jest dobrym rozwiązaniem, ponieważ dzięki temu kod może korzystać z ważnego aspektu programowania funkcjonalnego.

Zmienne modyfikowalne

Możesz użyć słowa kluczowego mutable , aby określić zmienną, którą można zmienić. Zmienne modyfikowalne w języku F# powinny zwykle mieć ograniczony zakres jako pole typu lub jako wartość lokalną. Zmienne modyfikowalne z ograniczonym zakresem są łatwiejsze do kontrolowania i są mniej prawdopodobne, że zostaną zmodyfikowane w niepoprawny sposób.

Wartość początkową można przypisać do zmiennej modyfikowalnej przy użyciu let słowa kluczowego w taki sam sposób, jak w przypadku definiowania wartości. Jednak różnica polega na tym, że można następnie przypisać nowe wartości do zmiennych modyfikowalnych przy użyciu <- operatora, jak w poniższym przykładzie.

let mutable x = 1
x <- x + 1

Wartości oznaczone mutable mogą być automatycznie promowane do 'a ref wartości w przypadku przechwycenia przez zamknięcie, w tym formularzy, które tworzą zamknięcia, takie jak seq konstruktorzy. Jeśli chcesz otrzymywać powiadomienia w takim przypadku, włącz ostrzeżenie 3180 w pliku projektu lub podczas wywoływania kompilatora.

Tytuł Opis
let — Powiązania Zawiera informacje dotyczące używania słowa kluczowego let do powiązania nazw z wartościami i funkcjami.
Funkcje Zawiera omówienie funkcji w języku F#.

Zobacz też