Z jakých důvodů bych měl zvolit C # přes Java a C ++? [uzavřeno]

Zavřeno . Tato otázka je míněna . Momentálně nepřijímá odpovědi.

Komentáře

  • Jak bylo napsáno, otázka byla příkladem učebnice nekonstruktivního " který jazyk je lepší? " otázky, které zde nejsou relevantní. ' jsem se pokusil provést úpravy konstruktivněji, protože ve skutečnosti získal dobré a dobře promyšlené odpovědi. Při kladení otázek této povahy mějte však na paměti Časté dotazy a tento příspěvek na blogu . .
  • Dovolte mi přidat nějaké ostřejší položky. .NET má pro svůj jazyk dobře definovaný DOM ( např. CodeDOM ) a následné generování věcí dynamicky za běhu je mnohem jednodušší a efektivnější. To může být užitečné také jako infrastrukturní funkce. Typový systém má také shodu 1: 1 se všemi nativními typy W3. Jádro W3 a další interopy byly do jazyka zapečené od začátku. U jiných jazyků byly tyto obavy jen zmateny a představují pro ně mnoho výzev. Pokud také ' interopujete se spoustou jazyků a / nebo protokolů, pak je také .NET velmi silný
  • Hej, JoeGeeky, přidej svůj komentář jako odpověď na otázku.
  • Skutečné otázky zní: Z jakých důvodů bych měl zvolit Nemerle, F * a F # nad C #? (tj. všechny tři jazyky pocházejí z MS a všechny tři jsou lepší)
  • Opravdu si nemyslím, že ' nemyslím na žádný žánrový výrok " jazyk / platforma X ve srovnání s jazykem / platforma Y je VŽDY lepší " je platný a také si myslím, že pro jakýkoli X a Y to může být jisté kontexty. Jaký ' má smysl tato otázka?

Odpověď

Otázka by měla být " Který jazyk je vhodnější pro moderní typický vývoj aplikací? ".

Upravit : Řešil jsem některé z níže uvedených komentářů. Malá poznámka: vezměte v úvahu, že když máte spoustu věcí nativně, jako idiomy, je to velký rozdíl, než kdykoli je implementovat nebo stáhnout a používat sami. Téměř vše lze implementovat v kterémkoli z těchto jazyků. Otázkou je – co jazyky vám nativně poskytují.

Takže z mé hlavy (některé argumenty platí pro oba jazyky) …

C # je lepší než C ++ v tom:

  • nativní sběr odpadků.
  • Umožňuje vám považovat podpisy metod třídy „za volné funkce (tj. ignorovat staticky napsané this ukazatel ukazatel), a tím vytvořit dynamičtější a pružnější vztahy mezi třídami. upravovat pokud nevíte, co to znamená, zkuste přiřadit členské metodě vrácení prázdnoty a přijetí prázdnoty k void (*ptr)() proměnná. Delegáti jazyka C # nesou ukazatel this, ale uživatel se o to nemusí vždy starat. Mohou pouze přiřadit void() metodu jakékoli třídy jakémukoli jinému void() delegátovi.
  • Má obrovský standard knihovna s tolika užitečnými věcmi, která jsou dobře implementována a snadno se používají.
  • Umožňuje blokování spravovaného i nativního kódu.
  • Verze sestavení snadno odstraní problémy s peklem DLL.
  • Můžete nastavit třídy, metody a pole tak, aby byly interní sestavení (což znamená, že jsou přístupné odkudkoli v knihovně DLL, v níž jsou deklarovány, ale ne z jiných sestav).

C # je lepší než Java v tom:

  • Místo velkého hluku (EJB, implementace soukromé statické třídy atd.) získáte elegantní a přátelské nativní konstrukce, jako jsou Vlastnosti a Události .
  • Máte skutečné generiky (nikoli špatný vtip, který Java nazývá generiky), a můžete na nich provádět reflexe.
  • Podporuje nativní idiomy pro správu zdrojů (using prohlášení). Java 7 to také bude podporovat, ale C # to má už delší dobu.
  • Nezkoumala výjimky 🙂 (diskutabilní, zda je to dobré nebo špatné)
  • Je hluboce integrován do Windows, pokud je to to, co chcete.
  • Má Lambdas a LINQ, proto podporuje malé množství funkčního programování.
  • Umožňuje jak obecnou kovarianci, tak kontravariance výslovně.
  • Má dynamické proměnné, pokud je chcete.
  • Lepší podpora výčtu pomocí příkazu yield.
  • Umožňuje definovat nové typy hodnot (nebo nereferenční).

