С моей колокольни статических языков такая конструкция — избыточная сложность на пустом месте.
Но есть места, где такая сложность ещё и чем-то оправдана. Например, Qt — содержимое ячейки таблицы…
QVariant SomeModel::data(
const QModelIndex &index, int role = Qt::DisplayRole) const override {}
Для чего оно такое в Qt…
• в самом начале функции может вычисляться адрес в памяти, где все эти данные находятся, а за ним — длинный switch/case «в зависимости от роли, возьми то-то»;
• возможно возвращение пустого QVariant, когда надо сказать: «действуй как обычно»;
• наконец, возможны сложные операции с данными, вроде преобразования в отображаемую форму и сортировки, которые не зависят от специфики модели данных.
Так что ответ. Смотрите по месту: что вы хотите этой конструкцией сказать и почему более простые не оправданы.