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

    +122

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    if (0 == comparer.Compare(s, hash)) 
    { 
        return true; 
    } 
    else 
    { 
        return false; 
    }

    MSDN. Не то чтобы ГК, но как-то странно.

    Запостил: andrewpey, 11 Декабря 2010

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

    • Одна строчка растянулась на 8.
      Зато автор кода получит в 8 раз больше зёрнышек риса.
      Ответить
      • я слышал что у мукрософтовских программеров есть нормативы производительности, измеряемые в количестве строк кода которые они должны написать.

        поэтому меня такой код из MSDN не удивляет.
        Ответить
        • А стихотворения в коментах писать можно, или это не считается?
          Ответить
        • Насколько я слышал, это было распространено в индии.
          Поэтому вопрос в том, кого МС на работу берет)
          P.S. вы же знаете кто Dos написал?)
          Ответить
          • нет. я это читал в контексте как гавняно работать в Редмонде (штабквартира МС) и что народ тесты пишет только для того, что бы догнать количество кода до нужного количества. со всеми вытекающими.
            Ответить
          • IBM?
            Ответить
            • Вообще странно, на вики я этой информации не нашел, но, помнится была у меня когда-то энциклопедия "Аванта+", и в томе про информатику было написано что билл купил её у какого-то индуса за символическую константную сумму, "за счет чего и разбогател"
              Ответить
              • про награду для индуса это байка о шахматах и экспоненте
                и завязывай путать вики и педивикию
                Ответить
                • Если ты под вики понимаешь чтото что не WikiMedia то лучше поясни=)
                  Ответить
                • Не у индуса Билл купил ДОС, а у каких-то двух чувачков.
                  потом чуть его изменил и стал продавать.
                  и заработал бабок гораздо больше чем эти два чувачка.
                  Ответить
    • пруфлинк в студию.
      Ответить
      • гугл же!
        http://j.mp/i8GMwL
        Ответить
        • Ну так учебный пример, чего от него хотеть.
          Ответить
        • хех, мои поиски показали, насколько широко это раскопипащено

          может MS планирует убрать логический тип из вижуал-бейсика-с-фигурными-скобками?
          Ответить
          • Простите, на основе чего сделано сие саркастичное предположение?
            Ответить
            • британские ученые обнаружили, что подавляющее большинство пользователей C# всё равно не понимает концепцию булева типа.
              Ответить
    • Кстати, объясните, пожалуйста, почему
      0 == comparer.Compare(s, hash)
      , а не
      comparer.Compare(s, hash) == 0
      ?
      Ответить
      • это заговор паттерн от опечатки в операторе сравнения
        Ответить
        • Учитывая, что в C# подобную ошибку так просто не сделаешь...
          Ответить
          • Ох уж эти суровые мсдн-писцы.
            Ответить
          • Не дают сделать присваивание в if'е, или почему ?
            Ответить
            • Давненько не держал в руках партитуры, но вроде так. По крайней мере результат должен быть булевским, а это отсекает 99% ошибок.
              Ответить
              • По-моему, там в целом с неявным приведением типа беда. А может и нет вовсе. И если написать присваивание, то должно быть что-то вроде:
                if( (bool)(comparer.Compare(s, hash) = 0) )
                Поправьте, если не прав.
                Ответить
                • А как вы, простите, выполните присваивание в rvalue?
                  Ответить
                  • Ну, данный пример может быть и не совсем удачен, однако если функция возвращает ссылку, то присвоение вполне возможно.
                    P.S. Говорю с точки зрения С++, поэтому не пинайте, если в шарпе такое не получится :)
                    P.P.S. Часто в if'ах встречаются просто переменные, поэтому и родился подход, при котором константу пишут сначала.
                    Ответить
                    • Данный подход родился из-за того, что C++ любит неявные приведения к bool для всех базовых типов.
                      Ответить
                      • Приведение вытекло из чистого си. Но речь не об этом, а о том, чтоб присваивание не путалось со сравнением. Поэтому и пишут константу в начале.
                        Ответить
                        • Приличные компиляторы предупреждают об ошибках такого рода. А приличные программисты на эти ошибки обращают внимание.
                          Ответить
                          • Вот когда не предупреждали, тогда и родилось это правило. А привычки, как известно, уходят с трудом.
                            Ответить
                        • Присваивание не может путаться со сравнением, потому что реализуется двумя разными операторами.
                          Ответить
                          • Вам знакомо слово "опечатка" ?
                            Ответить
                            • Вам знакомо слово "предупреждение компилятора"?
                              Ответить
                              • >Вам знакомо слово "предупреждение компилятора"?
                                Нет. Потому что это 2 слова.
                                А вообще, см.выше http://govnokod.ru/4898#comment57024
                                Ответить
                      • да даже не в приведении дело, а в записи присваивания.
                        if(b=true) сработает даже в java, где булевский тип стоит очень отдельно, а тот же if(true=b) вывалится с ошибкой компиляции.

                        современные IDE, как правило, выдают ворнинг на такой конструкции.
                        Ответить
                        • за if(b == true) нужно убивать. if(b) if(b == true), if(b!= false) - это все boolshit
                          Ответить
                          • Но куча народа до сих пор этого не понимает. Где-то уже была реплика: «Кэп некоторым не сказал».
                            Ответить
                          • а чем if(b) то провинился?
                            Ответить
                            • Комментарии на говнокоде не компилируются, а потому встречаются синтаксические ошибки. Здесь, после if(b) пропала точка.
                              Ответить
                              • Хотите, чтобы здесь комментарии компилировались и исполнялись? Сон разума рождает чудовища!
                                Ответить
                                • говнокод же, здешний код исполнять нежелательно, поэтому никуда не деться, приходится исполнять комментарии
                                  Ответить
                                  • Я как-то на одном форуме запостил кусок программы, и вся часть комента, стоявшая после знака "меньше" (<), пропала. ПО форума приняло этот символ за открыте тега, а меня за хакера.
                                    Ответить
                                  • Особенно cli и hlt.
                                    Ответить
                • Это не там беда, это в C беда.
                  Ответить
        • А всё из-за того, что Ритчи в своё время долбанулся для присваивания брать символ сравнения, а для сравнения... два символа сравнения. И эта хрень из С пошла в почти все другие языки.
          Вирт выпендриваться не стал, взял для присваивания и сравнения симвлы из математики.
          Ответить
          • А как же Бейсик, где для присваивания символ сравнения и для сравнения символ сравнения? Ах да, в стандартном Бейсике для сравнения нужно было писать волшебное слово пожалуйста LET.
            Ответить
            • Наоборот.

              Не хотелось выступать Капитаном, но ведь это могут прочесть дети.
              Ответить
              • Детей... детей жалко! Разумеется, LET для присвоения. Вот что значит писать комментарии ночью.
                Ответить
          • Ему только оставалось взять символы ≠, ≤, ≥ и не выпендриваться.
            А в PHP для полного счастья нужно заменить === на ≡.
            Ответить
            • собственно, проблема в маленьком англосаксонском мозге, благодаря которому вычислительная техника в течении 45(!) лет была заперта в рамки us-ascii

              PHP надо заменить
              Ответить
              • Идея для Луркоморья:
                x≲½ — чуть менее, чем наполовину;
                x≳½ — чуть более, чем наполовину;
                |x|≲0 — чуть менее, чем ничего;
                x≳∞ — чуть более, чем полностью.
                Ответить
                • Нет, тогда уж или
                  x≲∞/2 — чуть менее, чем наполовину;
                  Или
                  x≳1 — чуть более, чем полностью.

                  А то у тебя в одном месте отсчёт от 1, в другом от ∞
                  Ответить
                  • Точно! Не определился с размером пространства, когда писал.
                    Ответить
            • В препринтах отечественных институтов алгоритмы нередко писали на Алголе, но на каком-то специфическом, в котором были ≠, ≤, ≥ и прочие математические символы.

              Был язык APL с кучей псевдографических символов. Страшно представить себе клавиатуру для него.

              А ещё при компиляции псевдокода web нашего любимого Дональда Кнута генерируется паскалевский файл и теховский. В теховском просто кишит математическими символами.

              Так что попытки «математизации» языков были. Но PHP с матаном — жесть.
              Ответить
            • Ну он не мог заставить поменять стандартную таблицу символов. А вообще != выглядит похожее на "не равно", чем <>. Тут Вирт не угадал.
              Ответить
              • нуу, у вирта даже есть синтаксические костыли для []{} ❢
                Ответить
                • Ага. А в Си есть триграфы. Только костыли Вирта я помню наизусть (они полезны, когда нужны вложенные коментарии), а триграфов вспомнить не могу...
                  Ответить
                • ❢- что это?
                  Ответить
                  • а поцчиму ви спгашиваете؟¿
                    Ответить
                    • потому что не знаю.
                      да и как его с клавиатуры вводить? особенно когда Паскаль придумывался.
                      Ответить
                      • нее, ❢ относится не к паскальным диграфам, а к оператору НЕ-РАВНО
                        Ответить
                        • Не знал. А на какой технике такой знак был и как его вводили?

                          На всякий случай: я имел в виду диграфы(. .) (* *)
                          На советских компах символ $ выглядел как ¤ (код тот же, шрифт просто другой).
                          (*¤I что-нибудь *) выглядело намного круче, чем {$I что-нибудь }
                          Прямо смайлики.
                          Ответить
                          • Да это просто был другой восклицательный знак, не более того, на тему коммента о том, что != лучше чем <>
                            Прошу считать меня дубовицкой❢
                            Ответить
                            • Какой же я слоупок❢
                              Если бы не комментарии Oleg_quadro, то моего вопроса тоже бы не было... Почаще надо употреблять юникодовские символы, тогда флуда будет больше❢
                              Ответить
              • Так и получается, что весь холивор из условностей.

                P.S. =/= гораздо более похоже на неравно, хотя это и совсем адово.
                Ответить
                • Не совсем, в Аде неравенство пишется, как /=.
                  Кстати, в этой супернадёжной и супербезопасной Аде тоже можно вызывать функцию без параметров без пустых скобочек?! Как это пропустили?!
                  Ответить
          • вот где паскаль таки выиграл: у него присваивание с двоеточием. И не надо ничего удваивать. Хотя, сейчас бы это было вырвиглазно непривычно
            Ответить
    • Зачем винить в этом MSDN???те люди которые пишу мануалы они пытаются описать так, чтобы было понятно и ясно с первого чтения. Если уже трогать MSDN то там полно всего гавнокода
      Ответить
      • тоесть что такое булен -- не ясно с первого чтения?
        это msdn или пхпнет?
        Ответить
    • [offpost]
      А куда у нас GET 2000 потерялся ?...
      [/offpost]
      Ответить
    • В принципе да, я признаю, НО примеры из MSDN не всегда следует использоваться с реальных приложениях.
      АВТОР скинь ссылку на это чудо
      Ответить
      • mr.The 3 дня назад
        гугл же!
        http://j.mp/i8GMwL
        Ответить
      • > не всегда следует использоваться с реальных приложениях
        алсо, загугли, увидишь как широко это раскопировали
        Ответить
        • http://www.youtube.com/watch?v=6aNDpVOWJjo
          Ответить
          • у вас лурчанка :-Р
            Ответить
            • люто, бешено толстый винрарнейший форсед мем, полный ФГМ, ЧСВ и МПХ чуть более, чем наполовину, ололо.
              Ответить
            • Кстати, о лурчанке: http://pix.am/gallery/add/file/
              Смотрите слева над кнопкой «Upload a file».
              Ответить
            • Lure-chan ка? :D
              Ответить
        • > увидишь как широко это раскопировали
          миллионы мух не могут ошибаться ?
          Ответить

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