C # кажется популярным в наши дни. Я слышал, что синтаксически это почти так же, как Java. Java и C ++ существуют уже давно. По каким причинам я должен выбрать C # вместо Java и C ++?
C # кажется популярным в наши дни. Я слышал, что синтаксически это почти так же, как Java. Java и C ++ существуют уже давно. По каким причинам я должен выбрать C # вместо Java и C ++?
Ответы:
Вопрос должен звучать так: «Какой язык лучше подходит для современной типичной разработки приложений?».
Изменить: я обратился к некоторым из комментариев ниже. Небольшое замечание: учтите, что когда у вас есть много вещей изначально, таких как идиомы, это большая разница, чем их реализация, загрузка и использование каждый раз самостоятельно. Почти все может быть реализовано на любом из этих языков. Вопрос в том, что языки предоставляют вам изначально.
Так что, не в моей голове (некоторые аргументы применимы к обоим языкам) ...
this
аргумент указателя со статической типизацией ) и, следовательно, создавать более динамичные и гибкие отношения между классами. измените, если вы не знаете, что это значит, затем попробуйте назначить метод-член, возвращающий void и принимающий void для void (*ptr)()
переменной. Делегаты C # имеют при себе this
указатель, но пользователь не всегда должен заботиться об этом. Они могут просто назначить void()
метод любого класса любому другому void()
делегату.using
утверждение). Java 7 также будет поддерживать это, но в C # это продлилось гораздо дольше.yield
утверждением.this
указателя и связать метод, который делает это, с указателем обобщенной функции (т. Е. Не в том же классе), то просто не существует собственного способа сделать это. В C # вы получаете бесплатно. Вам даже не нужно знать, как это работает.this
указатель.using
Утверждение, очевидно , наряду с IDisposable оберток, является отличным примером RAII. Смотрите эту ссылку . Учтите, что вам не нужен RAII так сильно в C #, как в C ++, потому что у вас есть GC. Если вам это нужно, вы можете явно использовать это using
утверждение. Еще одно маленькое напоминание: освобождение памяти - дорогостоящая процедура. GC имеют преимущество в производительности во многих случаях (особенно когда у вас много памяти). Память не протечет, и вы не будете тратить много времени на освобождение. Более того, распределение также происходит быстрее, поскольку вы не выделяете память каждый раз, только время от времени. Вызов new
просто увеличивает указатель на последний объект.new
и delete
, что эмпирически всегда приводит к ошибкам здесь и там, либо (с C ++ 11) вы можете использовать авто указатели изначально, но имейте в виду, что они добавляют много и много шума в коде. Так что у GC все еще есть преимущество.Windows является доминирующей операционной системой на клиентских компьютерах. Лучшие графические среды для приложений Windows - это Winforms и WPF вместе с .NET Framework . Лучший язык программирования для работы с .NET Framework и его API - это C # . Ява не является альтернативой для этого. А C ++ - более старый язык без автоматического управления памятью. C # похож на C ++, но имеет автоматическое управление памятью, и вам не нужно работать с указателями, которые повышают производительность. C ++ все еще может быть лучшим вариантом для некоторых случаев, но не для приложений с интенсивными формами баз данных, которые распространены в бизнесе.
Если вы привыкли работать в среде Windows и с C #, вам потребуются наименьшие инвестиции для изучения IIS для программирования сервера и Windows Server для базового администрирования.
Если вы разрабатываете программное обеспечение, которое будет развернуто в сетях компании, вполне вероятно, что они используют среду, ориентированную на Windows, с использованием Windows Server с Active Directory. В такой среде проще интегрировать и развертывать решения, созданные на C # и .NET Framework .
Лично я разработчик Java, не разработчик C #, но я работаю с сетью. Я бы переключился на C #, если бы я разрабатывал сетевые приложения для сети Windows. Но я предпочитаю Java для веб-серверов на базе Linux. Я бы выбрал C ++ для встроенных систем, если бы у меня не было много зависимостей.
Да, C # - лучший язык с более современными функциями, чем C ++ и Java, но это не самая важная вещь для выбора C # .
Среда для вашего программного обеспечения является наиболее важной для выбора C # . Если вы работаете в среде с клиентами Windows, серверами Windows, Active Directory, IIS и, возможно, SQL Server, тогда C # - лучший язык для .NET Framework .
Если вы работаете в среде Unix, например, с веб-сервисами, я бы выбрал Java. И если вы работаете со встроенными системами или должны интегрироваться с аппаратными устройствами, C ++ будет хорошим выбором.
C # и Java
C # - очень хороший язык, если:
C # как язык лучше, чем Java, по-разному (лучший синтаксис для свойств, типов значений, обобщенных обобщений и т. Д.). Я предпочитаю C # как язык Java, но по большому счету они довольно похожи и подходят для похожих приложений.
С другой стороны, у Java также есть некоторые большие преимущества:
Так что Java против C # - это довольно близкий вызов, и все зависит от того, хотите ли вы быть в лагере Microsoft или в Open Source / кроссплатформенном лагере.
Лично я предпочитаю Java, потому что:
C / C ++
C / C ++ - это совершенно другой зверь. Я не рекомендовал бы это для разработки приложений общего назначения в настоящее время по следующим причинам:
Однако это, несомненно, отличный выбор для определенного ограниченного числа специальных доменов, в частности:
Таким образом, в основном C / C ++ является отличным выбором, если и только если вы сосредоточены на одной из областей, где он особенно хорошо подходит.
I heard that syntactically they are almost the same.
Синтаксически? Кто дает летающим обезьянам про синтаксис? Синтаксис хорош только для одного: позволяет быстрее переходить с синтаксически похожих языков. Вот и все.
C # намного лучше, чем Java. Рассмотрим их общую и функциональную поддержку программирования - C # намного опережает Java. Не говоря уже о перегрузках операторов и других хороших вещах - C # гораздо лучше представлен. Нет никакого способа, которым Java могла бы считаться лучше, чем C #.
C ++ и C # - это скорее соревнование. C ++ имеет невероятно надоедливую модель архаичной компиляции и кучу унаследованных заболеваний из C, но его шаблоны гораздо более мощные, чем обобщенные, и его подходы к управлению ресурсами в целом гораздо более гибкие и мощные, как using
полный провал, и он выполняется Быстрее.
Ну, C#
есть некоторые хорошие встроенные функции, такие как LINQ
и делегаты. Он получает лучшее из обоих миров - Java
и C++
. Смотрите здесь для полного сравнения.
Но мне больше нравится Java
мир - гораздо больше фреймворков с открытым исходным кодом, и он работает на каждой платформе. И не говорите мне об этом Mono
- это не надежный вариант.
Согласно некоторым источникам (см., Например, http://www.indeed.com/jobtrends ), C # все еще менее популярен, чем Java, и столь же популярен, как C ++.
C # предоставляет функции, которых нет в Java, например, прямая поддержка определенных идиом программирования, таких как свойства, стиль функционального программирования и т. Д. C # имеет более высокий уровень абстракции, чем C ++, что является преимуществом, когда время разработки более важно, чем скорость программы.
Лично я все еще предпочитаю миры Java / C ++. Как сказал Петар Минчев, в Java больше фреймворков и приложений с открытым исходным кодом, она работает везде, она менее привязана к конкретному поставщику и операционной системе. C ++ имеет аналогичные преимущества, даже несмотря на то, что код часто нуждается в адаптации, переходящей с одной платформы на другую. Поскольку я предпочитаю разрабатывать на Linux и, насколько мне известно, я не могу полностью освоить C # на Linux, я никогда не интересовался C #, потому что мои потребности в программировании покрываются C, C ++, Java, Scala.
С другой стороны, для многих разработчиков привязанность к конкретному поставщику не является проблемой: Microsoft занимает доминирующее положение на рынке операционных систем, а C # предоставляет множество рабочих мест. Поэтому многие разработчики IMO принимают C #, потому что, помимо того, что он является языком с широкими возможностями, он также является хорошим вложением.
А как насчет того, «Какая среда разработки программного обеспечения включает язык программирования»?
Вы забыли включить другие вещи, такие как «среда», с которой вы будете работать.
Собираетесь ли вы работать только для ОС Windows, но не должны быть низкого уровня и иметь много памяти и других ресурсов?
Выберите .NET в качестве основы для Windows и используйте C #.
Собираетесь ли вы работать только для Windows, но не должны быть низкого уровня, НО, не имеет много ресурсов?
Выберите Delphi Framework (и Object Pascal. Язык программирования Delphi или Lazarus Object Pascal. Язык программирования).
Является ли ваше приложение. требуется поддержка нескольких платформ, таких как игра, на разных мобильных телефонах?
Выберите Java Framework и язык программирования Java.
Это Linux с KDE в качестве графического интерфейса?
Выберите QT framework с C ++
Это Linux с Gnome в качестве графического интерфейса?
Выберите GObject / GLib framework с C ++
Собираетесь ли вы работать с множеством операций низкого уровня, таких как разработка драйверов?
Обычный C или C ++ используется для нескольких операционных систем со стандартными библиотеками в качестве фреймворка.
Просто мои 2 цента.
Если вы выполните поиск, вы, скорее всего, наткнетесь на обсуждение основных языков программирования. Вот один из результатов поиска - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html - Java по-прежнему кажется самым популярным языком.
Java пыталась устранить некоторые недостатки C ++ (и упростить жизнь программистам для приложений, не работающих в режиме реального времени и некритических). C #, опоздавший на вечеринку, избежал некоторых недостатков языка Java. C # добился значительных успехов (поскольку Microsoft имеет над ним большой контроль), в то время как достижения в Java были заблокированы в течение значительного периода времени из-за конфликта между заинтересованными сторонами.
Пара вещей, которые еще не были упомянуты:
C # лучше, чем C ++, потому что:
Это избавляет от заголовочных файлов, что означает большую простоту.
C # лучше, чем Java, потому что:
Он поддерживает определяемые пользователем типы ссылочного типа (класс) и тип значения (структура), которые, если вы знаете, что делаете, могут привести к значительному повышению производительности.
Он поддерживает делегаты, которые похожи на интерфейсы с одним методом, что значительно упрощает кодирование часто встречающихся конструкций, которые включают объекты с одним методом.
Вы должны выбрать лучший язык для вашей ожидаемой среды и вашего опыта.
Выберите C #, если вы работаете только в среде Microsoft. В то время как C # стандартизирован согласно ISO / IEC 23270: 2003, версия Microsoft остается единственной полной реализацией. Некоторые ключевые части языка не подпадают под действие стандарта и, следовательно, являются предметом патентов Microsoft. Никто другой не будет реализовывать полностью совместимую версию языка для других систем, поэтому, по сути, вы являетесь поставщиком, привязанным к Microsoft Windows и .Net, пока вы используете язык. Если вы ищете навыки для использования на рынке мобильной связи, лучше всего искать на другом языке.
Java работает, но имеет много накладных расходов, отчасти из-за таких функций, как сборка мусора. Java также не стандартизирована ISO / IEC, поэтому у вас нет никаких гарантий при переключении платформ и версий Java, только лучшие намерения Sun / Oracle. Если вы в конечном итоге планируете работать с Android, это, безусловно, путь. Программирование Android в основном Java, с некоторыми изменениями.
C ++ стандартизирован, и почти все компиляторы следуют международному стандарту, поэтому вы гарантированно себя ведете, НО язык не защищает вас от вас самих. Вы должны выполнить очистку и проверку переполнения самостоятельно. Это не сложно. Программисты C / C ++ занимаются этим уже много лет. Apple использует Objective C для всего, поэтому, если вы хотите стремиться к Apple, я рекомендую вам попробовать это.
Если вы когда-нибудь оставите Windows позади, я бы предложил изучить и C / C ++, и Java - и то, и другое сейчас доступно на рынке.
Что касается C ++ и C # (поскольку я недостаточно опытен в Java), то здесь мне не хватает возможности доступа к низкоуровневым ресурсам в Windows. Например, вы не можете разработать собственный драйвер дисплея в C # (пока), но вы можете это сделать с C ++. Это не делает C ++ лучше. Я вижу C ++ против C # как сборка против C.
На мой взгляд, C # гораздо эффективнее, если вы посмотрите на время, необходимое для реализации функции. Сокращение производительности среды выполнения .Net незначительно для 99% разработанных приложений. Это может иметь значение, если вы выполняете замкнутый цикл, да, во что бы то ни стало, но большую часть времени приложение бездействует, ожидая ввода любого типа, сигнала или прерывания (дисковый ввод-вывод, нажатие кнопки, сеть, завершение анимации) ,
Библиотека CLR со всеми его функциями имеет еще одно большое преимущество. Когда я обучал C # младшим разработчикам, большинство из них сказали, что им нравится соглашение о логическом именовании классов, членов и пространств имен. Поиск функции метода был логичен в SDK, в чем была серьезная ошибка Visual Basic 5. Это очень помогло им в принятии библиотеки. Изучив синтаксис языка, выучите новую библиотеку, чтобы получить хорошее представление о любом SDK. Это спасает вас от изобретения колеса.