Start  |  Gry  |  Słowniki *  
 : : Menu
Dla początkujących
Dla praktyków
Język
Wersje
Książki
Smalltalk vs. Java
Wiadomości
Linki
FAQ
Pobierz
Co nowego?
Mapa serwisu
Kontakt
Impressum
Księga gości
Po godzinach
Nakarm głodne dziecko - wejdź na stronę www.Pajacyk.pl
 

Użycie ifTrue:, ifFalse:

W większości popularnych implementacji Smalltalka metoda ifTrue: zwraca nil w przypadku, gdy odbiorca tej metody jest instancją klasy False. To samo ma miejsce w przypadku wysłania metody ifFalse: do zmiennej przechowującej instancję klasy True.

| boolean result |
boolean := false.
result := boolean ifTrue: ['some object'].

W wyniku wykonania powyższego kodu zmiennej result zostanie przypisana wartość nil.
yTak samo stanie się w poniższym przykładzie:

| boolean result |
boolean := true.
result := boolean ifFalse: ['some object'].

Zwracanie nil przez metodę ifTrue: po wysłaniu jej do instancji klasy False i przez metodę ifFalse: wysłaną do instancji klasy True nie jest jednak regułą. Projekt standardu ANSI przewiduje w tym wypadku zwrócenie nieokreślonej wartości, tzn. wartość ta nie musi być wcale nil.
Dlatego, aby uniezależnić się od aktualnej implementacji bloku i zapewnić pełną przenośność kodu lepiej jest pisać:

| boolean result |
boolean := false.
result := boolean ifTrue: ['some object'] ifFalse: [nil].

oraz

| boolean result |
boolean := true.
result := boolean ifTrue: [nil] ifFalse: ['some object'].

Z drugiej jednak strony obecnie popularne środowiska Smalltalk zwracają w takim przypadku nil, tak więc użycie drugiego sposobu zapisu nie jest w większości zastosowań konieczne dla zachowania przenośności kodu.


(pn)



SelfSmaltalk, (c) ObjectSpace.Net
Strona wygenerowana przy pomocy edytora aceHTML
i systemu VisualWorks Smalltalk NC 7.0