Кто-нибудь юзает MAC?
напомнило мне как я попал из-за некоторых обстоятельств в уже умирающий мир Novell NetWare
Ага, примерно то же самое. нетварь, ipx/spx, красота.
Нашел у себя книгу по FreeBSD за 1999 год и 4 диска, фряха 4.2!
У меня где-то SuSE 4.что-то там валяется. Куча дисков, 6 что ли. А недавно в кладовке нашел Linux Network Administrator's Guide, 99 или 98 года книжка. И Secrets of Win32 API :) Поставил обе на полку. Чтобы на видеоконференции видно было. Выкинуть же жалко.
регулярно на месяц уходят на больничный
Пфф, даже у меня в договоре стоит, что я могу рассчитывать на 6 оплачиваемых больничных недель в году. Шесть!
6 недель отпуска, 6 недель больничных, примерно 11 дней праздников, приходящихся на рабочий день. Это 71 рабочий день. И 104 дня выходных. Итого 175 дней из 365 - нерабочих. Почти половина.
напомнило мне как я попал из-за некоторых обстоятельств в уже умирающий мир Novell NetWareАга, примерно то же самое. нетварь, ipx/spx, красота.
Нашел у себя книгу по FreeBSD за 1999 год и 4 диска, фряха 4.2!У меня где-то SuSE 4.что-то там валяется. Куча дисков, 6 что ли. А недавно в кладовке нашел Linux Network Administrator's Guide, 99 или 98 года книжка. И Secrets of Win32 API :) Поставил обе на полку. Чтобы на видеоконференции видно было. Выкинуть же жалко.
"Диски" это такие блестящие пластиковые кружочки, которые древние люди использовали для обмена информацией? А куда вы их вставляете? У меня уже даже УСБ стики вымирают.
Ага, примерно то же самое. нетварь, ipx/spx, красота.
к тому времени IPX уже никто не швырялся :) TCP/IP всех победил. Помню как Novell стала загибаться и последние конвульсии. Зато парти после 8 вечера на CeBIT были вполне нормальные
USB-Stick ??? у меня на мэке даже разьема такого лет уже 5 нет кажется
Значит у тебя какой-то китайский мак :) USB разъемы есть даже не самых актуальных маках: https://www.apple.com/de/mac/compare/
Тогда if-else достаточно. Тем более, что проверяется булева переменная, у которой всего два варианта может быть.
Я ещё функцию в несколько строк заменил на однострочную
было
bool result = true;
if ((myObject != null) && myObject.BooleanProperty)
{
result = false;
}
return result;
стало
!myObject?.BooleanProperty ?? true;
Или можно было так, без оператора ?? (подошло бы даже для самых ранних версий фреймворка - с использованием оператора ? :)
myObject != null ? !myObject.BooleanProperty : true;
Но тут можно объяснить, что код писали во времена дотнета 2.0, потом проапгрейдили кое-как до 4.х, но сам код не трогали.
Причём мой вариант хоть и короткий, но типа более запутанным выглядит. На самом деле и начальный вариант тоже запутанный. Если так охота явно раскрывать все ветвления, то в условиях if не должно быть сложных конструкций - должно проверяться ровно одно условие, а все остальные - уходить на другие (вложенные) проверки.
Если бы даже я писал первый вариант - и то сделал бы проще, типа такого
if ((myObject != null) && myObject.BooleanProperty)
{
return false;
}
else return true;
Но опять же, писали либо гении, либо какие-то замороченные паТТерналисты. Или просто чел фигачил первый попавшийся вариант из головы. Говнокода в этом проекте много - каждая небольшая бизнес-логика расписана на сотни строк - поэтому фигачить надо было в темпе. Сейчас переписываем и буквально выкидываем код тысячами строк - столько там пипец лишнего понаписано. Челы там для самых первых версий ASP.NET (без MVC ещё) написали свой набор веб-контролов, привязки им там придумали, свою ORM, подходящую для нескольких БД, но кривую, косую и очень ограниченную, работающую хитровыепанным способом, заточенную на САМУЮ ПЕРВУЮ версию Hibernate (т.е. своя ORM над кривой первой версией чужой ORM). Маршаллинг-куяршаллинг, динамическое удалённое (на сервере) создание типов (не просто объектов, а типов) по XML-описаниям на клиенте. Формат описаний и прочее - самописное. Т.к. изначальный фреймворк (ASP.NET) - stateless, то внедрена самописная statefull-обёртка для сохранения состояний. Всё крутится типа на сервере приложений, где вращаются созданные бизнес-объекты, а клиентам передаются их "слепки". Что-то типа современных сетевых игр, где игровая ситуация полностью моделируется на сервере и потом клиентам передаётся ограниченный набор данных для отрисовки изображения. Всё это овно тупо не заводится на современном фреймворке, а надо переписать не на дотнет фреймворк, а на новый "просто дотнет", из которого выкинули кучу старых библиотек, и теперь старый код надо либо полностью переписать, либо отказаться от него. Вот от напичканного самописными костылями и чрезмерными усложнениями сервера приложений отказались.
И зачем-то в этом проекте логируется практически каждая более-менее значительная операция. Типа запросил объект из БД - залогировал, что запрошен такой-то айди и кучка дополнительных данных. Ошибка при запросе? - Залогировал. Успешный запрос? - Залогировал. Короче, юзер кнопку нажал - в логи штук 10 строк ушло. А юзер жмёт эти кнопки по 20 раз в минуту. Т.е. в минуту с одного юзера килбайты логов. Это если ошибок нет. Если есть - в разы больше. И таких юзеров на предприятии - сотни и тысячи. Представьте, сколько нужно хранить логов за годы работы такой системы? Жётские диски, наверное, грузовиками завозят.
Я бы предположил, что этот код появился в таком виде не сразу, а через несколько итераций.
В coding standards записано, что в функции должен быть один выход (одни return). Из-за этого появилась переменная result.
Первая итерация, возможно, была такая:
bool result = true; if (myObject.BooleanProperty) { какие-то действия result = false; } return result;
Потом было словлено исключение и код изменился на
bool result = true; if ((myObject != null) && myObject.BooleanProperty) { какие-то действия result = false; } return result;
А потом действие убрали и код стал таким, как ты его сюда запостил.
Такое часто случается, когда делаются минимальные изменения и не делается рефакторинг.
Или например такой бред, как текстовое поле для ввода чисел. Контролы самописные - т.е. есть полный контроль над их поведением. Ну так сделай контрол для ввода лишь чисел, который будет внутри себя отфильтровывать ввод нечисел, иметь ограничения на максимальнео и минимальное значение и прочие удобства. Нет! Мы сделаем один текстбокс на все случаи жизни, а потом на стороне клиента будем писать 30 строк кода, который будет триммить и пытаться парсить текстовый ввод, затем обрабатывать случаи, когда введено отрицательное или нулевое число, и на каждый кейс будет писать длинный лог и выдавать сообщение об ошибке ввода пользователю в гуй. Вместо, ска, простого HTML тега
<input type="number" max="$Model.Max" min="$Model.Min" step="$Model.Step">
где $Model - синтаксис привязок какого-нибудь клиентского веб-фреймворка. Это и без привязок работало в древнем HTML - т.е. впихивать тупой текстбоксовый input и потом героически с ним тра...ся - чистой воды идиотия. Причём вся портянка проверок, что я выше описал - для каждого ска контрола на каждой форме. Не один раз для скажем "поле для целых чисел", а везде и всюду свою логику в формах писали, которая на 99% дублировалась.
Короче, так этот долбаный проект и раздули в 10 раз - до полусотни проектов в солюшене (термины Вижуал Студио) и миллионов строк кода.
Вот примерно такой же тупой и идиотский, как редактор сообщений на этом самописном и тупом форуме, который ставит неубираемый италик на сообщения и норовит распарсить HTML теги даже в обычном тексте, хотя я его в теги кода не обрамлял.
Такое часто случается, когда делаются минимальные изменения и не делается рефакторинг.
И когда кодинговые стандарты не обновляются по мере развития языка и фреймворков (появляются новые языковые конструкции, операторы, новые проёмы проверки на null и прочее), да ещё изначально являются тупыми и ограничивающими.
А ещё скорее всего - чел не стал думать и заморачиваться, а поправил баг самым тупым и неоптиматльным способом, который первый пришёл ему в голову. А на кодинг старндартс там было изначально насрать.
то сделал бы проще
-----
Угу... Потом тебя бы тыкнули носом в определение функции и их кодинг стандарт... и были бы 100% правы.
Как тыкнут, так исправлю. А пока меняю лапше-говнокод на нормальный. Пока мне ни про какие стандарты у них не говорили.
А что, у кого-то есть стандарты кода, основанные на дотнете 2.0 или пусть даже 4.х, которые игнорят все новые операторы и прочее? И даже если проект переписывается на 6.0, то всё равно все должны отказаться от новых возможностей языка и фреймворка?