Jason. Cała informatyka w jednym miejscu!

Następny artykuł jaki będzie wyjątkowo "lightowy", który stanowi dalszą część pogawędki o wartościach "null". Temat to bezpieczne odwołanie w języku Kotlin dla typów akceptujących wartość "null". Innymi słowy, to jest...zobaczcie sami!

BEZPIECZNE ODWOŁANIE W JĘZYKU KOTLIN OBOWIĄZKOWE DLA TYPÓW AKCEPTUJĄCYCH WARTOŚĆ "NULL"!

Poznaliście już sposób na definiowanie typu akceptującego wartość "null". Teraz pokażę Wam jak się odwoływać do takiej zmiennej celem przedostania się do jej właściwości, bądź metody. Męcząc ponownie język Java, wszystko szłoby po staremu:

String s = null;

System.out.println(s.length);

Kotlin traktując "na serio" swoją misję zapewniania bezpieczeństwa w kodzie, nie dopuści do odwoływania się poprzez tradycyjny operator kropki. Czyli poniższy kod skończy się błędem!

var s: String? = "Cebula"

println(s.length)

Jedyna droga to bezpieczne odwołanie. Bezpieczne odwołanie w języku Kotlin jest rozpoznawane także po znaku zapytania, tylko w połączeniu z operatorem kropki i taki też sposób to czynimy:

var s: String? = "Cebula"

println(s?.length)

Gdybyście przeoczyli ten drobny szczegół, ujrzycie go zaraz po nazwie zmiennej "s" ("?."). Taki kod zostanie już zaakceptowany przez kompilator i nie będzie do nas żadnych pretensji. Warto wiedzieć, że kod w zależności od wartości, może pójść dwiema różnymi ścieżkami.

Bezpieczne odwołanie w języku Kotlin

Bezpieczne odwołanie jest wymagane celem dostania się do właściwości i metod obiektów akceptujących wartość "null".

WARTOŚĆ "NULL" TO SPRAWDZENIE DWÓCH PRZYPADKÓW

Bezpieczne odwołanie w języku Kotlin zwala nam z głowy ręczne sprawdzanie czy zmienna aktualnie posiada jakąś wartość inną od "null":

if(s != null) {
	println(s.length)
}

To już sobie przypominamy, prawda? Mała niespodzianka! Kotlin w takiej sytuacji przeprowadza inteligentne rzutowanie typu na typ "zwykły", bez możliwości przypisywania wartości "null". A już dobrze wiecie, że w pewnych sytuacjach to rzutowanie może się nie powieść. Przeanalizujmy wspólnie co się stanie dla dwóch przypadków: dla zmiennej, w której nie ma wartości "null" i dla zmiennej, w której JEST wartość "null".

PRZYPADEK #1: ZMIENNA NIE POSIADA WARTOŚCI "NULL"

Gdy wykonamy bezpieczne odwołanie na zmiennej dopuszczającej możliwość podstawienia wartości "null" i okaże się, że zmienna nie zawiera wartości "null", to wydarzy się konkretne zdarzenie, osobno dla danej składowej i metody:

  • w przypadku pobierania właściwości, zostanie zwrócona jej wartość
  • w przypadku wywoływania metody, która zwraca wartość, zostanie zwrócona jej wartość
  • w przypadku wywoływania metody, która nie zwraca żadnej wartości, zostanie ona wykonana
PRZYPADEK #2: ZMIENNA POSIADA WARTOŚĆ "NULL"

Wariant drugi, to moment w którym bezpieczne odwołanie "wykryje" obecność wartości "null" w zmiennej. Dla danej składowej i metody oznacza to inną sytuację:

  • w przypadku pobierania właściwości, zostanie zwrócona wartość "null"
  • w przypadku wywoływania metody, która zwraca wartość, zostanie zwrócona wartość "null"
  • w przypadku wywoływania metody, która nie zwraca żadnej wartości, nic się nie wykona

Widzicie różnicę w działaniu? Normalnie musielibyśmy to ręcznie rozbijać na atomy, a bezpieczne odwołanie w języku Kotlin robi to za nas automatycznie!


Z samego tematu bezpiecznych odwołań to tyle. Możecie wysnuwać pewne nieprzyjemne wnioski, natomiast spróbujcie zrozumieć, że kompilator robi to dla Waszego dobra! A dodatkowy znaczek zapytania na pewno nie jest jakimś gigantycznym obciążeniem...

PODOBNE ARTYKUŁY