Czasami natrafiam na metody, w których programista postanowił zwrócić coś, co nie jest krytyczne dla funkcji. Mam na myśli, że patrząc na kod, wygląda na to, że działa tak samo dobrze, void
a po chwili zastanowienia pytam „Dlaczego?” Czy to brzmi znajomo?
Czasami zgadzam się, że najczęściej lepiej jest zwrócić coś takiego bool
lub int
, a nie po prostu zrobić void
. Nie jestem jednak pewien, ogólnie rzecz biorąc, o zaletach i wadach.
W zależności od sytuacji zwracanie int
może uświadomić programowi wywołującemu liczbę wierszy lub obiektów, na które wpływa metoda (np. 5 rekordów zapisanych w MSSQL). Jeśli metoda taka jak „InsertSomething” zwraca wartość logiczną, mogę mieć metodę zaprojektowaną tak, aby zwracała true
sukces, w przeciwnym razie false
. Dzwoniący może zdecydować się na działanie lub nie na podstawie tych informacji.
Z drugiej strony,
- Czy może to prowadzić do mniej wyraźnego celu wywołania metody? Złe kodowanie często zmusza mnie do dwukrotnego sprawdzenia zawartości metody. Jeśli coś zwróci, powie ci, że metoda jest tego typu, że musisz coś zrobić ze zwróconym wynikiem.
- Innym problemem byłoby to, że jeśli implementacja metody jest dla Ciebie nieznana, co deweloper postanowił zwrócić, co nie jest krytyczne pod względem funkcji? Oczywiście możesz to skomentować.
- Wartość zwracana musi zostać przetworzona, gdy przetwarzanie może zostać zakończone w końcowym przedziale metody.
- Co dzieje się pod maską? Czy wywoływana metoda została wywołana z
false
powodu wyrzuconego błędu? A może zwrócił fałsz z powodu wyniku oceny?
Jakie są twoje doświadczenia z tym? Jak byś na to zareagował?
void
co najmniej informuje programistę, że wartość zwracana przez metodę jest nieistotna; wykonuje akcję, a nie oblicza wartość.