Upravit – Adresování komentářů

  • Neřekl jsem, že C ++ nepodporuje nativní RAII. Řekl jsem, že Java to nemá (musíte to explicitně vyzkoušet / konečně). C ++ má automatické ukazatele, které jsou skvělé pro RAII, a (pokud víte, co děláte) může také nahradit sběr odpadu.
  • Neřekl jsem nic o emulaci volných funkcí. Ale například pokud potřebujete přistupovat k poli pomocí this ukazatele a svázat metodu, která to dělá, s obecným ukazatelem funkce (tj. ne ve stejné třídě), pak to prostě neexistuje nativní způsob, jak to udělat. V C # získáte zdarma. Ani nemusíte vědět, jak to funguje.
  • Tím, že " budete členské metody považovat za volné funkce " Měl jsem na mysli, že „nemůžete například nativně svázat metodu člena s podpisem volné funkce, protože metoda člena " tajně " potřebuje ukazatel this.
  • Příkaz using, samozřejmě spolu s obaly IDisposable, je skvělým příkladem RAII. Viz tento odkaz . Vezměte v úvahu, že v C # nepotřebujete RAII tolik jako v C ++, protože máte GC. Pro konkrétní dobu, kterou potřebujete, můžete explicitně použít using prohlášení. Další malá připomínka: uvolnění paměti je nákladný postup. GC mají v mnoha případech svoji výkonnostní výhodu (zejména když máte spoustu paměti). Paměť nebude unikat a nebudete utrácet spoustu čas přidělení. A co víc, alokace je také rychlejší, protože nepřidělujete paměť pokaždé, jen jednou za čas. Volání new jednoduše zvyšuje poslední – object-pointer.
  • " C # je horší v tom, že má odvoz odpadu ". To je skutečně subjektivní, ale jak jsem uvedl nahoře, pro nejmodernější typický vývoj aplikací je sběr odpadků velkou výhodou.
    V C ++ máte na výběr buď ruční správu paměti pomocí new a nd delete, což empiricky vždy vede sem a tam k chybám, nebo (s C ++ 11) můžete nativní použít automatické ukazatele, ale mějte na paměti, že přidávají loty a spousta hluku do kódu. Takže GC tam stále má výhodu.
  • " Obecné jsou mnohem slabší než šablony " – prostě ne Nevím, odkud to máte. Šablony mohou mít své výhody, ale podle mých zkušeností jsou obecná kontrola typu parametru, kontravariance a kovariance mnohem silnější a elegantnější nástroje. Silnou stránkou šablon je, že vám umožňují hrát s jazykem a bit, což může být skvělé, ale také způsobuje spoustu bolestí hlavy, když chcete něco ladit. Celkově vzato mají šablony své hezké vlastnosti, ale generika mi připadají praktičtější a čistší.

Komentáře

  • A pokud přesto chcete program Garbage Collector pro C ++, můžete si jej stáhnout .
  • dovolte nám pokračovat v této diskusi v chatu
  • Další důležitou funkcí v C # ve srovnání s Javou je z důvodu výkonu " struktura ", typ objektu, který lze uložit do zásobníku (nebo ve zvláštních případech do registrů CPU) nebo vložit do jiných haldy objektů. Často se používají pro malé objekty s 1–4 poli, například dvojice souřadnic X, Y.
  • @LokiAstari Vysvětlení mysli? Pokud si vzpomenete, že chcete zrušit registraci obslužných rutin událostí a použít vzor Dispose na třídách, které obsahují nativní obálky, ' budete v pořádku. To ' je mnohem méně informací a pamětí než správa paměti v C ++.
  • -1, protože mi chybí sekce " C ++ je lepší než C # v tom … " a " Java je lepší než C # … ". Nemyslím si, že C # je lepší ve všech oblastech, takže odpovědi bez těchto dvou částí pravděpodobně chybí některé důležité informace.

