Re[4]: Смерть булевским аргументам!
От: mogadanez Чехия  
Дата: 14.09.09 08:47
Оценка: +1
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, _pk_sly, Вы писали:


__>>там ниже пишут про функции с WinAPI с пятью параметрами TRUE — что, правильнее сделать 32 функции? — это бред.

J>Нет, просто вместо булевских параметров сделать енумы.

интересный вывод...

дядя Боб пишет что основная проьлема булевых аргументов

Boolean arguments loudly declare that the function does more than one thing


енумы в этом смысле ничуть не лучше.
Re[5]: Смерть булевским аргументам!
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.09.09 09:02
Оценка:
Здравствуйте, 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). Оптимизация в одну функцию с флагом напрашивается сама, но её не делают намеренно.
Re[5]: Смерть булевским аргументам!
От: jazzer Россия Skype: enerjazzer
Дата: 14.09.09 09:12
Оценка:
Здравствуйте, 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 функции, что, очевидно, бред.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[14]: Смерть булевским аргументам!
От: jazzer Россия Skype: enerjazzer
Дата: 14.09.09 11:28
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Я продолжаю настаивать, что градусы не лучше радианов.

MC>Я соглашусь, что градусы хороши как минимум в 2 случаях:
MC>В остальных случаях радианы ничуть не хуже.

Ну наконец-то
Несколько противоречиво, но все равно
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.