|
26.11.2013, 15:33 | #1 |
Участник
|
Классные программисты MS Бразилии создали сей шедевр
Разбираясь с чудесной работой элемента бразильского слоя был обнаружен сей код, который не нуждается, по моему, в комментариях. Код достаточно свеженький.
X++: //<MSBS user="jjuni" woritem="Layout Danf" date="05/10/2012"> maskPhone = strreplace(eFiscalDocument.recipientPhone(), "-", ""); maskPhone = strreplace(eFiscalDocument.recipientPhone(), "(", ""); maskPhone = strreplace(eFiscalDocument.recipientPhone(), ")", ""); maskPhone = strreplace(eFiscalDocument.recipientPhone(), " ", ""); qtdChar = strlen(maskPhone); switch(qtdChar) { case 10: case 11: maskPhone = "(" + substr(maskPhone, 1, 2) + ") " + substr(maskPhone, 3, 4) + "-" + substr(maskPhone, 7, 4); break; case 8: maskPhone = substr(maskPhone, 1, 4) + "-" + substr(maskPhone, 5, 4); break; default: maskPhone = eFiscalDocument.recipientPhone(); break; } return maskPhone; //</MSBS> С уважением, Дмитрий. |
|
26.11.2013, 16:15 | #2 |
Участник
|
У нас подобным образом программист один писал, вспомнилось сразу. |
|
26.11.2013, 22:31 | #3 |
Участник
|
- Как быстро Вы пишите код?
- Очень быстро, со скоростью 1000 строк в час... (правда обычно фигня какая-то получается) |
|
27.11.2013, 10:55 | #4 |
Участник
|
Честно говоря, не понял в чем "прикол". Именно данный фрагмент "сам по себе" вполне корректно написан. Если Вас смущает, что сначала некие служебные символы удаляются, а потом они же вставляются, так ведь не известно, где именно эти символы стояли в исходной строке.
Другой вопрос, как этот фрагмент используется. Есть ли необходимость приведения к определенному формату для решения поставленной задачи. Но по данному фрагменту сказать этого нельзя. Ну, а то, что вместо набора команд strreplace() можно было написать одну команду strRem(), так это дело вкуса
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
27.11.2013, 11:22 | #5 |
Участник
|
Цитата:
maskPhone = strreplace(eFiscalDocument.recipientPhone(), "(", ""); maskPhone = strreplace(eFiscalDocument.recipientPhone(), ")", ""); maskPhone = strreplace(eFiscalDocument.recipientPhone(), " ", ""); Вроде как первые три строчки можно смело убрать и это ни как не скажется на конечный результат |
|
27.11.2013, 11:15 | #6 |
----------------
|
Владимир, а разве не смешно, что они каждый раз берут исходную строку eFiscalDocument.recipientPhone() вместо результата предыдущей обработки?
То есть выполнится только удаление пробелов. copy-paste рулит |
|
|
За это сообщение автора поблагодарили: Владимир Максимов (2). |
27.11.2013, 18:17 | #7 |
Участник
|
Не видя реализации recepientPhone() и декларации maskPhone нельзя сказать это наверняка
|
|
|
За это сообщение автора поблагодарили: ivas (1). |
27.11.2013, 21:17 | #8 |
Banned
|
Цитата:
Я бы кстати и не удивился. Может какой буддист написал. Мир он ведь такой большой и разный. Похоже что просто недописанный код. |
|
27.11.2013, 12:45 | #9 |
Участник
|
А если бы автор сего чуда удалял бы символы функцией strrem, то её не пришлось бы вызывать четыре раза и не случился бы тогда такой epic fail.
X++: maskPhone = strrem(eFiscalDocument.recipientPhone(), "-() "); |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
27.11.2013, 17:38 | #10 |
Banned
|
Если бы я делал ревью то к такому коду бы даже бы и не придирался.
Код понятный и по делу. Может захотелось в дебаггере видеть в целях тестирования каждую операцию. То есть как бы стиль больше а не нонсенс. А плакать мне хочется так часто над кодом что у меня уже атрофировалось чувство прекрасного. Счастливые вы А по мне уже лишь бы работало правильно а то все больше новых программистов даже не знают о существовании Best Practices и колбасят как им вздумается а потом стабильно раз в неделю клиент просит фиксить данные на живой базе потому как транзакционная логика через одно место. Накипело Сижу вот и думаю охватывает ли моя страховка такие беды если вдруг что |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
27.11.2013, 18:26 | #11 |
Участник
|
Вопрос, значит, стоит в том, насколько глубоко программисты знают все существующие функции(ну или BP, кому как угодно). Напомнило, как учитель физики в академии рассказал пример, как один профессор известного университета набирал к себе консультантов. После долгой фильтрации кандидаты были найдены, и всем им сообщалось, что на последнем тестировании(собеседовании) будет задан один не сложный вопрос. Кто будет выше всех окажется на рабочем месте. Естественно, все готовились к какому-то подвоху, изучали дополнительные книги, работы профессора, некоторые, даже его биографию. А Вопрос был такой : Сколько вы знаете констант? Естественно, тот кандидат, который назвал их наибольшее количество, с наибольшей правильной точностью, победил. Объяснял он это тем : Я не хочу тратить мое время на время, пока мой консультант будет ползать за этой информацией в справочник.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 27.11.2013 в 18:39. |
|
27.11.2013, 21:08 | #12 |
Banned
|
Цитата:
До сих пор вспоминаю как в одной шотландской компании с секундомером консультанты меня тестировали/интервьюировали с выводом на большой экран моего монитора. Претензия была в том почему я по памяти весь код не печатаю а зачем куда то лезу ищу готовый код. Типа не знаю как кодить. А я даже и не знал что неправильно делаю, хорошо что знающие люди подсказали Ну неправильно AX как печатную машинку использовать. Просто в корне неверно. Тише едешь - дольше думаешь. А думать во все стороны одновременно крайне полезно в AX. Оттого часто и код не самый лучший так как мало кто не из русских программистов страдает перфекционизмом и главное просто код побыстрее заколбасить и забыть Причем 90% даже не поймет что не так в коде если код работает. Раз работает то и все, зачем париться и занудствовать - красивое письмо менеджеру гораздо важнее кода который никто кроме твоего брата программиста не увидит, а тот просто покривится, поморщится но ничего не скажет потому как безполезно. "Классный программист" тот кто лучше "программирует" то есть тот от кого меньше слышно жалоб и проблем и который делает много и во время. Качество кода и дизайн решений не играет роли. Некому и некогда оценивать. |
|
|
За это сообщение автора поблагодарили: ta_and (1). |
28.11.2013, 08:50 | #13 |
Участник
|
Цитата:
Тогда автор - злой гений, очень злой |
|
28.11.2013, 09:34 | #14 |
Участник
|
Я думаю, каждый из нас встречает такой быдолкод.
Не могу не поделиться. X++: void MaterialProcess(afcProdmaterial _Material, int lineNo) { RouteJobType _JType; boolean ppoOkToProcess = true; ; materialProcessError = false; if (_Material.JobType == 'Setup') _JType = str2enum(RouteJobType::Setup,_Material.JobType); else _JType = str2enum(RouteJobType::Process,_Material.JobType); try { ttsbegin; lineNo += 1; _progress.setCount(lineNo); _progress.setText(_material.RefNoID); _JobId = this.GetJobNum(_Material.RefNoID,_JType, _Material.OprNum,RouteOprPriority::Primary, _Material.ItemId); if (_Material.LotNum != '') _Batch = this.CheckBatchId(_Material.LotNum, _Material.ItemId,_Material); if (_material.TranType == 'OFF-FIN' && _material.SerialNum && _material.PQty > 0) { if (!ppoProdMatlTrace::findSerialNum(_material.SerialNum).Ply) { ppoOkToProcess = false; } } if (ppoOkToProcess) { if(this.PostMaterial(_Material)) { _Material.inventDimId = _dimId; _Material.ProcessedFlag = NoYes::Yes; _Material.update(); } else { throw(error("Update cancelled.")); } } ttscommit; } //try catch (Exception::Deadlock) { // ttsabort; retry; // _material.HasError = noYes::Yes; // _material.update(); } catch (Exception::Warning) { ttsabort; // retry; _material.HasError = noYes::Yes; _material.update(); } catch (Exception::Error) { ttsabort; //retry; _material.HasError = noYes::Yes; _material.update(); } }
__________________
// no comments |
|
28.11.2013, 16:01 | #15 |
Banned
|
Цитата:
Сообщение от dech
Я думаю, каждый из нас встречает такой быдолкод.
Не могу не поделиться. Начиная с элементарной разметки кода и неверного использования нижнего подчеркивания в обоих декларациях (как параметров, так и локальных переменных), заканчивая странным сравнением со строками, +=1 и ненужными if-ами. Зато код работает!!!))) Во первых это может быть кривой костыль для кривого стола - выпрямите все со стола полетит. Во вторых, кто последний трогал - тот и виноват Я дошел до того что делаю переключатели чтобы при тестировании можно было перейти на предыдущую версию кода так как очень часто старый код даже не тестировали толком и все чужие баги могут стать твоими. |
|
28.11.2013, 18:51 | #16 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Не нужно знать наизусть сигнатуры всех функций, чтобы быть успешным программистом, так же как и не нужно знать значения всех констант чтобы считаться хорошим физиком. Нужно знать о существовании и назначении
Тогда автор - злой гений, очень злой
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
28.11.2013, 20:23 | #17 |
Banned
|
Цитата:
Представьте, чтобы вы делали не будь у вас интернета, msdn и т.д.?
Представил, мой ответ - не программировал бы так как музыку с youtube слушать бы не мог |
|
|
За это сообщение автора поблагодарили: Pustik (2). |
29.11.2013, 00:51 | #18 |
Участник
|
Не хотел писать, но раз уж эта тема нашла столько откликов...
Понятно, что у нас у всех свое представление о правильном коде и его красоте, своя методика создания это самого кода, свой взгляд на оправданность применения copy-paste (а именно он скорей всего тут и использовался). Но я один не понимаю, как можно было это пропустить на первичном тестирование, неужели самому автору не интересно было проверить это в работе, не понимаю... |
|
29.11.2013, 08:56 | #19 |
Участник
|
Раньше в России практически нигде не было интернета, лишь единицы, обладающие модемом на скорости 33.6К что-то могли себе позволить. Именно поэтому все MSDN и прочие мануалы шли в комплекте с дистрибутивом. Это сейчас коварный микрософт отходит от старых традиций и увеличивает посещаемость своих страниц.
__________________
// no comments |
|
29.11.2013, 11:53 | #20 |
Участник
|
Тема вызвала бурное обсуждение и развитие :O)
Для сомневающихся скажу, что это не партнерское решение (их нет в нашем варианте системы, используется стандарт), это код именно MS. Код не работает, его нашли именно по тому, что он давал ошибку, повторение скобочек и '-' в номере телефона. А вот, если их нет в исходной строке, то все хорошо. С уважением, Дмитрий |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|