- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 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;
}
}
}
}
И вернуть на стадию 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 позволяет. Просто ящитаю, хотя я и фанат C# (v2.0), что у языка должна быть какая-то идеология и какие-то ограничения по поводу того, что в него пихать, а что нет.
С таким подходом майкрософта (в каждой новой версии нужно обязательно добавить каких-нибудь killer-фич, суть такова... динамики вызывают COM, interop и linq набегают на лямбды... можно yield'ить), через несколько лет C# будет большой неподъёмной кучей говна как C++.
late-bound давно был в бейсике, алсо.
Я вот думаю, для таких случаев нужно делать специальный domain-specific language, а не городить поддержку domain-specific-фич в general-purpose-языке. Ведь не зря же они постоянно рекламируют .NET как *Common Language* runtime, т.е. по идее особо сложную обёртку над COM мы можем описать на специальном COM-языке, и затем слинковать с C#, Basic и т.д. А в итоге выходит, что почти все пишут на C#, в который намешиваются куча всякой хрени на каждый случай, потому что "так удобнее". В том-то и дело, что как-раз таки говнокод удобнее и писать... Нормальный код требует усердия...
появление бигинтегера в сишарпе это не появление фичи, а допиливание BCL по части отсутствующего функционала.
Только он Internal Class в самих либах.
Можно было просто скопипастить класс из транка.
И никакой велосипедной промышленности.
>>И вернуть на стадию 2.0
Лол, в кои-то веки я согласен с Вами.
Я писал на C# во времена 2.0 (и даже получит 70-536), и могу сказать что C# версии 2.0 -- отличный язык, во многом лучше джавы (если не считать делегатов, который приводили к утечке указателя в говнокодах).
Но потом пришли маркетологи и появился var, extensions methods, dynamic, linq итд...
А меня на джаву перевели, и слава богу)
Ооо. А можете привести такой говнокод на говнокоде?
Чё-то тя заклинило на var'е. Тебе уже, по-моему, раз пять объяснили что это и почему это хорошо.
C# 2.0 с var'ом -- пиздатенюшка-пиздатень.
в общем, радуйтесь, семейство дотнет скоро пополнится еще одним ЯП - пхп!
Мля, 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 подобном синтаксисе)
Иногда кажется, что ругают дотнетошарп за эти фичи только те, кто не умеет ими пользоваться и боиться получить в поддержку код с их применением.
Кроме того мне чужда идея добавления в язык всего говна, которого кому-то не хватает. Давайте еще встроим работу с регулярками (как в perl), унифицируем работу с массивами и мапами (как в php) и вообще каждый год будем добавлять по семь новых полезных конструкций в язык.
Кстати, покажите мне пожалуйста реально работающий проект с linq (опенсурсовый например) -- я не йорничаю, мне правда любопытно
где?
P#P
Меня беспокоит девятая строчка: int t = arr[j];