1. C# / Говнокод #13168

    +126

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };
    
        // This method finds the day or returns -1
        private int GetDay(string testDay)
        {
            int i = 0;
            foreach (string day in days)
            {
                if (day == testDay)
                {
                    return i;
                }
                i++;
            }
            return -1;
        }

    http://msdn.microsoft.com/en-us/library/2549tw02%28v=vs.80%29.aspx
    Я, мягко говоря, прифигел с этого. Одно дело, если бы это была какая-нибудь лаба, но это, блиать, целый велосипед вместо одного единственного Array.IndexOf, да ещё и в таком общедоступном месте...

    Запостил: RaZeR, 13 Июня 2013

    Комментарии (49) RSS

    • Не очень кошерные сокращения какие-то.
      Ответить
    • string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };

      private int GetDay(string testDay)
      {
      int i;
      for (i=days.Length-1;i>-1;i--)
      if(days[i] == testDay) break;
      return i;
      }

      Так покрасивше (Я имею в виду если Array.IndexOf не юзать)
      Ответить
    • А set запилить?
      Ответить
      • А может еще словарь хешированый?

        Тут не понятно, что лучше - контекста нет. Может массив строк - самое то в данном контексте.
        Ответить
        • а ссылочка там для кого?
          Люди учат работать с индексами, какой там цикл используется вообще не важно.
          Да и к тому-же в цикле for переменные можно сразу определять:
          for (int i=days.Length-1;i>-1;i--)
          Ответить
          • Сорри, ссылку не заметил. В контексте обучающего примера - никакого быдлокода - все чинно.
            Ответить
            • Ну так именно в этом контексте "обучают" чему-то другому. А такой пример может только быдлокодерству и научить. В статье же речь идет не про то, как реализовать поиск в неупорядоченом массиве, а про то, как перегрузить оператор доступа по индексу.

              ЗЫ. Понимаю, что это не преступление, но когда ставят лишние скобки после return - мне мерзко становится.
              Ответить
              • А где тут скобки после return?
                Ответить
                • Они в коде по ссылке.
                  Ответить
                • string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };

                  // This method finds the day or returns -1
                  private int GetDay(string testDay)
                  {
                  int i = 0;
                  foreach (string day in days)
                  {
                  if (day == testDay)
                  { //вот одна
                  return i;
                  } // вот вторая
                  i++;
                  }
                  return -1;
                  }
                  Ответить
                  • Нене, я так понимаю он имеет в виду return (-1).

                    А эти { скобки } это тема другого холивара - ставить ли фигурные скобки вокруг примитивных операций или нет.
                    Ответить
                  • // The get accessor returns an integer for a given string
                    public int this[string day]
                    {
                        get
                        {
                            return (GetDay(day));
                        }
                    }

                    Там в примере есть вот такой геттер. Это я его имел в виду.
                    Ответить
              • Не думаю, адекватные люди учатся программировать через MSDN - это справочник, а не учебник. А мозги нужно не на уровне языка вправлять, а в целом.
                Ответить
                • Адекватные люди учатся имея любую возможность.
                  Смысл в том, что код в документации, если и не совсем говно, то совсем не на уровне ожидаемом от серьезного источника.
                  Большинство кода, которого я видел в своей жизни написано неадекватными людьми, которые хорошо если бы в MSDN заглядывали, обычно они бы предпочли партию в спайдер солитер вместо.
                  Я сейчас занимаюсь тем, что поддерживаю игрушки написаные для СмартТВ ведущих производителей мира (на полном серьезе, всякие Тошибы с Панасониками и т.п.) Говном их код тяжело назвать, т.как он все-таки работает, и восновном работает правильно, но он весь написан в таком же стиле: никакой модульности, никаких обобщений, все примитивные операции типа поиска в массиве, заполнение массивов, добавление и т.д. написаны каждый раз по-новой для каждого конкретного случая. Не далее чем вчера попалась функция с 50+ локальных переменных.
                  Но самое обидное в этом то, что индустрия специально подстраивается под самого худшего программиста, чтобы и он, при необходимости мог что-то сделать с кодом. При этом время и усилия потраченные на поддержку не имеют равного значения. А худшие программисты пишут именно так: цикл вместо IndexOf.
                  Ответить
                  • Индустрия действительно подстраивается под нежелание работать головой. Это же был бы клондайк, если бы можно было купить тулзу, приставить к ней чайника и неизменно получать счастье и прибыль!
                    Ответить
                  • Если бы индустрия затачивалась под специалистов высокого уровня - был бы высокий порог вхождения, и быдлокодеров было бы меньше, а ведь они тоже нужны. Человек с правильно поставленным мозгом программиста в этом примере увидит как описать логику получения элемента по индексу в собственных коллекциях (скорее просто синтаксис посмотрит) и все. Хуже он кодить не начнет. Вообще Msdn - это просто справочник синтаксиса для программиста любого уровня. Поэтому и относиться к нему нужно соответственно. Называть MSDN авторитетным обучающим ресурсом для программистов - все равно что назвать Википедию авторитетным источником
                    Ответить
                    • Википедия - вполне себе авторитетный источник. Точно в таком же смысле, как и перепечатка любого научного издания будет таким источником. На сколько ее можно цитировать в научных трудах - наверное, все-таки зависит от материала и спорности утверждений, но нормальный человек вполне бы разрешил цитировать Вики в тех местах, где дается просто ознакомительная информация. Особенно если речь идет о студентах и необходимости читать книги, которые может быть тяжело найти / очень дорогие и т.д.

                      С MSDN все гораздо хуже - это официальная докуметация разработчика (в отличие от Вики, которая не официальная). И к ней, соответственно, предьявляются другие требования, к достоверности материалов, к тому как правильно писать код и т.п. С точки зрения нанимателя вполне резонно требовать от исполнителя соответствия официальной документации.
                      Более того, если уж сильно припечет, то несоответствие официальной документации можно будет показать в суде в случае исков со стороны нанимателя к исполнителю, если первому нужно будет показать несостояетельность / умышленное вредительство последнего.
                      Ответить
                      • msdn — официальная документация? Вы, прежде чем это утверждать, хотя бы посмотрели бы хоть, как аббревиатура расшифровывается.
                        Написать статейку на мсдн и редактировать ее может любой желающий, ага ага.
                        Это такое же сообщество как и вики, но только от конкретной организации, а вики —некоммерческое.
                        Ответить
                        • И что что там есть форум? Документацию публикует Микрософт, о чем откровенно же заявляет лицензия, которая к документации прилагается. И это относится к любой официальной документации, не только микрософтовской. Когда будут искать крайнего - это будет весомым аргументом.
                          Ответить
                          • Извините меня, но это чушь полная.
                            MSDN содержит лишь примеры. Просто примеры кода. Просто статьи от людей.
                            Это не законы, которые требуется люто соблюдать.
                            Ответить
                            • Слово, которого вам не хватает: "так же". MSDN так же содержит и всю остальную начинку. А слово, точно так же, как Java, например, может иметь много значений. Java - это и платформа, и название конкретной программы, и название языка. MSDN - это и документация, и форум, и хз. что еще.
                              Ответить
                              • > Java - это и платформа, и название конкретной программы, и название языка.
                                И название чая и кофе ;)
                                Ответить
                            • Возможно, это вам что-то объяснит:
                              Предположим, вы написали бухгалтерскую программу, которая начисляет зарплату в конце месяца. Предположим, вы не разобрались с датами, и начислили зарплату на месяц раньше, чем нужно. Компания использующая вашу программу идет к страховой компании и говорит: "Беда, активов совсем не осталось!". Страховая компания говорит: если это был несчастный случай: мы вам сейчас выдадим полную суму, а если это была халатность, то мы вам дадим 20% от потерь.
                              После чего, страховая компания начинает землю рыть, чтобы доказать, что авария была причиной халатности. И тут появляетесь вы и говорите: "А я все сделал согласно официальной документации - вот полюбуйтесь". После чего страховая компания говорит: "Иванов И. И. в следующий раз читайте документацию внимательнее". И компании компенсируют 20% от потерь. Вы получаете строгий выговор, или административное взыскание, и в следующее сокращение штата собираете пожитки в картонную коробку.
                              Ответить
                              • Не корректный пример. На лицо то, что спец. не разобрался в документации. Согласитесь, там нет таких ошибочных примеров кода, есть только не очень красиво написанный.
                                Ответить
                                • Каким образом некорректный? Я вам еще раз пытаюсь донести смысл разницы между Википедией и официальной документацией производителя. Если бы вы прочитали в Википедии, что улицу можно переходить на красный свет, то от штрафа это бы вас не спасло (другое дело, если бы это было в каком-нибудь гражданском кодексе).
                                  Но если вы прочитали в Майкрософтовской документации, что 2 + 2 = 5, и написали бы программу, которая предполагает, что так работает Майкрософтовская математика - то может быть кто-то бы покрутил пальцем у виска, но взыскать с вас нечего было бы, т.как вы формально свою задачу выполнили правильно.
                                  Ответить
                                  • Я понял, что вы хотели сказать. Только вот вы меня не поняли. MSDN - это сообщество. Вы прямо таки сейчас можете пойти и изменить тот код, который вам не нравится. Точнее предложить изменения, а если партнер майкрософта, то и изменить.
                                    Плюс вы говорите о явном расхождении смысла написанного в документации и того, что есть на в самом деле. На MSDN'e такого нет. Там есть только немного не красивый код. Его можно отрефакторить, но смысла он не поменяет.
                                    Вы просто не любите майкрософт и все, пытаясь убедить всех в том, что такой код нанесет компании убытки и повлияет на карьеру программиста. Знаете что? Слепо документацию использовать нельзя. Вот.
                                    Ответить
                                    • Я вообще ничего не говорил о личных чувствах, которые я испытываю к Майкрософту. Я говорю, что код в примере - плохой. И что автроство этого примера принадлежит Майкрософту (следуя MLPL), и какие бы механизмы не использовались для написания этого кода - автор от этого не изменится.
                                      Я несколько лет модерировал аналогичную систему - Adobe Community Help, раздел посвященный Флексу, и у меня есть определенное представление о том, что из себя представляет этот документ и для чего его можно использовать.
                                      Ответить
                                      • Он не красивый, но с точки зрения задачи правильный. Вы говорите о коде, с точки зрения задачи не правильного. Вы подменяете понятия неверно решенной задачи и некрасивого кода.
                                        Так нельзя.
                                        Ответить
                                        • Где я говорю про неправильный код? Не выдумывайте.
                                          Ответить
                                          • Вот только вот отмазываться не надо, вы сейчас говорите, о коде который неправильно решает задачу, что когда его использует специалист, то он не так выставляет время и т.д. . Вот не надо вам выдумывать.
                                            Код который выше не плохой, он просто другой. Да можно написать проще, но такой код не ошибка. Вы говорили об ошибке в коде, о грубой ошибке. Или я вас не правильно понял? Тогда о чем вы говорили, о том как специалист понимает доки? Это проблемы специалиста, но не доков. В общем предлагаю закончить на этом, потому-что это бессмысленно.
                                            Ответить
                                            • Перечитайте еще раз тот пост. Он говорит о том, что вы не поняли документацию и сами сделали ошибку. Хз. мне русский не родной, так что, если что не понятно, то может быть поэтому, хотя, как по мне, там вроде ничего сложного нет.
                                              Ответить
                                              • И что в этом коде не правильно работает?
                                                Ответить
                                                • Похоже, что не только для меня русский - не родной :) Жалко в русском нет аналога Simple English (хотя, Н. К. Крупская вроде пыталась продвинуть идею, но как-то не прижилось).

                                                  Ошибки в коде нет. В коде есть говностиль. В примере программист допускает ошибку. В примере в документации ошибки нет. В примере программист наказан за лень и невнимательность потому, что страховая компания обнаружила несоответствие между документацией и программой. Если бы ошибка была в документации, то страховая компания не смогла бы обвинить программиста в ошибке.
                                                  Ответить
                                                  • Русский для меня родной, а ваше ёрничество неуместно.

                                                    >>Ошибки в коде нет. В коде есть говностиль.
                                                    Спасибо кеп, я же говорю, что понял это.
                                                    Во вторых не говностиль, а не очень красивый код. Этот код понятен, легко читаем, его можно быстро отрефакторить, если нужно. Этих пунктов уже достаточно что бы не называть его говнокодом, а исполнение — говностлитем.
                                                    А у вас лютовыраженный перфекционизм.
                                                    Ответить
                                                    • Нет, все-таки неиспользование штатных функций библиотеки в документации прилагающейся к этой библиотеке = говностиль. Перфекционизм, это если бы я требовал от этого кода:
                                                      - вменяемых сокращений в названиях дней недели.
                                                      - выход из функции в одной точке.
                                                      - отсутствие лишних элементов (таких как скобки).
                                                      - мемоизации результатов поиска.
                                                      - евристику определяющую манеру поведения кода и в зависимости от того, что происходит чаще: изменение массива, или поиск - сортировку массив, для того, чтобы воспользоваться бинраным поиском.
                                                      - возможно, использовала другую структуру данных, например, хештаблицу.
                                                      - а может быть распараллеливала поиск на несколько процессоров, в каждом по своему сегменту массива.

                                                      Что интересно, по поводу последних пунктов: не факт, что штатная функция ничего из этого не делает, а даже если не делает сейчас - то вполне может быть будет когда-нибудь в идеальном будущем. Т.о. человек поместивший в доку свой велик сделал медвежью услугу тем, кто из доки скопируют. А в конечном итоге - и себе, т.как херово, но по документации написаный код нужно будет потом поддерживать. Изза поддержки херового легаси не будет достаточно ресурсов для перехода на лучшие технологии. Врезультате в далеком, но неизбежном будущем, внуки говноизобретателя поплатятся за это снижением продаж и, впоследствии, полным отказом от технологии :)
                                                      Ответить
                                                      • > мемоизации результатов поиска
                                                        О_о. Нахуя, простите, зачем она здесь?
                                                        Ответить
                                                        • А распараллелить, значит, нормально? :)
                                                          Ответить
                                                      • >- выход из функции в одной точке.
                                                        Расшифруй.
                                                        Ответить
                                                        • > Расшифруй
                                                          Чтобы был один return, согласно заветам секты одновозвратников.
                                                          Ответить
                                                  • > Если бы ошибка была в документации, то страховая компания не смогла бы обвинить программиста в ошибке.
                                                    Так получается выгодно, чтобы вся документация была с ошибкой... Документацию же писала другая фирма, ей ничего не предъявят, а кодившему по бажной документации сплошной профит ;)
                                                    Ответить
                                                    • А кто говорит, что быть адвокатом в сфере компьютерных технологий - не выгодно? ;)
                                                      Ответить
                • Интеоесно другое: автор мсдн говнокодер. Как же так!
                  Ответить
          • > Да и к тому-же в цикле for переменные можно сразу определять
            В данном контексте - нет. У него же там под циклом ретурн.
            Ответить
          • >а ссылочка там для кого?
            Для тех кому нех делать ее копировать?
            Ответить
    • vanished
      Ответить

    Добавить комментарий