Займёмся программированием
Jun. 24th, 2002 08:01 pmИтак, я решил сравнить 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. параллельные одноимённым классам только путают всё дело.