catpad: (Default)
[personal profile] catpad

Итак, я решил сравнить C# с Java. Вот, что получилось:



Что мне нравится в C# по сравнению с Java


  • Вернулись enums. И это хорошо. Сколько можно final static public int ?
  • Вернулся препроцессор. Без него тоже тяжко.
  • Слово const лучше отражает суть дела, чем final.
  • @ обозначает "verbatim string" - очень удобно, давно ожидалось, особенно в регулярных выражениях.
  • ~ как обычно обозначает деструктор, что, хотя и путает дело, но выглядит привычно.
  • foreach ! О, наконец-то !
  • params - хорошее решение (компромисс) уродливейшему способу С/С++.
  • Оператор typeof - лучше выглядит, чем getClass().
  • Оператор as - лучше кастинга.
  • Оператор is - лучше, чем неуклюжее instanceof.
  • ref, out - очень нужные народу вещи.
  • Properties - великое нововведение. Давно надо было, JavaBeans просто жаждут properties. Indexers - тоже неплохая вещица.
  • Attributes - тут подход может быть двоякий. Оно вроде бы и удобно, но путаницы может внести - ужас !
  • Отсутствие primitive types. Это правильно, primitive types - опиум для народа, правда, тут всё ещё хуже, но об этом потом.
  • struct вместо класса - хорошо для lightweight типов и, к тому же, позволяет избавиться от примитивных типов, но путаницы от них может быть и больше, чем пользы.
  • Форматирование стрингов с помощью {0},{1},... - очень удобно, и лучше, чем в С.
  • using определяет сразу весь namespace, что гораздо удобнее, чем громоздкие джавовские import-s.
  • Отсутствие в Object'e функций wait() и notify(), по-моему, только прибавляет ясности.


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



  • Двоеточие вместо extends и implements - не даёт понять, кто есть класс, а кто интерфейс.
  • Глядя на название типа, нет способа понять, кто есть value type, а кто reference type. Большая путаница может произойти от этого дела. Весь этот boxing-unboxing выглядит очень неуклюже.
  • Вернулся нелюбимый мною operator overloading.
  • Delegates, events вместо простых и ясных как день listeners и анонимных классов вызывают отвращение.
  • Namespace со своими скобочками, по-моему, гораздо хуже package'a.
  • Структура директорий, повторяющая структуру packages в Jave, по-моему, очень сильно упрощает дело поиска нужного класса и, вообще, упорядочивает мысли.
  • Опять разделение на virtual и non-virtual функции - кому это нужно. Можно же с ума сойти от всех этих new (вообще слово не к месту) и override.
  • Функция не объявляет throws - и очень жаль !
  • Ключевые слова object, string, etc. параллельные одноимённым классам только путают всё дело.

Date: 2002-06-24 03:23 pm (UTC)
From: [identity profile] catpad.livejournal.com
Да, теперь посмотрел. Похоже.
Но я просто собрал свои впечатления, после того, как прочитал эту замечательную книжку (http://www.amazon.com/exec/obidos/ASIN/0735614229/qid=1024956874/sr=8-1/ref=sr_8_1/102-4640760-7304135). Большая редкость в потоке околопрограммистской макулатуры. Последний раз такая же удача постигла меня вот здесь (http://www.amazon.com/exec/obidos/ASIN/0071350934/qid=1024957082/sr=2-1/102-4640760-7304135), но это уже о Java.

А вообще-то я Майкрософтом доволен первый раз, по-моему. Сделали что-то правильное.
То есть, я всегда говорю, что среды у них замечательные, UI хороший, а вот все эти COM навороченные, Visual Basic с VBScript'ом недоразвитые - ужас. Ну теперь хоть хватило ума украсть хорошую идею и немного её улучшить.

Date: 2002-06-24 05:56 pm (UTC)
From: [identity profile] ex-ilyavinar899.livejournal.com
В презентации много ссылок на более глубокую техническую информацию, нежели книжка Рихтера.
Page generated Feb. 7th, 2026 02:43 pm
Powered by Dreamwidth Studios