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)
|