Tak jak w przypadku większości rzeczy, jest to tylko "zła praktyka", jeśli prowadzi do źle działającego/nieczytelnego/trudnego do utrzymania kodu lub jeśli nie wiesz, dlaczego to robisz.
W większości przypadków użycie parametru wyjściowego nie powoduje wystąpienia tych efektów.
W Twoim addTokenErrorsToReport z pewnością jest to odpowiednie podejście. Do raportu dodajesz błędy tokena - funkcja musi znać tokeny, które dodaje i raport, do którego dodaje. Funkcja wyraźnie wykonuje dokładnie operację, do której został zaprojektowany, bez żadnych wad.
Jeśli miałbyś zastosować metodę createTokenErrorsReport, musisz wykonać każde wywołanie, wstawiając nowe tokeny do istniejącego raportu. Jeśli dodawanie tokenów do istniejącego raportu jest typową operacją, to zdecydowanie ma sens dodawanie metody. To nie znaczy, że createTokenErrorsReport nie powinien istnieć również - jeśli tworzenie nowych raportów z listy tokenów jest typową operacją, to potrzebujesz funkcji, która to robi.
Doskonałym przykładem dobrego wykorzystania parametru wyjściowego jest Collections.sort
, który sortuje listę w miejscu. Odzyskuje się wydajność tworzenia nowej kopii listy i zwracania posortowanej kopii, a jednocześnie nie ogranicza się do tworzenia kopii i sortowania kopii, jeśli chcesz.
Wystarczy użyć najlepszego narzędzia do wykonania pracy i zachować zwięzłość kodu.
Pytania oparte głównie na opiniach nie nadają się do SO. –