Здається, C # користується популярністю в наші дні. Я чув, що синтаксично це майже те саме, що і Java. Java та C ++ існують уже давно. З яких причин я повинен вибрати C # над Java та C ++?
Здається, C # користується популярністю в наші дні. Я чув, що синтаксично це майже те саме, що і Java. Java та C ++ існують уже давно. З яких причин я повинен вибрати C # над Java та C ++?
Відповіді:
Питання повинно бути "Яка мова найкраще підходить для сучасної типової розробки додатків?".
Редагувати: я звернувся до деяких коментарів нижче. Невелике зауваження: врахуйте, що коли у вас є багато речей, як ідіоми, це велика різниця, ніж щоразу впроваджувати або завантажувати та використовувати їх. Практично все можна реалізувати на будь-якій з цих мов. Питання в тому, - які мови вам споконвічно надають.
Тож у верхній частині голови (деякі аргументи стосуються обох мов) ...
this
аргументу вказівника), а отже, створювати більш динамічні та гнучкі відносини між класами. відредагуйте, якщо ви не знаєте, що це означає, то спробуйте призначити член-метод, який повертає недійсність і приймає недійсність 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 # . Java не є альтернативою для цього. А C ++ - це більш давня мова без автоматичного управління пам'яттю. C # схожий на C ++, але має автоматичне управління пам'яттю, і вам не доведеться працювати з покажчиками, які роблять вас більш продуктивними. C ++ все ще може бути найкращим варіантом для деяких випадків, але не для додатків із великими формами баз даних, що є звичним для бізнесу.
Якщо ви звикли працювати в середовищі Windows та з C #, вам знадобляться найменші інвестиції для вивчення IIS для програмування на сервері та Windows Server для базового адміністрування.
Якщо ви розробляєте програмне забезпечення, яке планується розгорнути в мережах компанії, можливо, вони використовують середовище, орієнтоване на Windows, за допомогою сервера Windows з 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 чи таборі з відкритим кодом / міжплатформою.
Особисто я віддаю перевагу 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 (та мову програмування Object Pascal Delphi або мову програмування Lazarus Object Pascal)
Ваш додаток. необхідна для підтримки декількох платформ, як гра, в різних мобільних телефонах?
Виберіть Java Framework та мову програмування Java.
Це Linux з KDE як графічний інтерфейс?
Виберіть рамку QT за допомогою C ++
Це Linux з Gnome як графічний інтерфейс?
Виберіть рамку GObject / GLib, використовуючи 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 використовує ціль C для всього, тому, якщо ви хочете націлитись на Apple, рекомендую спробувати це замість цього.
Якщо ви побачите, що ви в якийсь момент залишаєте Windows позаду, я б запропонував вивчити як C / C ++, так і Java - обидва з яких зараз продаються.
Що стосується C ++ проти C # (оскільки я недостатньо досвідчений в Java), мені тут бракує можливості доступу до матеріалів низького рівня в Windows. Наприклад, ви не можете розробити власний драйвер дисплея в C # (поки), але ви можете з C ++. Це не робить C ++ кращим. Я бачу C ++ проти C # як збірку проти C.
На мою думку, C # набагато ефективніше, якщо подивитися на час, необхідний для реальної реалізації функції. Показник продуктивності виконання .Net виконує незначно для 99% розроблених додатків. Це може бути важливим, якщо ви працюєте в тісному циклі, так, без сумніву, але більшу частину програми програма працює в режимі очікування, очікуючи будь-якого вводу, сигналу або переривання (IO диска, натискання кнопки, мережа, завершення анімації) .
Бібліотека CLR з усіма своїми функціями має ще одну велику перевагу. Коли я навчав C # молодшим розробникам, більшість із них сказала, що їм подобається логічне узгодження імен класів, членів та просторів імен. Пошук функції методу був логічним для SDK, що було серйозно помилкою у Visual Basic 5. Це дуже допомогло їм у прийнятті бібліотеки. Вивчивши синтаксис мови, здобути для вивчення нової бібліотеки є важливим для розуміння будь-якого SDK. Це позбавляє вас від винаходи колеса.