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

    +1

    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

    Комментарии (27) 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 давно был в бейсике, алсо.
          Ответить
          • А я считаю - чем больше возможностей писать на различных уровнях и парадигмах, тем лучше. Не обязательно писать на всех сразу, а придерживаться в проекте одной, но более подходящей, для решения данной задачи. (Конечно можно взять другой язык, но не всегда и не всегда это нужно).
            Ответить
      • Да динамик там не единственный полезный "хак". Один 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];
      Ответить

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