Здравствуйте, stronk2, Вы писали:
S>Здравствуйте, мыщъх, Вы писали:
М>>контрпример -- коэффициенты в различных вычислениях. самые умные имена будут К1, К2, К3. "умность" тут в краткости, т.к. К1 короче чем 123456789.987654321, но за это приходится платить поиском мест, где они определены.
S>Какие коэффициенты, откуда взялись?
например, перевод фаренгейта в цельсия. вот формула. вас не затруднит написать программу?
очень хочется увидеть осмысленные названия вместо магических констант. а самое главное -- понять _нахрена_ оно им? и это -- простейший случай. или вы не сталкивались ни с какими вычислениями вообще? какую формулу ни возьми -- в ней полно безымянных "магических констант". попытка дать им "самопальные" имена только запутает программу.
М>>если код размножен в 100500 местах, то это очень плохо. если код размножен в двух местах, которые к тому же слегка отличаются друг от друга -- это вполне нормально и ничуть не смертельно.
S>Самый худший вид копипасты, за который вообще надо руки рубить. Попробуй определи с одного взгляда — чем отличаются два похожих куска текста, и отличаются ли вообще.
и за что тогда рубить руки? вы снова мыслите тактически. обратите внимание на копи-пасту в АПИ. размножение сущностей с идентичной семантикой, но разными именами АПИ -- это, действительно, мрак. тем более, что с АПИ людям работать, а с копи-пастой в худшем случае появляются проблемы с поддержкой кода, да и то не факт, т.к. преодоление копипасты путем, скажем, шаблонов -- встречает свои проблемы.
S>А нагадить посреди своей комнаты — это стратегия или тактика?
гадить перед приходом вероятного противника -- это тактический прием. гадить после его ухода -- стратегический.
М>>ЗЫ. пояснения не помешают. что такое магические константы?
S>Ну ладно, нельзя требовать, чтобы все знали терминологию. Но хотя бы гуглить ты умеешь?
и где там определение? например, делим длину на два. нужно ли писать
#define half 2
или можно писать /2 ? или вот... for (idx=0;idx<len;idx++) это нормально? или неявный 1 нужно заменить на one, 0 -- start_index, len -- end_index
вы же не можете не признать, что end_index это лучше? for (idx=start_index;idx==end_index;idx+=one), где end_index = len — one, правда, тут нужно еще предусмотреть случай когда len == 0, где 0 определен как empty_xxx (вместо ххх -- название сущности).
так все-таки где граница магичности? а как на счет магических алгоритмов? смотрите в программу и видите в ней 1 + х и думаете, что это наверное ошибка, т.к. тут должно быть е**х, но программа работает. почему? вопрос в самом деле интересный, т.к. при копи-пасте она проработает недолго и быстро сломается. если х это не аргумент функции и если х удовлетворяет определенным условиям неизвестным вам, то оно... работает. причем очень шустро. допустим, функция не может возвращать ошибку и не имеет права кидать исключений, а х -- вычисляется в рантайме -- тут ведь даже проверку на соответствие этим условиям не вставишь...
а вот еще. написано -- (k + 4)/10. оно заменяет кучу ресурсоемких вычислений и выдает удивительно точный результат, который долго пытались объяснить аналитическим путем, выдвинули несколько гипотез почему оно работает, но потом плюнул и забили болт. работает -- и ладно. для k == 8 не работает. но k никогда не равно 8, т.к. не соответствует никакой физической реальности, но работает для 7 и 9. даже для -1 работает. во. а теперь скажите мне -- что оно считает. а оно определенно что-то считает.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.