Typ Optional

Z Wikipedii, wolnej encyklopedii

Typ opcjonalny – typ polimorficzny występujący w niektórych językach programowania. Pozwala określić, czy obiekt lub zmienna mają wartość nieokreśloną, czy też jej brak.

Egzemplarz mogący przyjąć wartość nil powinien zostać zadeklarowany typem Optional. Dzięki tego rodzaju deklaracji, kod staje się bardziej ekspresywny.[1][2]

Przykłady[edytuj | edytuj kod]

Język Swift[edytuj | edytuj kod]

W języku Swift typ Optional deklaruje się za pomocą znaku ?[1][3]:

var przykladowyTypOptional: String?
//W tym momencie przykladowyTypOptional przyjmuje wartość nil
przykladowyTypOptional = "Tekst"
//W tym momencie przykladowyTypOptional przyjmuje wartość "Tekst"

var optionalInt: Int?
//W tym momencie optionalInt przyjmuje wartość nil
optionalInt = 1234
//W tym momencie optionalInt przyjmuje wartość 1234

W przypadku wymuszonego rozpakowania należy przyjąć warunek, że typ Optional nie przechowuje wartości nil, ponieważ kod próbuje uzyskać dostęp do wartości bez względu na to, czy ta wartość istnieje. Jeżeli zmienna lub stała typu Optional przechowuje wartość nil, program ulegnie awarii w trakcie działania. Z wymuszonego rozpakowania korzysta się, używając symbolu !.[1][3]

var TypOptional: String?
TypOptional = "Tekst"
let constString = TypOptional!

Za pomocą dołączania typu Optional można sprawdzić, czy zmienna lub stała typu Optional zawiera jakąś wartość. Jeżeli tak, to można tę wartość przypisać do innej stałej, bądź zmiennej. Z dołączania typu Optional korzysta się według następującego schematu:[1]

if let stalaTymczasowa = typOptional{
    //tu można wykonać pewne działania ze stalaTymczasowa
} else {
    //typ Optional nie zawiera wartości, tzn. zawiera wartość nil. Wykonany zostanie wiersz poleceń umieszczonych w tym miejscu. 
}

Język C++[edytuj | edytuj kod]

W języku C++ od wersji 17 istnieje typ szablonowy std::optional<T>.[4]

Język Rust[edytuj | edytuj kod]

W języku Rust typ opcjonalny definiuje się jako enum Option<T> { None, Some(T) }, gdzie None informuje o braku wartości, zaś Some zawiera wartość[5].

Przypisy[edytuj | edytuj kod]

  1. a b c d Matthew Matihiaas, John Gallagher, Programowanie w języku Swift, HELION S.A., s. 93-102, ISBN 978-83-283-3142-6.
  2. Optional - Swift Standard Library | Apple Developer Documentation [online], developer.apple.com [dostęp 2019-02-17] (ang.).
  3. a b Optional [online], Apple Developer Documentation [dostęp 2024-01-22] (ang.).
  4. std::optional - cppreference.com [online], en.cppreference.com [dostęp 2024-01-22] (ang.).
  5. Option in core::option - Rust [online], doc.rust-lang.org [dostęp 2023-11-08].