Я бы предпочел второй метод.
И вот почему:
Процедуры с побочными эффектами имеют тенденцию вводить временную связь. Проще говоря, изменение порядка выполнения этих процедур может нарушить ваш код. Возврат значений и передача их другим нуждающимся методам делает явным взаимодействие между методами и, следовательно, его легче рассуждать и трудно забыть / получить в неправильном порядке.
Также возвращение значения облегчает тестирование вашего метода. С возвращаемым значением вы можете рассматривать вмещающий объект как черный ящик и игнорировать внутренности объекта, что, как правило, хорошо. Это делает ваш тестовый код более надежным.