уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Примерно два месяца назад, подождав немного Delphi 10.4 Community Edition, вновь решил попробовать свои силы в изучении C#. Надо сказать, что попытки изучить этот язык программирования у меня были давным давно, ещё в 2011 году, но тогда особой необходимости переходить в новый язык программирования для меня не было (в отличие от нынешней ситуации), поэтому все мои познания в C# тогда ограничились небольшим приложением а-ля «Hello world». Сегодня дело обстоит иначе и в этой статье я попробую не предвзято рассказать о том, что мне нравиться в C# и чего мне не хватает в этом языке программирования по сравнению с Delphi.

Из Delphi в C# за три дня

Надо сказать, что, благодаря нововведениям в Delphi, начиная с версии Delphi 2009, процесс изучения C#, лично для меня, был достаточно легким. Да пришлось немного привыкнуть к новому синтаксису языка и изучить немного вопросы, связанные с новыми для меня типами данных — делегатами и кортежами. Но, опять же, обладая хотя бы минимальными знаниями в Delphi по работе с анонимными методами, думаю, что серьезных  проблем с делегатами не возникнет ни у кого (хотя отличия и есть).

В общем, первое, более менее рабочее приложение на C# по работе с большим количеством (более 20000) XML-файлов было написано за три дня. При этом, попутно добавил в приложение работы с TPL (Task Parallel library, аналог в Delphi — PPL).

При этом, я отдаю себе отчёт в том, что мои познания в C#, по сравнению с Delphi, крайне небольшие и это приложение ещё потребует своей доработки и улучшений в любом случае. Но факт остается фактом — переход с Delphi на C# проходит довольно легко и не принужденно, если этого захотеть.

За что мне понравились C# и Visual Studio

Начал я изучение с самой, на данный момент, последней версии C# 8.0. И вот, что я мог бы выделить в качестве положительных моментов в C#.

Лаконичность языка

Думаю, что те, кто знает хотя бы в общих чертах и C# и Delphi, согласятся со мной, что по большей части, для написания одной и той же конструкции в C# требуется меньше времени, чем в Delphi. Забегая немного вперед, скажу, что это далеко не аксиома и в C# есть свои «приколы» где Delphi, на мой взгляд, выглядит на голову выше C#. Но, тем не менее, лично у меня, код в C# намного короче, чем аналогичный в Delphi.

Документация

Да, Delphi в плане документации и информации в Сети тоже далеко не на последнем месте, по сравнению с другими языками программирования, но, что касается C#, то на данный момент я крайне редко обращаюсь к сторонним ресурсам по языку и, в основном изучаю все возможности C# исключительно по справочным материалам на сайте Microsoft. Документация самого разного уровня — от информации для новичков (типа небольших интерактивных курсов) и, заканчивая подробнейшим описанием классов .NET позволяет погрузиться в язык C# более полно.

Наличие бесплатной среды

К сожалению, Idera/Embarcadero не может себе позволить раздавать студию бесплатно и без каких-либо ограничений (хотя и выпускают в свет Community Edition). Microdoft же позволяет пользоваться Visual Studio бесплатно. И пока я не вижу никаких серьезных ограничений, препятствующих нормальной работе, в бесплатной версии Visual Studio по сравнению с платной.

Visual Studio помогает лучше узнавать C#

В Delphi есть замечательный инструмент — Code Insight. В Visual Studio, наряду с аналогичным инструментом, также имеются быстрые действия, которые позволяют улучшить код, а, заодно и, со временем, приучают Вас писать код более кратко. Например, вот такой условный оператор:

int j; 
if (i == 0)
  {
    j = 1;
  }
    else
  {
    j = 0;
 }

Visual Studio с помощью быстрого действия поможет сократить до так называемой тернарной операции:

int j = i == 0 ? 1 : 0;

В начале кажется, что код стал менее читабельным, но, со временем, на столько привыкаешь к такой записи условий, что уже и не замечаешь, как сам, без подсказок Visual Studio, начинаешь использовать сокращенные проверки условий.

Аналогичным образом в Visual Studio начинаешь узнавать и другие языковые конструкции, вплоть до самых последних нововведений и обучение новому языку становится ещё более легким.

Что мне НЕ нравится в C#

Как я сказал выше, некоторые моменты в Delphi выглядят, лично для меня, на порядок лучше и красивее, чем в C#. И вот, что на данный момент мне не нравится в C#.

Работа с множествами

Возможно, что я сейчас ошибусь, так как изучаю C# всего пару месяцев, но, по-моему, в C# нет такой операции, как проверка на вхождение элемента в множество.

Например, в Delphi мы можем провести вот такую проверку:

