Email or username:

Password:

Forgot your password?
Top-level
Rubikoid

@mudasobwa

Пост интересный, но одно место вызывает вопросы)

> Так делать не нужно. По двум причинам: если это π, оно никогда не изменится, и его никто не спутает с ФИО генерального.

Не соглашусь.
В случае пи, его, конечно, желательно взять вообще из констант самого языка, а не задавать самому.

Однако бывают такие случаи, когда нужно положить явную константу, не предполагаемую к изменению через «настройки», потому что это может, например, сломать логику или привести к каким-нибудь странным сайдэффектам.

11 comments
Aleksei � Matiushkin

@rubikoid и если ее не нужно менять — чем определение по месту хуже? Да, я знаю, что принято считать, будто бы читать `x *= 2.3456` сложно, а `COEFF_OF_GUAZILLIATION = 2.3456 […] x *= COEFF_OF_GUAZILLIATION` просто, но это ведь растиражированная ерунда.

Если это константа, я ее либо узна́ю в лицо, либо мне не нужно знать, что она — коэффициент гуазиллизации.

Rubikoid

@mudasobwa тебе не нужно, ты её помнишь [сейчас], а человеку, который будет потом читать этот код - нужно

Aleksei � Matiushkin

@rubikoid зачем? Это не праздный вопрос. Нет ни единой причины, по которой он должен знать, что вот это число называется вот так.

Rubikoid

@mudasobwa потому что человеку, который [потом] будет работать с этим кодом, надо полностью понимать, что этот код делает?

Добавлю абсурда: при таком подходе можно не именовать локальные переменные - зачем, по ним же и так всё видно.

Aleksei � Matiushkin

@rubikoid я эти клише слышал миллион раз, но спросить не поленюсь: как именование константы поможет понять, что этот код делает? Не общими словами только.

И вообще, сколько раз проблемы с пониманием кода упирались в магическую константу без имени?

Типа, знал бы, как зовут вот этот коэффициент — сразу бы все понял, а так — как в тумане?

Rubikoid

@mudasobwa как минимум, название константы может гуглиться.

Причем с ненулевой вероятностью - лучше, чем сама константа.

Кроме того, ассоциативная связь название константы -> алгоритм сильнее, чем сама константа -> алгоритм.

Aleksei � Matiushkin

@rubikoid это все рассказанная людьми, которые никогда всерьез не программировали, теория.

А вот практика: сколько раз лично вам доводилось гуглить константу из чужого кода? Это простой вопрос, но него можно ответить прямо, без цитат из вредных мотивационных книг.

Rubikoid

@mudasobwa а я не читал вредных^W любых мотивационных книг, я на основе собственного опыта говорю.

Лично мне константы гуглить периодически приходится, правда обычно я их достаю из бинарников, а не из исходного кода.

Хорошо, ну вот ещё пример, "живой":
Форматирование текста при выводе в консоль.

Я нахожу сомнительным тот факт, что кому-либо вообще может понадобится конфигурировать то, каким цветом в консоли рисуется OK.

Вместе с тем без использования констант код, во-первых, выглядит хуже, во-вторых становится копипастой (а следовательно повышается вероятность ошибок).

@mudasobwa а я не читал вредных^W любых мотивационных книг, я на основе собственного опыта говорю.

Лично мне константы гуглить периодически приходится, правда обычно я их достаю из бинарников, а не из исходного кода.

Хорошо, ну вот ещё пример, "живой":
Форматирование текста при выводе в консоль.

Я нахожу сомнительным тот факт, что кому-либо вообще может понадобится конфигурировать то, каким цветом в консоли рисуется OK.

# Python

c = rich.console.Console()

_ER = "\\[[red]ERR[/]]"
_OK = "\\[[green]OK[/]]"

c.print(f"{_OK} successful operation")
c.print(f"{_ER} unsuccessful operation")

## VS

c.print("\\[[green]OK[/]] successful operation")
c.print("\\[[red]ERR[/]] unsuccessful operation")
Aleksei � Matiushkin

@rubikoid это хороший пример, он действительно живой, вот только он полностью закрыт моим предложением вынести такую настройку в конфиг. Потому что она должна адекватно проверять stdout, и не печатать ничего, если он не терминал, а пайп, например.

> Я нахожу сомнительным тот факт, что кому-либо вообще может понадобится конфигурировать то, каким цветом в консоли рисуется OK.

Да ладно. Мои приложения не только разными цветами логи пишут, но еще и каждое свой эмоджик использует.

Rubikoid replied to Aleksei � Matiushkin

@mudasobwa
> Потому что она должна адекватно проверять stdout, и не печатать ничего, если он не терминал, а пайп, например.

А этим занимается библиотека, через которую вывод в консоль идет.
Вот уже она определяет, есть ли вообще поддержка цвета в терминале, и не в пайп ли случайно вывод идет, и очищает вывод от цветов.

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

В таком случае логичней было бы вынести условный IS_PIPE в конфиг, на основые которого вычислять те самые константы.

> Да ладно.

Но поменять цвет OK с зеленого на красный же не хочется?

@mudasobwa
> Потому что она должна адекватно проверять stdout, и не печатать ничего, если он не терминал, а пайп, например.

А этим занимается библиотека, через которую вывод в консоль идет.
Вот уже она определяет, есть ли вообще поддержка цвета в терминале, и не в пайп ли случайно вывод идет, и очищает вывод от цветов.

Aleksei � Matiushkin replied to Rubikoid

@rubikoid если у меня половина вывода из других мест зеленая — то на синий может захотеться.

Но в любом случае, я не воевал за копипасту, если оно используется в трех местах — надо избавиться от изменения в трех местах заранее, это не про читаемость вообще.

Go Up