Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, _pk_sly, Вы писали:
__>>там ниже пишут про функции с WinAPI с пятью параметрами TRUE — что, правильнее сделать 32 функции? — это бред.
J>Нет, просто вместо булевских параметров сделать енумы.
интересный вывод...
дядя Боб пишет что основная проьлема булевых аргументов
Boolean arguments loudly declare that the function does more than one thing
енумы в этом смысле ничуть не лучше.
Здравствуйте, mogadanez, Вы писали:
__>>>там ниже пишут про функции с WinAPI с пятью параметрами TRUE — что, правильнее сделать 32 функции? — это бред.
J>>Нет, просто вместо булевских параметров сделать енумы.
M>интересный вывод...
M>дядя Боб пишет что основная проьлема булевых аргументов
M>M>Boolean arguments loudly declare that the function does more than one thing
M>енумы в этом смысле ничуть не лучше.
Любые неколичественные аргументы в этом смысле ничуть не лучше.
Вот пример из моих краёв. Ожидание сигнала по условной переменной делается в ядре FreeBSD4 (для простоты беру её) вызовом tsleep(var, prio), при этом прерываемость межзадачным сигналом задаётся битовым флажком PCATCH в prio, например:
tsleep(&softc->s_in, TTIPRI|PCATCH);
В Linux это же делается другой функцией — вместо sleep_on() вызывается sleep_on_interruptible(). Хотя на уровне шедулера их код совпадает на 90%, и всё, что внутри отличается в этом случае — простановка другого значения состояния задачи (TASK_UNINTERRUPTIBLE или TASK_INTERRUPTIBLE). Оптимизация в одну функцию с флагом напрашивается сама, но её не делают намеренно.
Здравствуйте, mogadanez, Вы писали:
__>>>там ниже пишут про функции с WinAPI с пятью параметрами TRUE — что, правильнее сделать 32 функции? — это бред.
J>>Нет, просто вместо булевских параметров сделать енумы.
M>дядя Боб пишет что основная проьлема булевых аргументов
M>M>Boolean arguments loudly declare that the function does more than one thing
M>енумы в этом смысле ничуть не лучше.
Ну в этом смысле да, но я лично смысла в "этом смысле" не вижу, и тут я с ним не согласен совершенно.
Одно дело, когда аргумент исползуется для переключения между двумя совершенно разными действиями типа сплясатьЖигуИлиСваритьСуп(bool), а другое — когда действие по сути одно и то же, а аргументы просто служат в качестве опций и тонкой настройки.
В первом случае — очевидно, нужно разбивать на две функции.
Во втором — нужно просто дать аргументам адекватные имена и типы и оставить одну функцию.
Вызов его функции rotate(30, true) совершенно нечитабелен, в то время как вызов rotate(30, Radians) и rotate(30, Degrees) совершенно однозначен и понятен без дополнительных пояснений, и я не вижу причин, по которым надо бы предпочесть этой одной функции две без этого дополнительного параметра. Особенно если таких аргументов много — получится, что надо делать 32 функции, что, очевидно, бред.
Здравствуйте, Mr.Cat, Вы писали:
MC>Я продолжаю настаивать, что градусы не лучше радианов.
MC>Я соглашусь, что градусы хороши как минимум в 2 случаях:
MC>В остальных случаях радианы ничуть не хуже.
Ну наконец-то
Несколько противоречиво, но все равно