if (2 in [0..5]) then
  res:='2 входит в множество'

В C# такой возможности нет. Да, в C# есть типы данных наподобие HashSet<int>, можно использовать и List<int> (аналог Delphi — TList<int>). И, используя методы типа Contains() можно проверить есть ли элемент в списке, но…согласитесь, что, в данном случае, код на Delphi будет выглядеть более элегантно и понятно.

Условный оператор выбора switch

С одной стороны, изучив документацию по switch, понимаешь почему разработчики C# выбрали для него именно такой синтаксис и, что этот оператор, при должном навыке программирования в C# позволяет делать много всяких крутых штук, в отличие от оператора case...of в Delphi. Но с другой стороны, по сравнению с Delphi switch в C# выглядит, мягко говоря, монструозно. Простой пример — в зависимости от заданного пользователем числа выполнить некую операцию. Код Delphi:

var i: integer;
    res: single;
begin
  case i of
    0: res:=1;
    1,3,5: res:=i*i;
    2: res:=i*i*i;
    4: res:=i+1;
  else
    raise Exception.Create('Задано неверное число');
  end;
end;

Аналогичный код в C# будет выглядеть вот так:

int i = 3;
float res;
switch (i)
    {
      case 0: { res = 1; break; }
      case 1:
      case 3:
      case 5: { res = i * i; break; }
      case 2: { res = i * i * i; break; }
      case 4: { res = i + 1; break; }
      default: throw new Exception("Задано неверное число");
    }

На мой взгляд, код Delphi, в этом случае, выглядит на много красивее и интуитивно понятнее. Конечно, в C# 8 появилась такая языковая конструкция, как «выражение switch» (не оператор), которая позволяет в отдельных случаях сделать код короче и понятнее, но, к сожалению, выражение можно использовать не всегда и, по-моему, только в .NET Core.

Распространение и совместимость приложений

Понятно, что в C# никуда не деться от использования .NET технологий (сам язык разрабатывался под .NET и для .NET) и, на данный момент, каких-либо серьезных проблем не возникает написать приложение и использовать его на любом компьютере с Windows. Но как же не привычно после Delphi получить при сборке exe-файл в 174 Кб и, чтобы его запустить на соседнем компьютере, скачивать и устанавливать ещё один с .NET Core «весом» в 47 Мб. А всё по тому, что у  соседа .NET Core не установлен.

Возможно, что со временем в ОС Windows и появится возможность получить сразу всё необходимое для работы приложений C# без распространения вместе с exe дополнительных пакетов (фантастика, конечно, но кто знает), но пока дела обстоят именно так — хочешь, чтобы приложение запускалось везде и всегда — тащи вместе с ним всё, что использовал и устанавливай вместе со своей программкой.

Что касается совместимости. В Delphi, на сколько я помню, самая «жесть» по части переработки кода, в угоду современным тенденциям развития Delphi, случилась в момент перехода на Unicode. Были целые гайды по тому как, что и на что необходимо заменить, чтобы приложение начало работать так как и должно и использовать все возможности Unicode.

Сейчас, по-видимому, аналогичная ситуация складывается и с .NET. С появлением .NET Core стало достаточно проблематично переносить приложения с .NET Framework на новую платформу. Да есть куча всяких гайдов  по переносу, утилиты для проверки совместимости и так далее, но для такого неподготовленного человека, как я, сходу вникнуть  во все тонкости переноса приложения с .NET Framework на .NET Core было, прямо скажу, не легко. Хотя и получилось. Думаю, что с  выходом новой платформы под названием .NET 5 начнется очередной виток переносов и гайдов на сотни страниц как такой переход осуществить наиболее безболезненно. Посмотрим.

Итог

В целом, могу сказать, что работа в C# сейчас не вызывает у меня никаких отрицательных эмоций. Да, что-то нравится, что-то не очень, но в целом — всё, что необходимо сделать получается. И, со временем, привыкаешь  и к  синтаксису и к особенностям самого языка. На данный момент проект над которым сейчас работаю состоит из двух частей, написанных на C# и Delphi. В  Delphi осталась самая сложная часть расчётов, которые постоянно  дорабатываются и пока нет никаких перспектив для того, чтобы этот код перекочевал в C#. В C# идет работа, в основном, с обработкой данных — анализ XML-файлов, сохранение индекса и так далее.

Как 11 лет назад для Delphi, так и для C# завел отдельный блог в котором, как и здесь, пишу про то,с чем сталкиваюсь в C#, чтобы, в случае чего, не потерять информацию и быстро вспомнить какие-то моменты по работе. Например, сейчас изучаю моменты по работе с Excel в C# — популярная, кстати, тема в  этом блоге.

5 8 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии