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

    +1003

    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
    namespace ExtensionMethods
    {
        public static class MyExtensions
        {
            public static int WordCount(this String str)
            {
                return str.Split(new char[] { ' ', '.', '?' }, 
                                 StringSplitOptions.RemoveEmptyEntries).Length;
            }
        }   
    }
    ....
    string s = "Hello Extension Methods";
    int i = s.WordCount();

    http://msdn.microsoft.com/en-us/library/bb383977.aspx

    In your code you invoke the extension method with instance method syntax. However, the intermediate language (IL) generated by the compiler translates your code into a call on the static method. Therefore, the principle of encapsulation is not really being violated. In fact, extension methods cannot access private variables in the type they are extending.

    Синтаксический сахар. Бессмысленный и беспощадный.
    Ждк, когда шарпоблядки уже начнут дохнуть от диабета.

    Запостил: 3.14159265, 26 Ноября 2011

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

    • Не, ну а чо? Нормально же!
      Ответить
    • Это делает обычный trim.
      В общем-то.
      Ответить
    • Убогая замена implicit conversion из Scala.
      Ответить
      • ява-ёб, уйди
        Ответить
        • он скалаёб.
          Ответить
          • я all-running-on-jvm-ёб.
            Ответить
            • значит, груви, житон, жруби (шо там ишшо бегает на жвм)
              Ответить
            • Врожденная слоупокофилия?
              Ответить
              • И это мне говорит программист на Python?
                Ответить
                • Даже и не знаю что бы такого хитрожопого ответить.
                  Ответить
                • А нет, знаю, вот:
                  http://xrunhprof.wordpress.com/2007/11/18/language-benchmark-java-vs-python/
                  Ответить
                  • Какой-то говнобенч, срсли.
                    Дело даже не в результатах. Вообще эквивалентности никакой.
                    >def readword(st, bufferSize=4096):
                    Ответить
                  • Лажа. У Python буферизованный вывод, а в java использовался небуферизованный. После фикса у меня результаты различаются незначительно:
                    Java:
                    Time to write: 0.978872978
                    
                    Python:
                    Time to write: 0.882999897003

                    С вводом сложнее: в примере в случае python использовалась кастомная функция разбиения на слова. java.util.Scanner работает на регулярных выражениях, т.е. требует гораздо больше вычислений. Переписывать код python на java у меня желания нет.
                    В итоге выяснилось, что автор бенчмарка просто недостаточно компетентен для проведения бенчмарков.
                    Ответить
                    • Автор практически каждого бенчмарка, сравнивающего языки, недостаточно компетентен для проведения бенчмарков.
                      Ответить
                      • Мне кажется разумным подход, принятый здесь:
                        http://shootout.alioth.debian.org/

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

        Или это априорное утверждение, что MSDN полон говна?
        Ответить
    • что характерно, каждый до-диезный пост собирает сотни баттхерта тех, кто ничего другого не осилил
      Ответить
      • А ты как думал.
        http://leotsarev.moikrug.ru/
        Тады ж неудобна буит писать в их любимам linq флует-интерфейс.
        http://stackoverflow.com/users/41956/abatishchev
        Ответить
        • > languages I learn: VB5, VB6, VB.NET
          хех, предсказуемо
          Ответить
          • как же нету Pascal,Delphi? даже это ниасилел?
            Ответить
            • Между прочим, в дельфе под IL partial classes продвигали как killer-фичу. Суровые люди: у меня из-за такого сахара знакомство с новыми библиотеками виджетов проходит как "отрыл доку-припух от количества методов-пошел дальше писать на винапи".
              Ответить
              • так это ж хорошо, когда методов много, главное, чтобы по иерархии распиханы были
                Ответить
                • http://msdn.microsoft.com/ru-ru/library/system.windows.forms.form.aspx
                  Вот, глянь. Методов дохрена, в стандартной документации иерархия игнорируется напрочь. Туда ещё хоть полшишечки лишних сахарных методов - и класс превратится в свалку.
                  Ответить
                  • насколько я вижу, это наследованные методы
                    Ответить
                    • При этом документированы они - вот так, всем скопом, без разбиения на классы в иерархии. К какой абстракции какой метод/свойство относится, отследить сложно уже сейчас.
                      Ответить
                      • кэп подсказывает что такой хелп генерит тулза. и она дублирует описания методов их базового класа в наследники. и то что оно так выглядит - проблема мсдн-а, а не .net-а.
                        Ответить
                        • это проблема быдлокодерского .NET, который в свою очередь является проблемой клиентуры MSDN
                          Ответить
                  • GOD OBJECT
                    Ответить
      • а также тех, кто не осилил додиез :)
        Ответить
    • > Ждк, когда шарпоблядки уже начнут дохнуть от диабета.

      ты еще в функциональные языки загляни. может соратников найдешь - у них тоже такое специальное и своеобразное отношение к синктаксическим подсластителям.

      как по мне ... ну че тут говорить. мой любимый язык Перл и этим все сказано. все что это экономит время, без потери производительности, как по мне чистый плюс.
      Ответить
      • > ты еще в функциональные языки загляни
        На светлую сторону склонять я пытаюсь, но тёмной стороной силы всё пропитано здесь.
        Ответить
        • нет, моисей, ты еще должен водить богоизбранный народ по пустыне 40 лет.
          а диавол уже искушает христа.
          Ответить
        • да, но на темной стороне силы если и хэши, и двусвязные списки, и деревья какие хочешь.

          да и в темноте просто веселее.
          Ответить
          • Dark Hypertext Preprocessor
            Ответить
          • Ты хочешь сказать, что на светлой стороне нет всех этих структур данных? Они все есть и даже больше.
            Ответить
      • > все что это экономит время, без потери производительности, как по мне чистый плюс.
        А все, что без особой надобности усложняет язык и понимание кода. Так что становится неясно - принадлежит ли этот метод классу или это extesion откуда-то из недр проекта.
        Тоже хорошо?
        >чистый плюс.
        Два плюса. В тред приглашается Тарас
        Ответить
        • мужик. открой студию. расширкния видны невооруженным глазом
          Ответить
    • Код говно, микрософт мудак. Плюсую.

      Сам метод нормальный, но подозреваю, что код, использующий этод метод говнище то ещё.

      А если взглянуть на список разделителей слов, то он явно не полный.
      Ответить
      • расслабься, это просто пример синтаксиса и использования
        Ответить
        • А вот школота учится по таким примерам, и потом думает, что это нормально и я вижу такой код в своих проектах. А у меня от этого потом батхерт. И я прихожу, злой на говнокод, на говнокод.ру.
          Ответить
          • Они же не обдумывая порой копипастят в чистом виде примеры такого вида в проект. Как тут можно сдерживать свой батхерт после этого?
            Ответить
    • msdnGovno
      Ответить
      • Говно или нет, но и junior'ы и даже senior'ы туда лазят исправно. И лично мое мнение, что стоит сказать огромное спасибо мелкомягким за то, что такое пособие имеется, и там во многом расписано все очень подробно и понятно, не смотря на встречающиеся там ляпы и банальные примеры.
        Ответить
        • Очень жаль, что многие из тех, кому это необходимо, туда не лазят.
          Ответить
          • А это уже типичная ошибка новичков, которые считают что мануалы и faq это только для неудачников.
            Ответить
            • Новичкам сложно читать MSDN. Даже если они знают Английский.
              Это справочная информация, а новичку полезней гайд читать(книжку) о том, как правильно реализовывать тот или иной сценарий.
              Ответить
              • Думать им тоже вредно. Нужно посмотреть в книжке "300 готовых рецептов на <Somelang-here>".
                Ответить
        • Спорить не стану. Документация у MS всегда была получше, чем у конкурентов.
          Искать говнокод в учебных примерах и на геймдеве - "I am a wimp" сложность.
          Ответить
          • По сабжу: сахар или нет, но дает возможность каждый раз не писать тонны кода создавая обертку.
            Ответить
            • Допустим у нас есть extension-class
              public static class ExtClass
              {
              public static void extFoo(Bar bar,P1 p1,P2 p2)
                  {
                     ....
                 }
              }

              И мы вызываем метод
              bar.extFoo(p1,p2)                 //фича
              ExtClass.extFoo(bar,p1,p2) //нормальный вызов
              
              //кстати в яве есть import static методов и там можно написать так (после импорта метода конечно)
              extFoo(bar,p1,p2)

              Мне неясно в чем профит? О каких тоннах кода речь?
              Ответить
              • >//кстати в яве есть import static методов и там можно написать так (после импорта метода конечно)
                Выглядит приятнее обоих методов, но в этом случае нет автодополнения, специфического для данного интерфейса, и списка методов, которые есть в случае "bar.*".
                Ответить
                • >но в этом случае нет автодополнения ... списка методов, которые есть в случае "bar.*

                  c чего ты взял?
                  import static ...ExtClass.* //импортит тебе все статик методы
                  Ответить
                  • Кстати, по поводу расширений: нашёл недавно интересную либу для уменьшения энтропии Java-кода:
                    http://www.op4j.org/
                    Ответить
                    • Напоминает lambdaJ
                      Ответить
                      • Прикольная либа, только отзывы о ней не очень. Сам уже начал писать что-то похожее, только не для работы с коллекциями, а для хитрого маппинга, типа
                        // trivial example, just for demo
                        ruleSet(
                            greaterOrEqual(0).mapTo("positive"),
                            every(Integer.class).mapTo("negative")
                        ).apply(5); // "positive"
                        . В своём проекте заюзал, хочу как OpenSource либу оформить.
                        Ответить
                        • Мне тоже не особо понравилась, как разобрался. Только одна фича сделанная через cglib заинтересовала.
                          select(sales, having(on(Sale.class).getValue(), greaterThan(50000)))
                          getValue() - каждый раз выдает разные значения из списка.

                          Ну и структура проекта (для общего развития).

                          Как говорит автор: если можете - юзайте Scalу.
                          Ответить
                          • Да, фича с on тоже сразу в глаза бросилась. Давно не видел ничего столь выразительного. Сразу полез в сорцы: смотреть, как сделано.
                            Ответить
                    • > a developer happiness tool
                      где у программера кнопка "счастье"?
                      Ответить
                      • > где у программера кнопка "счастье"?
                        массаж простаты.
                        Ответить
                      • Нащупайте на спине у женщины позвоночник и ведите по нему вниз. Пупок будет по счёту третьей дырочкой.
                        Ответить
                        • непонятно при чем тут плоская шутка про женский пупок, но все же
                          если найти программиста-женщину
                          то можно обрадоваться умению считать лишь до двух
                          начиная и с живота тоже
                          Ответить
              • Я написал не про тонны кода во время вызова, и я, кстати, не сильно понял при чем тут java.
                Кстати о вызовах, представь как будет смотрется какой-то хитрый linq запрос через методы без этого сахара.
                Ответить
                • >при чем тут java
                  Расскажу страшную тайну: Шарп изначально скраден с Жабы, чуть менее чем полностью.

                  >представь как будет смотрется какой-то хитрый linq запрос
                  Вот! Собственно о чем я и говорил позавчера:
                  >http://www.govnokod.ru/8652#comment122393

                  Выходит, что MS добавила в язык extensionы ради всего-то одной новой технологии - LINQ, и частного случая - флуент-интерфейса.
                  Ответить
                  • >Расскажу страшную тайну: Шарп изначально скраден с Жабы, чуть менее чем полностью.
                    И что тут такого? Все у всех все тырят, и жаба тут тоже не исключение.

                    >Выходит, что MS добавила в язык extensionы ради всего-то одной новой технологии - LINQ, и частного случая - флуент-интерфейса.
                    Зато очень полезная и удобная технология. Мне кажется, что оно того стоило.
                    Ответить
                    • А еще они на основе экстеншинов HtmlHelper советуют реализовывать. В ASP.NET MVC
                      Ответить
                • Кстати вспоминил старую фичу VB - оператор With. Тоже сахар, но идея здравая тем, что для компонентов можно было структурировать сетящих св-ва говнокод, а-ля:
                  With Form1
                  	.Width=1000
                  	.Height=200
                  	.Left=(Screen.Width-.Width)/2
                  	.Top = 100
                  	.Caption="Очередная говноформа"
                  	.Autoredraw=true
                  
                  	.foo()
                  	итд...
                  	Form2.Style=.Style
                  End With

                  Так вот безо всяких флуентов можно было писать подобный код, причем даже гибче.
                  Нет ограничений - метод возвращает this, нет ограничений на порядок: Form2.Style=.StyleНо и в бейсике оно довольно убого, а вот в языках с хорошими препроцессорами или макросами можно творить чудеса не захламляя язык ненужными дерьмом.
                  Ответить
    • Эм?.. Этот "синтаксический сахар" называется "объектно ориентированное программирование". Или вы предлагаете втыкать эту конструкцию в каждом месте, где нужна длинна слов? А то, что написано в комментарии - называется "оптимизация".

      КГ/АМ
      Ответить
    • Ололо! Язык Си - это синтаксический сахар над ассемблером!
      Ответить
    • и чо тут? фича - супер. пример гавно. автор открой студию, там в интеллисенсе расширения закрытыми глазами
      видны.
      автору кода книги в оуки и пояснить где такое нужно юзать.
      Ответить
    • автор, иди ты... писать в машинном коде! ибо все языки программирования, даже Ассемблер - всего лишь синтаксический сахар, который, в итоге, переводиться в машинный код.
      Ответить
    • показать все, что скрытоvanished
      Ответить

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