Odpověď

Prostředí

.NET Framework a klienti Windows

Windows je dominantním operačním systémem v klientských počítačích. Nejlepší rámce GUI pro aplikace Windows jsou Winforms a WPF společně s .NET Framework . Nejlepší programovací jazyk pro práci s .NET Framework a jeho API je C # . Java k tomu není alternativou.A C ++ je starší jazyk bez automatické správy paměti. C # je podobný C ++, ale má automatickou správu paměti a nemusíte pracovat s ukazateli, díky nimž budete produktivnější. C ++ může být pro některé případy stále tou nejlepší volbou, ale ne pro databázové aplikace náročné na formu, které jsou běžné v podnikání.

IIS a Windows Server

Pokud jste zvyklí pracovat v prostředí Windows a s C #, budete potřebovat nejméně investic, abyste se naučili IIS pro programování serveru a Windows Server pro základní správa.

Active Directory a Windows Server

Pokud vyvíjíte software, který bude nasazen v podnikových sítích, je pravděpodobné, že používá prostředí zaměřené na Windows pomocí Windows Server se službou Active Directory. V takovém prostředí je snadné integrovat a nasadit řešení vyrobené v C # a .NET Framework .

Osobně jsem vývojář prostředí Java, nikoli vývojář jazyka C #, ale pracuji s webem. Pokud bych vyvíjel síťové aplikace pro síť Windows, přepnul bych na C #. Ale dávám přednost Java pro webové servery založené na Linuxu. Zvolil bych C ++ pro vestavěné systémy, pokud bych nezískal mnoho závislostí.

Ano, C # je lepší jazyk s modernějšími funkcemi než C ++ a Java, ale není nejdůležitější věcí pro výběr C # .

Shrnutí

Prostředí vašeho softwaru je nejdůležitější pro výběr C # . Pokud pracujete v prostředí s klienty Windows, servery Windows, Active Directory, IIS a možná SQL Server pak C # je nejlepším jazykem s .NET Framework .

Pokud pracujete v prostředí Unix s např. webové služby, Java by byla moje volba. A pokud pracujete s vestavěnými systémy nebo se musíte integrovat s hardwarovými zařízeními, C ++ by byla dobrá volba.

Komentáře

  • Absolutně – proto používám C #, ne vlastně žádný jiný důvod
  • .NET můžete na jiných platformách určitě použít přes Mono, MonoTouch a MonoDroid, ale moje měřítka zjistila, že Mono je výrazně pomalejší než .NET pro Windows a vlastní kompaktní framework Microsoft ' je ve Windows CE extrémně pomalý: codeproject.com/KB/cross-platform/BenchmarkCppVsDotNet.aspx … WPF je samozřejmě k dispozici pouze ve Windows (ale ' stejně se mi to nelíbí.)
  • Které závislosti máte na mysli wich " Zvolil bych C ++ pro vestavěné systémy, kdybych ' nezíská ' mnoho závislostí. " Myslíte java knihovny?
  • @ Puckl ano, ale většinou jvm / jre.
  • " Pokud pracujete v prostředí Unix s např. webové služby " existují i jiné jazykové & rámce, které lze považovat za: ruby, Python, node.js atd.

Odpověď

C # a Java

