Написал третью часть про разработку ПО https://ambment.cat/posts/2023-12-25-2.html
Написал третью часть про разработку ПО https://ambment.cat/posts/2023-12-25-2.html 14 comments
@rubikoid и если ее не нужно менять — чем определение по месту хуже? Да, я знаю, что принято считать, будто бы читать `x *= 2.3456` сложно, а `COEFF_OF_GUAZILLIATION = 2.3456 […] x *= COEFF_OF_GUAZILLIATION` просто, но это ведь растиражированная ерунда. Если это константа, я ее либо узна́ю в лицо, либо мне не нужно знать, что она — коэффициент гуазиллизации. @mudasobwa тебе не нужно, ты её помнишь [сейчас], а человеку, который будет потом читать этот код - нужно @rubikoid зачем? Это не праздный вопрос. Нет ни единой причины, по которой он должен знать, что вот это число называется вот так. @mudasobwa потому что человеку, который [потом] будет работать с этим кодом, надо полностью понимать, что этот код делает? Добавлю абсурда: при таком подходе можно не именовать локальные переменные - зачем, по ним же и так всё видно. @rubikoid я эти клише слышал миллион раз, но спросить не поленюсь: как именование константы поможет понять, что этот код делает? Не общими словами только. И вообще, сколько раз проблемы с пониманием кода упирались в магическую константу без имени? Типа, знал бы, как зовут вот этот коэффициент — сразу бы все понял, а так — как в тумане? @mudasobwa как минимум, название константы может гуглиться. Причем с ненулевой вероятностью - лучше, чем сама константа. Кроме того, ассоциативная связь название константы -> алгоритм сильнее, чем сама константа -> алгоритм. @rubikoid это все рассказанная людьми, которые никогда всерьез не программировали, теория. А вот практика: сколько раз лично вам доводилось гуглить константу из чужого кода? Это простой вопрос, но него можно ответить прямо, без цитат из вредных мотивационных книг. @rubikoid это хороший пример, он действительно живой, вот только он полностью закрыт моим предложением вынести такую настройку в конфиг. Потому что она должна адекватно проверять stdout, и не печатать ничего, если он не терминал, а пайп, например. > Я нахожу сомнительным тот факт, что кому-либо вообще может понадобится конфигурировать то, каким цветом в консоли рисуется OK. Да ладно. Мои приложения не только разными цветами логи пишут, но еще и каждое свой эмоджик использует. @rubikoid если у меня половина вывода из других мест зеленая — то на синий может захотеться. Но в любом случае, я не воевал за копипасту, если оно используется в трех местах — надо избавиться от изменения в трех местах заранее, это не про читаемость вообще. @mudasobwa мне понадобилось лет 10, чтобы начать это понимать. Но этот подход любят усложнять и требовать, например, заменяемость БД (репозитория). Ни разу ещё не видел, чтобы это было нужно. Кроме очень специфических случаев. Для себя правило я сформулировал так: решения в коде сегодня должны минимизировать ограничения для новых решений в будущем как можно дешевле. Сделать конфиг сразу или потом? Если легко сделать потом, то можно и потом. Если дороже будет — сейчас. @mkalygin ну БД — это слишком, а вот вместо `Rabbit.publish` сделать `Brocker.publish` нужно сразу, потому что завтра нарисуется Кафка, или публиковаться надо будет в три места сразу. |
@mudasobwa
Пост интересный, но одно место вызывает вопросы)
> Так делать не нужно. По двум причинам: если это π, оно никогда не изменится, и его никто не спутает с ФИО генерального.
Не соглашусь.
В случае пи, его, конечно, желательно взять вообще из констант самого языка, а не задавать самому.
Однако бывают такие случаи, когда нужно положить явную константу, не предполагаемую к изменению через «настройки», потому что это может, например, сломать логику или привести к каким-нибудь странным сайдэффектам.