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

    +110

    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
    void BubbleSort(dynamic arr)
    {
        for (int i = arr.Length - 1; i > 0; i--)
        {
            for (int j = 0; j < i; j++)
            {
                if (arr[j] > arr[j + 1])
                {
                    int t = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = t;
                }
            }
        }
    }

    Обобщенное программирование (:
    Видел на одно форуме в теме operator constraint

    Запостил: HIMen, 11 Июля 2010

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

    • За такое нужно отрезать половые органы.
      Ответить
    • Пора форкать C#.
      И вернуть на стадию 2.0
      Поак что новые фичи все бесполезные.
      Однак это не знчаит, что нужно пректатить юзать .NET
      C# это только один из языков

      Конечно по уму нужно делать void BubbleSort<T>(T[] arr)...
      Ответить
      • Где бесполезные?
        Один только dynamic позволяет:
        1)Писать программы схожие с истинно объектно-ориентированной моделью SmallTalk.
        2)Позволяет легко и просто использовать паттерн Мултиметод.
        3)Простое взаимодействие с COM.
        4)Возможность обработки обращений к несуществующим методам (используя DynamicObject).
        5)Добавляет часть возможностей, что теряются при использованиии generic C#, взамен отсутствующих template C++.

        Хотя конечно он жутко устарел. Он был ещё в Delphi 7, а может и раньше. Да и обезьяны его могут понатыкать везде. Страшно будет поддерживать такой код. Да и реально нужно только 2,3,5.
        Ответить
        • > Один только dynamic позволяет

          Я знаю, что dynamic позволяет. Просто ящитаю, хотя я и фанат C# (v2.0), что у языка должна быть какая-то идеология и какие-то ограничения по поводу того, что в него пихать, а что нет.

          С таким подходом майкрософта (в каждой новой версии нужно обязательно добавить каких-нибудь killer-фич, суть такова... динамики вызывают COM, interop и linq набегают на лямбды... можно yield'ить), через несколько лет C# будет большой неподъёмной кучей говна как C++.

          late-bound давно был в бейсике, алсо.
          Ответить
          • А я считаю - чем больше возможностей писать на различных уровнях и парадигмах, тем лучше. Не обязательно писать на всех сразу, а придерживаться в проекте одной, но более подходящей, для решения данной задачи. (Конечно можно взять другой язык, но не всегда и не всегда это нужно).
            Ответить
        • >dynamic - очень полезен в COM interop, особенно в excel, где раньше приходилось кучу нужных методов вызывать через рефлексию

          Я вот думаю, для таких случаев нужно делать специальный domain-specific language, а не городить поддержку domain-specific-фич в general-purpose-языке. Ведь не зря же они постоянно рекламируют .NET как *Common Language* runtime, т.е. по идее особо сложную обёртку над COM мы можем описать на специальном COM-языке, и затем слинковать с C#, Basic и т.д. А в итоге выходит, что почти все пишут на C#, в который намешиваются куча всякой хрени на каждый случай, потому что "так удобнее". В том-то и дело, что как-раз таки говнокод удобнее и писать... Нормальный код требует усердия...
          Ответить
      • Да динамик там не единственный полезный "хак". Один BigInteger чего стоит. Не нужно городить свои велосипеды (Особенно полезно студентам на уроках защиты информации).
        Ответить
        • > BigInteger

          появление бигинтегера в сишарпе это не появление фичи, а допиливание BCL по части отсутствующего функционала.
          Ответить
          • А кто спорил? Поэтому 2.0 хуже последних дотнетов, тк не допилен.
            Ответить
            • В моно давно есть BigInteger.
              Только он Internal Class в самих либах.

              Можно было просто скопипастить класс из транка.
              И никакой велосипедной промышленности.
              Ответить
              • Ты недавно говорил про C# 2.0, а теперь вдруг про mono. Теряешь нить разговора? О_о
                Ответить
                • Эм-м-м, нет. Я к тому, что для C# 2.0 можно легко и непринуждённо скопипастить класс с моно. Это не велосипедение, т.к. как сам ничё не пишешь, тестить не надо и т. д.
                  Ответить
              • Он, кстати, и в .Net 3.5 есть. В пространстве имен System.Numeric в сборке System.Core. Но тоже internal :(
                Ответить
      • >>Пора форкать C#.
        >>И вернуть на стадию 2.0
        Лол, в кои-то веки я согласен с Вами.

        Я писал на C# во времена 2.0 (и даже получит 70-536), и могу сказать что C# версии 2.0 -- отличный язык, во многом лучше джавы (если не считать делегатов, который приводили к утечке указателя в говнокодах).

        Но потом пришли маркетологи и появился var, extensions methods, dynamic, linq итд...
        А меня на джаву перевели, и слава богу)
        Ответить
        • >если не считать делегатов, который приводили к утечке указателя в говнокодах

          Ооо. А можете привести такой говнокод на говнокоде?
          Ответить
        • > Но потом пришли маркетологи и появился var

          Чё-то тя заклинило на var'е. Тебе уже, по-моему, раз пять объяснили что это и почему это хорошо.

          C# 2.0 с var'ом -- пиздатенюшка-пиздатень.
          Ответить
          • потом var'а стало мало, и появился dynamic
            в общем, радуйтесь, семейство дотнет скоро пополнится еще одним ЯП - пхп!
            Ответить
            • > потом var'а стало мало, и появился dynamic

              Мля, var никакого отношшения к dynamic не имеет.

              Вообще же dynamic появился первоначально в CLR, как часть DLR, чтобы им могли пользоватьяс динамические языки.

              Потом какому-то пришибленному пришгло в голову отразить это в C#. Видимо, больше отражать нечего было. Ведь как известно, в Майкрософт стараются в каждой новой версии добавлять всё больше новых фич, чтобы юзеры продолжали тратить денюжки. Вот видимо и сидел Хейльсберг чесал жопу: что бы ещё добавить в C#, а тут как раз ребята из Microsoft Relearch подготовили System.Dynamic (ещё они же для какого-то другого проекта и написали BigInteger, который потом впустили в CLR 4.0)

              Короче если до C# 2.0, может быть, даже до C# 3.0, были какие-то идеи, то щас идёт в плане C# реактивное высасывание из пальца, к сожалению :(
              Ответить
              • как же вы все достали ныть, что дотнетошарп уже не торт....
                1) var - отличная конструкция, позволяет повысить читабельность, особенно когда у длинные обобщенный тип (типа Dictionary<List<Smth>>)
                2) dynamic - очень полезен в COM interop, особенно в excel, где раньше приходилось кучу нужных методов вызывать через рефлексию
                3) linq\лямбды - вообще шикарная вещь. попробуйте на C# 2.0 взять 2 коллекции, отфильтровать\отсортировать\преобразоват ь и сджойнить - у вас туева куча кода будет, а тут всё красиво в 1 строчку кода (даже можно в красивом sql подобном синтаксисе)

                Иногда кажется, что ругают дотнетошарп за эти фичи только те, кто не умеет ими пользоваться и боиться получить в поддержку код с их применением.
                Ответить
                • Видите-ли, я видел примерно 20 сайтов, которые становились раком именно потому, что один заход на сайт вызывал в среднем 50 тупых запросов к БД, потому горе-программисты положились на linq)

                  Кроме того мне чужда идея добавления в язык всего говна, которого кому-то не хватает. Давайте еще встроим работу с регулярками (как в perl), унифицируем работу с массивами и мапами (как в php) и вообще каждый год будем добавлять по семь новых полезных конструкций в язык.

                  Кстати, покажите мне пожалуйста реально работающий проект с linq (опенсурсовый например) -- я не йорничаю, мне правда любопытно
                  Ответить
                  • вы путаете Linq и частный случай - LINQ 2 SQL. Linq 2 sql - в своём роде незаконченный продукт, который забросили. (Правда появился не менее интересный EF). То, что там кто-то с ним накосячил - руки ростут не из того места, надо сначало изучить технологию, а потом её использовать. У таких говнокодеров всё будет валится в следствии прямых извилин и кривых рук какую бы технологию им не дай.
                    Ответить
                • до-диез никогда не был тот
                  Ответить
            • >> семейство дотнет скоро пополнится еще одним ЯП - пхп!
              P#P
              Ответить
    • dynamic — это только для int?
      Меня беспокоит девятая строчка: int t = arr[j];
      Ответить

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