C # je velmi dobrý jazyk, pokud:

  • Chcete provádět obecný objektově orientovaný vývoj. Je to klasický, staticky napsaný jazyk OOP.
  • Cílíte pouze na platformy Microsoft (stojí za to si uvědomit, že Microsoft efektivně naklonoval Javu k vytvoření C #, protože chtěl jazyk podobný Javě, který by lidi uzamkl Windows. Mohli použít Javu, ale to by lidem umožnilo snadno spouštět aplikace na jiných platformách ….)

C # je jazyk v různých ohledech hezčí než Java (lepší syntaxe pro vlastnosti, typy hodnot, reified generics atd.). Preferuji C # jako jazyk před Javou, ale ve velkém schématu věcí jsou to docela podobné jazyky a vhodné pro podobné aplikace.

Na druhou stranu má Java také některé velké výhody:

  • Obrovský open source ekosystém – knihovny pro Javu, které můžete získat zdarma, jsou od daleko nejlepší ze všech jazyků. Je těžké přeceňovat důležitost toho – z hlediska provádění věcí je Java velmi efektivní.
  • Nástroje – nástroje Java jsou podle mého názoru lepší než to, co můžete získat svět .Net . např. Maven (jakmile to zvládnete!) Je obzvláště působivý.
  • Udržovatelnost – Java existuje už nějakou dobu a byla úspěšná ve velkých společnostech právě proto, že je relativně stabilní a bylo vynaloženo velké úsilí na zpětnou kompatibilitu. Jednoduchá a mírně podrobná syntaxe také pomáhá Javě – je snazší číst a udržovat kód, pokud je kód velmi jasný a explicitní.
  • Nové jazyky – JVM má několik úžasných nových jazyků (Scala, Clojure , Groovy atd.), Které jsou budoucností platformy Java. Zde se děje velká část jazykových inovací a děje se to mnohem rychleji než v Javě nebo C #.

Java vs. C # je tedy docela blízký hovor a opravdu záleží na tom, zda chcete být v táboře Microsoft nebo v Open Source / kempu pro různé platformy.

Osobně mám raději Java, protože:

  • Ekosystém knihovny je podle mého názoru mnohem důležitější než skutečnost, že C # má hezčí syntaxi než Java
  • Z dlouhodobého hlediska chci, aby byl celý můj kód správně křížený -platformní a schopný běžet na velkých klastrech levných linuxových strojů v cloudu.
  • Clojure je právě teď IMHO nejslibnějším jazykem na světě, a pokud se budu držet platformy JVM, budu schopen do tran V průběhu času snadno vložte můj kód a dovednosti do Clojure.

C / C ++

C / C ++ je v zásadě úplně jiné zvíře. Nedoporučuji to dnes pro vývoj aplikací pro všeobecné použití z následujících důvodů:

  • Správa paměti – pro většinu programů pro všeobecné účely v dnešní době nechcete být správa vlastní paměti. Sběr odpadků v C # nebo Javě je pro vaši produktivitu a zdravý rozum mnohem lepší než kterákoli z explicitních technik správy paměti, které budete muset použít v C / C ++
  • Složitost – zejména C ++ je extrémně složitý jazyk. Jeho zvládnutí trvá dlouho a samotný kód může být také ďábelsky složitý. (Šablony C ++ jsou například obzvláště chlupaté ….)
  • Produktivita – většinou a všechno ostatní bude stejné, bude vám trvat déle, než budete dělat věci v C / C ++.

Je to však nepochybně skvělá volba v určitém omezeném počtu speciálních domén, zejména:

  • Operační systémy – pravděpodobně budete chtít používat C / C ++, pokud píšete operační systém.
  • Vývoj her – téměř vše nejlepší komerční herní enginy jsou C / C ++. Je to stále nejlepší volba, pokud vyvíjíte náročný titul AAA (C # a Java jsou naprosto v pořádku pro méně náročné / příležitostné hry)
  • Vysoce výkonné výpočty – optimalizovaný C / C ++ je pravděpodobně nejlepší způsob, jak vytvořit velmi vysoký výkonový kód. Pro většinu aplikací, které tuto úroveň optimalizace nevyžadují, to za to nestojí, ale v určitých doménách to může být nesmírně cenné (například vysokofrekvenční obchodování)
  • Hardwarový přístup – potřebujete přímý přístup přístup k hardwaru (např. pro vestavěný systém)

Takže C / C ++ je v zásadě skvělou volbou právě tehdy, pokud se zaměřujete na jednu z domén, kde je zvlášť vhodná .

Komentáře

  • Zmínil jste maven jako příklad lepších nástrojů pro javu. S tím ' nejsem nijak zvlášť famialr, ale při pohledu na dokumentaci vypadá Maven skrovně podobně jako nativní nástroj pro vytváření .NET. MSBuild. V čem je Maven lepší než MSBuild?
  • +! (jen proto, že mám jen jeden hlas): velmi dobře jste vysvětlili, proč je ekosystém Java lepší a proč byste neměli porovnávat pouze syntaxi jazyka C # vs Java. Java má více a lepších knihoven a nástrojů. V samotném jazyce Java se toho moc neděje, ale pro JVM se objevují nové velmi zajímavé jazyky, které jsou (IMO) mnohem zajímavější než C #. Neznám Clojure, ale Scala mi připadá velmi zajímavá: od začátku navržená jako OOP + FP.
  • proč si každý myslí, že je C ++ kód plný ruční správy paměti. Není to C, víte, RAII znamená, že téměř nikdy nebudete muset ručně přidělit / uvolnit paměť (časy, které děláte, jsou ty, kdy by vám jazyk jako C # byl k ničemu).
  • @gbjbaanb – pravděpodobně proto, RAII je pro správu paměti pro obecné účely nedostatečné. Není to v žádném případě ekvivalentní flexibilitě s plným systémem GC, jaký vidíte v Javě nebo C #. Jakmile překročíte hranice RAII, vrátíte se zpět do teritoria manuální správy paměti.
  • @mikera Chci jen poukázat na to, že i na platformě .NET existuje značný vývoj jazyků. Např. F # je elegantní funkční jazyk, který hladce integruje zbytek .NET, a Python se nedávno přenesl do .NET jako Iron Python (a dostal také pěkné IDE ! ).

Odpověď

I heard that syntactically they are almost the same. 

Syntakticky? Kdo dává létajícím opicím syntaxi? Syntaxe je dobrá pouze pro jednu věc: umožnění rychlejší migrace ze syntakticky podobných jazyků. A je to.

C # je mnohem lepší než Java. Zvažte jejich obecnou a funkční podporu programování – C # je daleko před Javou. Nemluvě o přetížení operátora a dalších dobrých věcech – C # je mnohem lepší. Neexistuje způsob, jak by Java mohla být považována za lepší než C #.

C ++ a C # je spíše soutěž. C ++ má neuvěřitelně otravný archaický kompilační model a spoustu starších nemocí from C, but it s templates are obrovly more powerful than generics, and it s source management approach are much more flexible and powerful in general, as using je úplné selhání a provede se rychleji.

Komentáře

  • Myslím, že by se mělo porovnat jak jazykové funkce, tak dostupnost jazyka na různých platformách. S C # one je uzamčen v Microsoftu, v Javě není: to ' je velká výhoda, přinejmenším pro vývojáře UNIX / Linux. OOP + FP jsou skvělé funkce, ale proč si dělat starosti s C #, pokud může používat Scalu, která běží na JVM a může komunikovat se starým kódem Java? Nikdy bych se nenaučil jazyk specifický pro platformu, pokud k tomu nejsem nucen.
  • @Giorgio: Projekt Mono neexistuje . Ale zadruhé, Microsoft se vlastně stará o jejich platformu – dávají jí pravidelné velké upgrady. Java stěží měla něco nového. Otázkou je také C # vs Java, ne CLR vs JVM.
  • @DeadMG: Pokud vím, nemohu přijmout žádný program C # vyvinutý pro Windows a vytvořit jej s Mono. Nejste CLR vs JVM? Otázkou je, proč lidé používají C # nebo Java. Aby lidé mohli používat jazyk, potřebují runtime a operační systém. Nemluvím o tom, že C # má více funkcí než Java, ale Java je mnohem přenositelnější: toto je faktor, který může ovlivnit přijetí jazyka. Ve skutečnosti se Java stále používá mnohem častěji než C #, i když jí chybí určité pokročilé funkce.
  • @Giorgio, můžete vzít jakýkoli program C # a vytvořit jej s Mono. Nelze použít určité knihovny (které stejně nejsou součástí jazyka C #). A Java není " mnohem přenosnější ". Můžete kódovat iOS v C #, ale ne například v Javě.
  • @Giogio, Mono je přinejmenším stejně přenosný jako JVM.

Odpověď

No C# má několik pěkných vestavěných funkcí, jako je LINQ a delegáti. Získává to nejlepší z obou světů – Java a C++. zde najdete úplné srovnání.

Ale líbí se mi Java svět lépe – mnohem více open source frameworků a běží na všech platformách. A neříkej mi o Mono – není to spolehlivá volba.

Komentáře

  • +1: " Ale líbí se mi svět Java mnohem lépe – mnohem otevřenější rámce zdrojů a běží na všech platformách. " Nechť ' s nadějí, že to Oracle nezmění!
  • Vysvětlení mysli, co ' není " spolehlivý " v Mono?
  • @Petar Minchev, není to nic jiného než vaše vlastní chyba. Musíte dodržovat pokyny pro přenositelnost a neměli byste používat nepřenosné knihovny – a tímto způsobem by jakákoli složitá aplikace spolehlivě fungovala s Mono. Věci jako WPF se nikdy nepřenesou.
  • @Petar Minchev, existuje mnoho nepřenosných Knihovny Java tam venku. Při přenositelnosti musíte být vždy opatrní, bez ohledu na to, jaký jazyk ' znovu používáte. A stejně tak jde o jazyky, nikoli o Knihovny třetích stran.
  • @Petar Minchev, GTK # je přenosný. Místo toho jej použijte.

Odpověď

Podle některých zdrojů (viz např. http://www.indeed.com/jobtrends ) C # je stále méně populární než Java a stejně populární jako C ++.

C # poskytuje funkce, které Java chybí, např přímá podpora určitých programovacích idiomů, jako jsou vlastnosti, styl funkčního programování atd. C # má vyšší úroveň abstrakce než C ++, což je výhoda, když je doba vývoje důležitější než rychlost programu.

Osobně stále dávám přednost světům Java / C ++. Jak řekl Petar Minchev, Java má více open-source frameworků a aplikací, běží všude, je méně svázána s konkrétním prodejcem a operačním systémem. C ++ má podobné výhody, i když kód často potřebuje úpravy přecházející z jedné platformy na druhou. Jelikož dávám přednost vývoji na Linuxu a podle mých znalostí nemohu mít plně rozvinutý C # na Linuxu, nikdy jsem se o C # opravdu nezajímal, protože moje programovací potřeby jsou pokryty v C, C ++, Java, Scala.

Na druhou stranu pro mnoho vývojářů není spojení s konkrétním prodejcem problém: Microsoft má dominantní postavení na trhu operačních systémů a C # poskytuje spoustu pracovních příležitostí. Mnoho vývojářů IMO proto používá C #, protože kromě jazyka bohatého na funkce je to také dobrá investice.

Komentáře

  • " V systému Linux nemohu mít plně rozvinutý C # " – mohl byste to podrobněji rozvinout? Myslíte tím, že úplný rámec .Net není k dispozici, protože jsem ' nenarazil na žádné problémy se samotným jazykem C # ( nebo F #) v Linuxu?
  • @wawa: Pokud vím, rámec .Net odpovídá JDK a rámec .Net je k dispozici pouze pro Windows, zatímco JDK je k dispozici pro několik OS ' s. Pokud to není správné, mohu upravit svou odpověď (a změnit také svůj názor).
  • Myslím, že bližší analogií by byla knihovna základních tříd JDK. BCL má standardizované a nestandardizované díly. Mono projekt implementuje standardizované i mnoho nestandardizovaných kusů.
  • @wawa: Děkuji za informaci. Zvažuji možnost vyzkoušet C # pomocí Mono. Přesto stále mám docela silný pocit, že C # je mnohem silněji svázán s Microsoftem než Java s Oracle (nebo se Sunem v minulosti).

Odpověď

A co " který rámec pro vývoj softwaru, který obsahuje programovací jazyk " jeho lepší?

Zapomněli jste zahrnout další věci, například " prostředí ", se kterým budete pracovat.

  1. Budete pracovat pouze pro operační systém Windows, ale nemusí to být nízká úroveň a spousta paměti a dalších zdrojů?

    Vybrat .NET jako framework přes Windows a použijte C #.

  2. Budete pracovat pouze pro Windows, ale nemusí to být nízká úroveň, ALE, ne? máte spoustu zdrojů?

    Vyberte rámec Delphi (a programovací jazyk Object Pascal Delphi nebo programovací jazyk Lazarus Object Pascal)

  3. Je vaše aplikace vyžadována podporovat sedm ral platformy, jako hra, v různých mobilních zařízeních?

    Vyberte si Java Framework a programovací jazyk Java.

  4. Je to Linux s grafikou KDE rozhraní?

    Vyberte QT framework s C ++

  5. Je to Linux s Gnome jako grafickým rozhraním?

    Vyberte GObject / GLib framework , s C ++

  6. Budete pracovat s mnoha nízkoúrovňovými operacemi, jako je vývoj ovladačů?

    Prostý C nebo C ++ se používá pro několik operačních systémů Systémy se standardními knihovnami jako rámec.

Jen moje 2 centy.

Komentáře

  • I ' si nejsem jistý 3. Chytré telefony jsou dnes velmi populární a AFAIK, všechny podporují C # v nějaké formě, ale pouze Android podporuje Javu.
  • Není ' t Delphi mrtvý? 🙂
  • @ šljaker Ne, ale není ' t velmi populární tyto dny.
  • @svick: To je lež. Kromě Androidu existuje Java také v nějaké formě na iOS, Symbian, WinMo, Blackberry, Maemo a WebOS (tj. Všechno, na čem záleží nebo na čem záleží; nedělejte si s ' i menší platformy). Android, Blackberry a Symbian oficiálně podporuje Javu jako možnost vývoje; Sun dříve podporoval Javu na iOS, i když to Apple nemá rád. Java je primární vývojový jazyk v telefonech Android a Blackberry. Nemohu ' říci totéž s C #, AFAICT je ' oficiálně podporován pouze na WinMo.

Odpověď

Pokud provádíte vyhledávání, pravděpodobně narazíte na diskuzi o nejlepších programovacích jazycích. Zde je jeden z výsledků vyhledávání – http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html – Java se stále jeví jako nejpopulárnější jazyk.

Java se pokusila odstranit některé nedostatky C ++ (a zjednodušit život programátorů pro aplikace v reálném čase a nekritické aplikace). C #, který přišel na večírek, se vyhnul některým nedostatkům jazyka Java. C # dosáhlo velkého pokroku (protože společnost Microsoft má nad ním velkou kontrolu), zatímco pokroky v Javě byly po značnou dobu blokovány kvůli konfliktu mezi zúčastněnými stranami.

Odpověď

Několik věcí, které ještě nebyly zmíněny:

C # je lepší než C ++, protože:

Odstraňuje se soubory záhlaví, což znamená velkou jednoduchost.

C # je lepší než Java, protože:

Podporuje jak referenční typ (třída), tak hodnotový typ (struktura) definovaný uživatelem typy, které, pokud víte, co děláte, mohou přinést významné výhody výkonu.

Podporuje delegáty, které jsou jako rozhraní pro jednu metodu, čímž výrazně zjednodušuje kódování často se vyskytujících konstrukcí, které zahrnují objekty pro jednu metodu.

Komentáře

  • Můžete vysvětlit, jakým způsobem mohou mít typy referenčního i hodnotového typu výhody výkonu v C #?
  • Například pokud chcete mít řadu záznamů V Javě nemáte jinou možnost, než popsat svůj záznam pomocí třídy, takže vaše pole bude pole odkazů na velké množství samostatně přidělených objektů. V C # můžete popsat svůj záznam pomocí struktury, takže vaše pole bude jen jedna souvislá oblast paměti obsahující vaše struktury jednu po druhé, stejně jako v C.
  • Jako další příklad, pokud chcete definovat malý nový typ (typ, který by se vešel do strojového slova), nemusíte pro něj definovat novou třídu; jednoduše z toho můžete udělat strukturu, takže bude dodržovat sémantiku hodnot. Předávání takových struktur nebude nákladnější než předávání odkazů na objekty, ale budete mít tu výhodu, že nebudete přidělovat, budovat a shromažďovat žádné objekty.
  • Rozumím. Třídy jsou tedy instancovány na haldě a jsou přístupné prostřednictvím odkazů, zatímco struktury jsou instancovány na zásobníku (?)
  • téměř správné. Jedinou nepřesností v tomto prohlášení je, že struktura bude nalezena na haldě, pokud je vložena do jiného objektu, nebo pokud je uvnitř řady struktur. A také se najde na haldě, pokud se někdy dostane do rámečku, přesně stejným způsobem, jako jsou typy hodnot v rámečku v Javě.

Odpovědět

Měli byste zvolit nejlepší jazyk pro vaše očekávané prostředí a vaši odbornost.

Pokud pracujete v prostředí pouze Microsoft, vyberte C #. Zatímco C # je standardizován podle ISO / IEC 23270: 2003, verze Microsoftu zůstává jedinou kompletní implementací. Několik klíčových částí jazyka není standardem pokryto, a proto podléhají patentům společnosti Microsoft. Nikdo jiný nebude implementovat zcela kompatibilní verzi jazyka pro jiné systémy, takže ve skutečnosti jste dodavatelem uzamčeným pro Microsoft Windows a .Net, pokud používáte jazyk. Pokud hledáte dovednosti, které byste mohli použít na mobilním trhu, měli byste se podívat do jiného jazyka.

Java funguje, ale má značnou režii, částečně kvůli funkcím, jako je odvoz odpadu. Java také není standardizována ISO / IEC, takže nemáte žádné záruky, pokud přepnete platformy a verze Javy, pouze nejlepší úmysly Sun / Oracle. Pokud nakonec plánujete pracovat s Androidem, je to určitě způsob, jak jít . Programování systému Android je v zásadě Java s několika změnami.

C ++ je standardizováno a téměř všichni překladači se řídí mezinárodním standardem, takže máte zaručené chování, ale jazyk vás před sebou nechrání. Musíte provést čištění a kontrolu přetečení sami. To není těžké. Programátoři C / C ++ to dělají už mnoho let. Apple používá Objective C pro všechno, takže pokud se chcete zaměřit na Apple, doporučuji to místo toho zkusit.

Pokud zjistíte, že v určitém okamžiku opouštíte Windows, navrhuji naučit se jak C / C ++, tak Java – obojí je v současné době prodejné.

Odpověď

Ve vztahu k C ++ vs C # (protože nejsem dostatečně zdatný v Javě) mi zde chybí schopnost přístupu k nízkoúrovňovým věcem ve Windows. Například nemůžete vyvinout nativní ovladač zobrazení v C # (zatím), ale můžete s C ++. Tím se C ++ nezlepší. Vidím C ++ versus C # jako Assembly versus C.

C # je v mém zobrazit mnohem efektivněji, pokud se podíváte na čas potřebný ke skutečné implementaci funkce. Trest výkonu běhového prostředí .Net je zanedbatelný pro 99% vyvinutých aplikací. Může to mít význam, pokud používáte těsnou smyčku, ano ve všech ohledech, ale většinou je aplikace nečinná a čeká na jakýkoli druh vstupu, signálu nebo přerušení (vstup / výstup disku, kliknutí na tlačítko, síť, dokončení animace).

Knihovna CLR se všemi jeho funkce má anothe r velká výhoda. Když jsem trénoval C # pro mladší vývojáře, většina z nich řekla, že se jim líbí logická konvence pojmenování tříd, členů a jmenných prostorů. Nalezení funkce metody bylo logické napříč sadou SDK, něco, na čem byla Visual Basic 5 vážně chybná. To jim při přijetí knihovny ohromně pomohlo. Poté, co se naučíte syntaxi jazyka, je získání nové knihovny významné pro získání dobrého pochopení jakékoli sady SDK. Ušetří vám to znovuobjevení kola.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *