Показать сообщение отдельно
Старый 24.09.2020, 11:35   #21
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Ответ: Вызов гуя, есть проблемы.

Сообщение от ABTOMAT Посмотреть сообщение
Это классический антипаттерн "Magic Numbers", поищи по этому запросу в Интернете, думаю, что ты найдёшь много хороших разъяснений, что это такое, и почему так делать не надо.

Если кратко, то вот что я бы лично для себя выделил:
  • Часто бывает нужно потом эти числа поменять, и удобнее, если они все будут находиться где-то в одном месте, а не искать, где они у тебя по коду раскиданы.
  • Часто бывает, что одну и ту же константу (или переменную) ты используешь потом ещё где-то, и тогда уже придётся следить, чтобы они в двух местах были одинаковы. При использовании "магических чисел" это ещё один фактор, по причине которого можно лохануться, а потом искать причину.
  • Свой код кроме тебя самого, даже если ты работаешь не в команде, будешь читать ещё и ты сам, но спустя месяц, например. Вот попробуй открой какой-нибудь старый проект, который ты как минимум уже месяц не открывал, и попытайся вспомнить, что же это число означает, и почему оно именно такое?

Конечно же, доводить до полного абсолюта эту идею тоже не надо.
Если где-то нет других вариантов, то пишем число.
Например, если надо что-то обнулить, то, понятное дело, нельзя обнулить что-то с числом 2.71. Обнуляют всегда с нулём. Поэтому и пишем просто 0, других вариантов нет, надобности заводить переменную "zero" тоже нет.

Циклы for бывают чаще всего с 0, но бывают и с 1, но там тоже обычно нет вариантов. Поэтому переменные "zero" и "one" тоже не нужны.

Бывает ещё чего-то нужно вдвое больше, например, если ты располагаешь какой-то объект по центру чего-то, и поэтому его надо сдвинуть ровно на половину его ширины. Поэтому мы умножаем её на 0.5 (ну или делим на 2, кому как больше нравится). Любое другое значение будет означать, что объект поставится криво. Поэтому пишем само число.

В качестве исключения ещё можно назвать какой-нибудь временный код, по типу for(int i=0; i<10; i++) createEnemy(); где ты, допустим, чисто для теста хочешь создать чего-нибудь 10 штук, потестить и удалить. Т.е. этот код не предполагается, что будет "жить" сколько-нибудь долго, и когда ты доделаешь функцию до конца, ты это удалишь.

В-общем, если обобщить, то идея такая: если есть (даже теоретическая) возможность подгонки числа, то хорошим тоном будет завести под него переменную или константу. Особенно если стороннему человеку не очень понятно с первого взгляда, а что это число означает. Тогда в названии переменной будет подсказка, что это число делает, что сэкономит читающему время. Помни, что читающим твой код и не понимающим, что он делает, будешь ты сам спустя долгое время.

И только если вариантов никаких других нет вообще, тогда можно написать само число (обычно это -1, 0, 1, 2, 0.5).


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

Я открываю свои коды тринадцатилетней давности, и сразу понимаю что к чему в них.
По текущему проекту передышки по 2 месяца, возвращаюсь ничего не помня,
открываю и вижу как это работает, а важные переменные подписаны.
Для меня всё сразу очевидно, что куда как, т.к. создано мной,
и работает по моей логике, собственно мой код это то, как я мыслю.
На то как читают мой код другие мне абсолютно по барабану,
т.к. соло проект, и мне не нужно работать над тем,
чтобы кто-то понял внутряк. Проект не будет опен.

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

Я знаю что есть некие каноны кодинга, и даже могу по канону,
но вот насрать вообще, до тех пор пока мне удобно, и пока я понимаю
что у меня там в строках происходит ))

Это ребята всё равно, что спорить о том, как правильно задницу вытирать,
сверху вниз, или снизу вверх, зевой плюс, или лопухом )

Давайте уже не будем флудить по теме, я задачу решил по своему,
на будущее висит решение пакса, к которому я в каком-либо моменте
возможно обращусь ещё.

Ну а про нормы морали программиста, и феншуй, предлагаю создать отдельную тему,
где каждый может заняться просветительством ))

Все советы были полезны, спасибо.

P.s. Я сейчас пишу анимацию хелсбара на "магических числах",
надо наверно будет прикола ради код выложить,
и посмотреть как в меня полетят ссаные тряпки )))
__________________
Проект "Deathbring World - Rangers" и его финансовая поддержка:
https://boosty.to/deathbringrangers

Я на - TWITCH
Канал на YouTube
(Offline)
 
Ответить с цитированием