LINUX.ORG.RU

История изменений

Исправление legolegs, (текущая версия) :

завтра появятся типы пунктира (давно хотел сделать, руки не доходят), мне еще один параметр вводить?

Конечно. Его так и так вводить, но это можно сделать явно, дописав аргумент в функцию, а можно скрытно, через флаги. Но неявные аргументы - это грабли.

Зачем, если я могу не меняя интерфейс функции и не ломая обратную совместимость дополнить функционал?

С каждым новым флагом придётся во все рисовальные функции дописывать всё усложняющиеся проверки на непротиворечивость. А вариант с раздельными enum просто не предусматривает возможности записать вызов функции неверно и проверки не нужны => код библиотеки меньше, ошибок меньше.

Обратную совместимость можно обеспечить через значения по умолчанию int f(x, y=0)

У функции и так 5 «сложных» параметров

Это с точки зрения компилятора их пять. А с точки зрения программиста их шесть, и планируется седьмой, и от этого не уйти. Если три параметра упаковать в один аргумент функции их семантически всё равно три, да ещё и правило упаковки добавляется. Сложность системы возрастает, а программист должен со сложностью бороться.

Исходная версия legolegs, :

завтра появятся типы пунктира (давно хотел сделать, руки не доходят), мне еще один параметр вводить?

Конечно. Его так и так вводить, но это можно сделать явно, дописав аргумент в функцию, а можно скрытно, через флаги. Но неявные аргументы - это грабли.

Зачем, если я могу не меняя интерфейс функции и не ломая обратную совместимость дополнить функционал?

С каждым новым флагом придётся во все рисовальные функции дописывать всё усложняющиеся проверки на непротиворечивость. А вариант с раздельными enum просто не предусматривает возможности записать вызов функцию неверно и проверки не нужны => код библиотеки меньше, ошибок меньше.

Обратную совместимость можно обеспечить через значения по умолчанию int f(x, y=0)

У функции и так 5 «сложных» параметров

Это с точки зрения компилятора их пять. А с точки зрения программиста их шесть, и планируется седьмой, и от этого не уйти. Если три параметра упаковать в один аргумент функции их семантически всё равно три, да ещё и правило упаковки добавляется. Сложность системы возрастает, а программист должен со сложностью бороться.