Typ Optional – Wikipedia, wolna encyklopedia

Typ opcjonalny – typ polimorficzny występujący w niektórych językach programowania. Pozwala określić, czy obiekt lub zmienna mają określoną wartość, czy też nie. Służy do wyraźnego i bezpiecznego modelowania przypadków, w których brak wartości jest dopuszczalny, eliminując konieczność używania specjalnych wskaźników braku danych, takich jak null itp.[1]

Obiekt, który może przyjąć taką wartość powinien zostać zadeklarowany jako typ Optional. Dzięki tego rodzaju deklaracji kod staje się bardziej ekspresywny, intencja wyraźnie wskazana, a obsługa braku wartości wymuszona, zmniejszając ryzyko błędów[2][3][4].

Przykłady

[edytuj | edytuj kod]

Język Swift

[edytuj | edytuj kod]

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

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 niezależnie od tego, czy ta istnieje. Jeżeli zmienna lub stała typu Optional przechowuje wartość nil, program ulegnie awarii w trakcie działania. Wymuszone rozpakowanie realizuje się za pomocą symbolu ![2][5].

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 wartość. Jeśli tak, wartość ta może zostać przypisana do innej zmiennej lub stałej. Dołączanie typu Optional stosuje się według następującego schematu:[2]:

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>[6].

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ść[7].

Język Java

[edytuj | edytuj kod]

W języku Java typ opcjonalny definiuje się za pomocą klasy Optional, która jest częścią pakietu java.util. Jest to typ generyczny, który może przechowywać wartość lub wskazywać, że jest ona nieobecna[4].

Optional<String> optionalValue = Optional.of("Hello"); 

Wartości mogą być również zadeklarowane jako opcjonalne, przy czym Optional.empty() reprezentuje brak wartości. Aby sprawdzić obecność wartości, używa się metody isPresent() lub nowszej ifPresent():

optionalValue.ifPresent(value -> System.out.println("Hello")); 

Można także używać metod takich jak orElse() do podania domyślnej wartości, jeśli Optional jest pusty:

String rezultat = optionalValue.orElse("Wartość domyślna"); 

Język Scala

[edytuj | edytuj kod]

W języku Scala używa się typu Option. Może on przyjąć dwie formy: Some (z wartością) lub None (brak wartości)[8]:

val imie: Option[String] = Some("Alicja") val brakImienia: Option[String] = None 

Przypisy

[edytuj | edytuj kod]
  1. Uses for Optional in Java | Baeldung [online], www.baeldung.com, 28 listopada 2022 [dostęp 2024-12-15] (ang.).
  2. 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.
  3. Optional - Swift Standard Library | Apple Developer Documentation [online], developer.apple.com [dostęp 2019-02-17] (ang.).
  4. a b Optional (Java Platform SE 8 ) [online], docs.oracle.com [dostęp 2024-12-15].
  5. a b Optional [online], Apple Developer Documentation [dostęp 2024-01-22] (ang.).
  6. std::optional - cppreference.com [online], en.cppreference.com [dostęp 2024-01-22] (ang.).
  7. Option in core::option - Rust [online], doc.rust-lang.org [dostęp 2023-11-08].
  8. Option [online], www.scala-lang.org [dostęp 2024-12-15].