Аргументы переменных следует включать, даже если сокращенные списки могут служить одной и той же цели, поскольку они повышают интуитивность и уменьшают количество ошибок.
[Предполагается, что вы согласны с тем, что приемлемым «использованием» языковой функции является интуитивность и уменьшение ошибок.]
Я основываю это на чисто анекдотическом опыте использования обеих этих функций на проприетарном языке сценариев игры и наблюдаемой кривой обучения и общих ошибках, допущенных пользователями. [Пользователи варьировались от новичков до ветеранов индустрии в нескольких многолетних проектах в течение полутора десятилетий в различных игровых компаниях - самая большая с 160 членами команды (20 основных пользователей сценариев + около 50 сценариев в реальном времени ») онлайн-пользователи). Некоторые были чистыми сценаристами, которые знали только этот язык сценариев или пару других, а некоторые были также опытными программистами на C ++ - обе группы, похоже, имели одинаковые результаты по этому вопросу.]
[Если это уместно - язык, на котором я это основываю, также имел типизированные переменные аргументы, и у всех типов есть общий базовый класс.]
За прошедшие годы я создал несколько двойных методов, которые были идентичны, хотя один использовал аргументы переменной длины, а другой использовал список. Внутренне оба метода с разными интерфейсами сводятся к одному и тому же коду - они сводятся только к стилистически синтаксической разнице.
В «диком» я обнаружил механизм, использующий сокращенный список с двумя дополнительными символами для включения, означавший, что есть только еще два символа, которые можно забыть. Я основываю это на том, сколько раз меня вызывали, чтобы «помочь» пользователям, у которых были проблемы с версиями методов, основанными на списках, в отличие от методов с переменным аргументом.
Что касается интуитивности, я провел несколько профилирований / подсчетов для методов, и количество случаев использования методов переменной длины значительно перевешивало методы списка. Также, когда их спрашивали, люди, казалось, эстетически предпочитали переменные версии arg.
Тем не менее, я все еще считаю, что очень полезно использовать методы, основанные на списках, особенно при выполнении более сложных вызовов и метапрограммировании, поскольку удобно обрабатывать группу аргументов как единый элемент и общие функции списка - пересечения, объединения В качестве аргументов также можно использовать фильтрацию и т. д.
Я большой сторонник только добавления функций, которые необходимы, чтобы уменьшить количество, которое конкретный программист должен держать в голове в любой момент, хотя на протяжении многих лет я обнаружил, что допустимым исключением из этого правила является иногда гарантируется, если функция проще в использовании или вызывает меньше ошибок. [Более ранний язык сценариев, который я написал, был очень оптимизированным - и, на мой взгляд, элегантным - хотя я усвоил трудный способ, которым людям это нравилось больше, и у него было меньше проблем с ним, когда я развил его, чтобы получить немного больше "избыточности" во имя интуитивности и уменьшения ошибок.]
Очевидно, что разные языки с разными элементами вокруг этих функций и разными пользователями и доменами могут иметь разные результаты - хотя в отношении того, чего это стоит, я довольно уверен, основываясь на том, как долго я делал свои наблюдения.
[Кроме того]
Другая потенциальная конкретная разница между переменными аргументами и сокращенными списками зависит от того, может ли язык указать разницу между тем, как аргументы передаются в аспект переменной arg интерфейса метода / функции и аргументов / операторов, используемых в качестве элементы в сокращенном списке.
Если переменный параметр arg может указывать нечто сверх того, что может быть указано для сокращенного списка (или наоборот) - то есть аргументы передаются скорее по ссылке или по значению, аргументы должны использовать какую-то ленивую оценку или оценивается по вызову и т. д. - тогда можно сделать больше с тем или иным синтаксисом.
Это действительно зависит от языка, и не будет никакой разницы, если аргументы, используемые переменным аргументом «группа» или сокращенные элементы списка, могут быть «переданы» таким же образом.