Wie bei den meisten Dingen ist es nur "schlechte Praxis", wenn es zu schlecht funktionierenden/unlesbaren/schwer zu wartenden Code führt oder wenn Sie nicht wissen, warum Sie es tun.
In den meisten Fällen hat die Verwendung eines Ausgabeparameters diese Auswirkungen nicht.
In Ihrem addTokenErrorsToReport ist es sicherlich ein geeigneter Ansatz. Sie fügen Token-Fehlern zu einem Bericht hinzu - die Funktion muss wissen, welche Token sie hinzufügen und welcher Bericht hinzugefügt wird. Die Funktion führt eindeutig genau die Operation durch, die ohne Nachteile ausgeführt werden sollte.
Wenn Sie den createTokenErrorsReport-Ansatz verwenden würden, müssten Sie jedem Aufruf folgen, indem Sie die neuen Token in den vorhandenen Bericht einfügen. Wenn das Hinzufügen von Token zu einem vorhandenen Bericht eine gängige Operation ist, ist es auf jeden Fall sinnvoll, eine Methode hinzuzufügen. Das heißt nicht, dass createTokenErrorsReport nicht ebenfalls vorhanden sein sollte - wenn das Erstellen neuer Berichte aus einer Tokenliste eine übliche Operation ist, dann möchten Sie eine Funktion, die das tut.
Ein gutes Beispiel für eine gute Verwendung eines Ausgabeparameters ist Collections.sort
, die eine Liste an Ort und Stelle sortiert. Der Leistungseinbruch beim Erstellen einer neuen Kopie der Liste und beim Zurücksenden der sortierten Kopie wird vermieden, während Sie gleichzeitig nicht daran gehindert wird, eine Kopie zu erstellen und die Kopie zu sortieren, wenn Sie dies wünschen.
Verwenden Sie einfach das beste Tool für den Job und halten Sie Ihren Code prägnant.
Fragen, die hauptsächlich auf Meinungen basieren, passen nicht gut zu SO. –