Af hvilke grunde skal jeg vælge C # frem for Java og C ++? [lukket]

Lukket . Dette spørgsmål er meningsbaseret . Det accepteres i øjeblikket ikke svar.

Kommentarer

  • Som skrevet var spørgsmålet et lærebogeksempel på ikke konstruktivt " hvilket sprog er bedre? " spørgsmål, der ikke er emne her. Jeg ' har forsøgt at gøre det mere konstruktivt med en redigering, da det faktisk fik gode, gennemtænkte svar. Vær stadig opmærksom på FAQ og dette blogindlæg , når du stiller spørgsmål af denne art .
  • Lad mig tilføje nogle skarpere genstande. .NET har en veldefineret DOM ( f.eks. CodeDOM ) for sit sprog, og det er derfor meget enklere og mere effektivt at generere ting dynamisk ved kørsel. Dette kan også være nyttigt som en infrastrukturel kapacitet. Typesystemet har også en 1-til-1-match med alle indfødte W3-typer. I sin kerne blev W3 og andre interops bagt ind i sproget fra starten. For andre sprog blev disse bekymringer netop boltet på og giver mange udfordringer for dem. Hvis du ' også interopererer med mange sprog og / eller protokoller, så er .NET også meget stærk
  • Hej, JoeGeeky, tilføj din kommentar som et svar på spørgsmålet.
  • De virkelige spørgsmål er: Af hvilke grunde skal jeg vælge Nemerle, F * og F # frem for C #? (dvs. alle tre sprog er fra MS og alle tre er bedre)
  • Jeg tror virkelig ikke ' ikke tænke på noget udsagn af genren " sprog / platform X sammenlignet med sprog / platform Y er ALTID bedre " er gyldig, og jeg tror også, at det for enhver X og Y let kan blive ugyldiggjort for visse sammenhænge. Hvad ' er pointen med dette spørgsmål?

Svar

Spørgsmålet skal være " Hvilket sprog er bedre egnet til moderne, typisk applikationsudvikling? ".

Rediger : Jeg adresserede nogle af kommentarerne nedenfor. En lille bemærkning: Overvej at når du har mange ting naturligt, som idiomer, er det en stor forskel end at implementere eller downloade og bruge dem selv hver gang. Næsten alt kan implementeres på et hvilket som helst af disse sprog. Spørgsmålet er – hvad sprogene giver dig oprindeligt.

Så fra toppen af mit hoved (nogle argumenter gælder for begge sprog) …

C # er bedre end C ++ i det:

  • Den har indfødt affaldssamling.
  • Det giver dig mulighed for at behandle klassemetoder “signaturer som gratis funktioner (dvs. ignorere den statisk typede this pointerargument), og dermed skabe mere dynamiske og fleksible relationer mellem klasser. rediger hvis du ikke ved hvad dette betyder, så prøv at tildele en medlemsmetode, der returnerer ugyldig og accepterer ugyldighed til en void (*ptr)() variabel. C # delegater bærer this markøren med sig, men brugeren behøver ikke altid være opmærksom på det. De kan bare tildele en void() metode til enhver klasse til enhver anden void() delegat.
  • Det har en enorm standard bibliotek med så mange nyttige ting, der er velimplementerede og nemme at bruge.
  • Det giver mulighed for både administrerede og indbyggede kodeblokke.
  • Versionversion af montage afhjælper let DLL helvede problemer. / li>
  • Du kan indstille klasser, metoder og felter til at være samle-interne (hvilket betyder, at de er tilgængelige overalt i den DLL, de er deklareret i, men ikke fra andre samlinger).

C # er bedre end Java ved at:

  • I stedet for en masse støj (EJB, private statiske klasseimplementeringer osv.) får du elegante og venlige native konstruktioner som Egenskaber og begivenheder .
  • Du har ægte generics (ikke den dårlige casting-vittighed, som Java kalder generics), og du kan udføre refleksion over dem.
  • Den understøtter indfødte ressourcehåndteringsidiomer (using udsagn). Java 7 vil også støtte dette, men C # har haft det i længere tid.
  • Det har ikke kontrolleret undtagelser 🙂 (diskutabelt om det er godt eller dårligt)
  • Det er dybt integreret med Windows, hvis det er det, du vil have.
  • Det har Lambdas og LINQ og understøtter derfor en lille smule funktionel programmering.
  • Det giver mulighed for både generisk kovarians og kontravarians eksplicit.
  • Det har dynamiske variabler, hvis du vil have dem.
  • Bedre enumerationsunderstøttelse med yield udsagn.
  • Det giver dig mulighed for at definere nye værdityper (eller ikke-reference) typer.

Rediger – Adressering af kommentarer

  • Jeg sagde ikke, at C ++ ikke understøtter native RAII. Jeg sagde, at Java ikke har det (du skal eksplicit prøve / endelig). C ++ har automatiske markører, som er gode til RAII, og (hvis du ved hvad du laver) kan også erstatte affaldsopsamling.
  • Jeg sagde ikke noget om emulering gratis funktioner. Men for eksempel hvis du har brug for at få adgang til et felt ved hjælp af en this -markør, og binde metoden, der gør det, til en generisk funktionsmarkør (dvs. ikke i samme klasse), så er der simpelthen ingen naturlig måde at gøre det på. I C # får du gratis. Du behøver ikke engang at vide, hvordan det fungerer.
  • Ved at " behandler medlemsmetoder som gratisfunktioner " Jeg mente, at du for eksempel ikke “kan binde en medlemsmetode til en gratis funktionssignatur, fordi medlemsmetoden " hemmeligt " har brug for this -markøren.
  • using -erklæringen, selvfølgelig sammen med ID-engangsindpakninger, er et godt eksempel på RAII. Se dette link . Overvej at du ikke har brug for RAII så meget i C # som du gør i C ++, fordi du har GC. I de specifikke tidspunkter, du har brug for det, kan du eksplicit bruge using Erklæring. En anden lille påmindelse: frigørelse af hukommelse er en dyr procedure. GC har deres præstationsfordel i mange tilfælde (især når du har masser af hukommelse). Hukommelse bliver ikke lækket, og du bruger ikke en masse tid på deallocating. Hvad mere er, allokering er også hurtigere, da du ikke tildeler hukommelse hver gang, kun en gang imellem. Opkald til new øger simpelthen en sidste objekt-markør.
  • " C # er værre, fordi den har affaldssamling ". Dette er faktisk subjektivt, men som jeg sagde øverst, for mest moderne, typisk applikationsudvikling er affaldsindsamling et helvede af en fordel.
    I C ++ er dine valg enten manuelt at styre din hukommelse ved hjælp af new a nd delete, hvilket empirisk altid fører til fejl her og der, eller (med C ++ 11) kan du bruge automatiske markører indbygget, men husk at de tilføjer lots og masser af støj til koden. Så GC har stadig en kant der.
  • " Generics er langt svagere end skabeloner " – jeg bare ikke ” t ved, hvor du har det fra. Skabeloner kan have deres fordele, men efter min erfaring er begrænsninger, generisk parametertypekontrol, kontrast og kovarians meget stærkere og elegante værktøjer. Styrken i skabeloner er, at de lader dig lege med sproget a bit, som måske er sejt, men også forårsager masser af hovedpine, når du vil fejle noget. Så alt i alt har skabeloner deres gode funktioner, men jeg finder generiske stoffer mere praktiske og rene.

Kommentarer

  • Og hvis du stadig vil have en Garbage Collector til C ++, kan du downloade en .
  • lad os fortsætte denne diskussion i chat
  • En anden vigtig funktion i C # sammenlignet med Java af ydeevneårsager er " struktur ", en type objekt, der kan lagres på stakken (eller i CPU-registre, i særlige tilfælde) eller indlejret i andre bunkeobjekter. De bruges ofte til små objekter med 1-4 felter, såsom X, Y-koordinatpar.
  • @LokiAstari Mind forklarer? Så længe du husker at afmelde begivenhedshåndterere og bruge bortskaffelsesmønsteret på klasser, der indeholder indfødte indpakninger, vil du ' være i orden. At ' er meget mindre at vide og huske end hukommelsesstyring i C ++.
  • -1 da jeg mangler sektionerne " C ++ er bedre end C # ved, at … " og " Java er bedre end C # … ". Jeg tror ikke, at C # er overlegen på alle områder, så et svar uden disse to sektioner mangler sandsynligvis nogle vigtige oplysninger.

Svar

Miljøet

.NET Framework og Windows-klienter

Windows er det dominerende operativsystem på klientcomputere. De bedste GUI-rammer til Windows-applikationer er Winforms og WPF sammen med .NET Framework . Det bedste programmeringssprog til at arbejde med .NET Framework og dets APIer er C # . Java er ikke et alternativ til dette.Og C ++ er et ældre sprog uden automatisk hukommelsesadministration. C # svarer til C ++ men har automatisk hukommelsesadministration, og du behøver ikke arbejde med markører, hvilket gør dig mere produktiv. C ++ kan stadig være den bedste mulighed i nogle tilfælde, men ikke for formintensive databaseapplikationer, der er almindelig i forretning.

IIS og Windows Server

Hvis du er vant til at arbejde i Windows-miljøet og med C #, skal du bruge den mindste investering for at lære IIS til serverprogrammering og Windows Server til grundlæggende administration.

Active Directory og Windows Server

Hvis du udvikler software, der skal implementeres i virksomhedsnetværk, er det sandsynligt, at de bruger et Windows-centreret miljø ved hjælp af en Windows Server med Active Directory. I et sådant miljø er det let at integrere og implementere en løsning lavet i C # og .NET Framework .

Personligt er jeg en Java-udvikler, ikke en C # -udvikler, men jeg arbejder med internettet. Jeg skifter til C #, hvis jeg udvikler netværksapplikationer til Windows-netværk. Men jeg foretrækker Java til Linux-baserede webservere. Jeg ville vælge C ++ til indlejrede systemer, hvis jeg ikke vandt mange afhængigheder.

Ja, C # er et bedre sprog med mere moderne funktioner end C ++ og Java, men det er ikke det vigtigste ved valg af C # .

Oversigt

Miljøet til din software er vigtigst for valg C # . Hvis du arbejder i et miljø med Windows-klienter, Windows-servere, Active Directory, IIS og måske SQL Server så er C # det bedste sprog med .NET Framework .

Hvis du arbejder i et Unix-miljø med f.eks. webtjenester, ville Java være mit valg. Og hvis du arbejder med indlejrede systemer eller skal integreres med hardwareenheder, ville C ++ være et godt valg.

Kommentarer

  • Absolut – det er derfor, jeg bruger C # ikke rigtig nogen anden grund
  • Du kan helt sikkert bruge .NET på andre platforme via Mono, MonoTouch og MonoDroid, men mine benchmarks fandt, at Mono var betydeligt langsommere end .NET til Windows, og Microsoft ' s egen Compact Framework er ekstremt langsom i Windows CE: codeproject.com/KB/cross-platform/BenchmarkCppVsDotNet.aspx … selvfølgelig er WPF kun tilgængelig på Windows (men jeg har ikke ' kan ikke lide det alligevel.)
  • Hvilke afhængigheder mener du med " Jeg vælger C ++ til indlejrede systemer, hvis jeg ikke ' t vandt ' t mange afhængigheder. " Mener du java-bibliotekerne?
  • @ Puckl ja, men mest jvm / jre.
  • " Hvis du arbejder i et Unix-miljø med f.eks. webtjenester " der er nogle andre sprog & rammer, der kan overvejes: rubin, Python, node.js osv.

Svar

C # og Java

C # er et meget godt sprog, hvis:

  • Du vil lave objektorienteret udvikling til generelle formål. Det er et klassisk, statisk skrevet OOP-sprog.
  • Du målretter kun mod Microsoft-platforme (det er værd at huske, at Microsoft effektivt klonede Java for at oprette C #, fordi de ønskede et Java-lignende sprog, der ville låse folk inde i Windows. De kunne have brugt Java, men det ville have gjort det muligt for folk let at køre applikationer på andre platforme ….)

C # som sprog er pænere end Java på forskellige måder (bedre syntaks for egenskaber, værdityper, reified generics osv.). Jeg foretrækker C # som sprog frem for Java, men i den store ordning af ting er de ret ens sprog og egnede til lignende applikationer.

På den anden side har Java også nogle store fordele:

  • Kæmpe open source-økosystem – bibliotekerne til Java, som du kan få gratis, er by langt det bedste af ethvert sprog. Det er svært at overdrive vigtigheden af dette – fra det punkt at få tingene gjort, er Java meget effektiv.
  • Værktøjer – Java-værktøjerne er efter min mening bedre end hvad du kan få .Net-verdenen . for eksempel. Maven (når du først har mestret det!) Er særligt imponerende.
  • Vedligeholdelse – Java har eksisteret et stykke tid og har haft succes i store virksomheder, netop fordi det er relativt stabilt, og der er lagt en stor indsats i bagudkompatibilitet. Den enkle og lidt detaljerede syntaks hjælper også Java her – det er lettere at læse og vedligeholde kode, hvis koden er meget klar og eksplicit.
  • Nye sprog – JVM har nogle fantastiske nye sprog (Scala, Clojure , Groovy osv.), Der er Java-platformens fremtid. Det er her, meget af sproginnovationen sker, og det sker meget hurtigere end i Java eller C #.

Så Java vs C # er et ret tæt opkald, og det kommer virkelig ned til, om du vil være i Microsoft-lejren eller Open Source / cross-platform-lejren.

Personligt foretrækker jeg Java, fordi:

  • Biblioteksøkosystemet er efter min mening meget vigtigere, at det faktum, at C # har pænere syntaks end Java
  • I det lange løb vil jeg have al min kode til at være korrekt krydset -platform og i stand til at køre på store klynger af billige linux-maskiner i skyen.
  • Clojure er IMHO det mest lovende sprog i verden lige nu, og hvis jeg holder mig til JVM-platformen, vil jeg være i stand til at tran del min kode og mine færdigheder let ind i Clojure over tid.

C / C ++

C / C ++ er grundlæggende et helt andet dyr. Jeg vil ikke anbefale det til udvikling af applikationer til generelle formål i dag af følgende årsager:

  • Hukommelsesadministration – til programmering af de fleste generelle formål i dag ønsker du ikke at være administrere din egen hukommelse. Affaldssamling i C # eller Java er meget bedre for din produktivitet og sundhed end nogen af de eksplicitte hukommelsesadministrationsteknikker, du bliver nødt til at bruge i C / C ++
  • Kompleksitet – C ++ især er en ekstremt komplekst sprog. Det tager lang tid at mestre, og selve koden kan også være svær kompleks. (C ++ skabeloner er for eksempel særligt hårede ….)
  • Produktivitet – det meste af tiden og alt andet at være lige vil det tage længere tid at få tingene gjort i C / C ++.

Det er dog utvivlsomt et godt valg inden for et bestemt begrænset antal specielle domæner, især:

  • Operativsystemer – du vil sandsynligvis bruge C / C ++, hvis du skriver et operativsystem.
  • Spiludvikling – næsten alle t de bedste kommercielle spilmotorer er C / C ++. Det er stadig det bedste valg, hvis du udvikler en krævende AAA-titel (C # og Java er perfekt til mindre krævende / afslappede spil)
  • Højtydende computing – optimeret C / C ++ er sandsynligvis den bedste måde at Opret meget højtydende kode. For de fleste applikationer er dette optimeringsniveau ikke værd at gøre, men i visse domæner kan det være ekstremt værdifuldt (f.eks. højfrekvent handel)
  • Hardwareadgang – Du har brug for direkte adgang til hardwaren (f.eks. til et integreret system)

Så dybest set er C / C ++ et godt valg, hvis og kun hvis du er fokuseret på et af domænerne, hvor det er særligt velegnet .

Kommentarer

  • Du nævner maven som et eksempel på bedre værktøjer til java. Jeg ' er ikke særlig famialr med det, men når man ser på dokumentationen, ser Maven lidt ud som det oprindelige. Net-build-værktøj MSBuild. Hvad gør Maven bedre end MSBuild?
  • +! (bare fordi jeg kun har én stemme): du har forklaret meget godt, hvorfor Java-økosystemet er bedre, og hvorfor man ikke kun skal sammenligne syntaksen for C # vs Java. Java har flere og bedre biblioteker og værktøjer. Der sker ikke meget på selve Java-sproget, men nye meget interessante sprog vises for JVM, der er (IMO) meget mere interessante end C #. Jeg kender ikke Clojure, men jeg finder Scala meget interessant: designet til at være OOP + FP fra starten.
  • hvorfor er det, at alle synes, at C ++ -koden er fuld af manuel hukommelsesstyring. Det er ikke C du ved, RAII betyder, at du næsten aldrig behøver at allokere / frigøre hukommelse manuelt (de gange du gør er dem, hvor et sprog som C # ville være ubrugeligt for dig).
  • @gbjbaanb – sandsynligvis fordi RAII er utilstrækkelig til generel hukommelsesstyring. Det svarer på ingen måde i fleksibilitet til et fuldt GC-system, som du ser i Java eller C #. Så snart du går ud over RAIIs grænser, er du tilbage i manuelt hukommelsesadministrationsområde.
  • @mikera Vil bare påpege, at der også er en hel del sprogudvikling på .NET-platformen. For eksempel. F # er et pænt funktionelt sprog, der glat integrerer resten af .NET, og Python blev for nylig porteret til .NET som Iron Python (og fik en pæn IDE også! ).

Svar

I heard that syntactically they are almost the same. 

Syntaktisk? Hvem giver flyvende aber om syntaks? Syntaks er kun god til én ting: tillader hurtigere migration fra syntaktisk lignende sprog. Det er det.

C # er langt bedre end Java. Overvej deres generiske og funktionelle programmeringsstøtte – C # ligger langt foran Java. For ikke at nævne operatørens overbelastning og andre gode ting – C # er langt bedre præsenteret. Der er ingen måde, at Java muligvis kan betragtes bedre end C #.

C ++ og C # er mere en konkurrence. C ++ har en utrolig irriterende arkaisk kompilationsmodel og en masse arv sygdomme fra C, men skabelonerne er langt mere magtfulde end generiske, og det er ressourcehåndteringsmetoder generelt mere fleksible og kraftfulde, da using er en komplet fiasko , og det udføres hurtigere.

Kommentarer

  • Jeg synes, man skal sammenligne både sprogfunktioner og tilgængeligheden af et sprog på forskellige platforme. Med C # one er låst inde med Microsoft, med Java er man ikke: at ' er en stor fordel, i det mindste for UNIX / Linux-udviklere. OOP + FP er seje funktioner, men hvorfor gider C # hvis du kan bruge Scala, som kører på JVM og kan grænseflade med ældre Java-kode? Jeg ville aldrig lære et platformsspecifikt sprog, medmindre jeg er tvunget til det.
  • @Giorgio: Mono-projektet findes . Men for det andet tager Microsoft sig faktisk af deres platform – de giver det regelmæssige store opgraderinger. Java har næppe haft noget nyt. Spørgsmålet handler også om C # vs Java, ikke CLR vs JVM.
  • @DeadMG: Så vidt jeg ved, kan jeg ikke tage noget C # -program udviklet på Windows og bygge det med Mono. Ikke CLR vs JVM? Spørgsmålet handler om, hvorfor folk bruger C # eller Java. For at folk skal bruge et sprog, har de brug for en runtime og et operativsystem. Jeg diskuterer ikke om, at C # har flere funktioner end Java, men Java er meget mere bærbart: dette er en faktor, der kan påvirke vedtagelsen af et sprog. Faktisk bruges Java stadig meget oftere end C #, selvom det mangler visse avancerede funktioner.
  • @Giorgio, du kan tage ethvert C # -program og bygge det med Mono. Du kan ikke bruge bestemte biblioteker (som alligevel ikke er en del af C # -sproget). Og java er ikke " meget mere bærbar ". Du kan kode for iOS i C #, men ikke for eksempel i Java.
  • @Giogio, Mono er mindst lige så bærbar som JVM.

Svar

C# har nogle flotte indbyggede funktioner som LINQ og delegerede. Det får det bedste fra begge verdener – Java og C++. Se her for en fuld sammenligning.

Men jeg kan godt lide Java verden bedre – meget mere open source-rammer, og det kører på alle platforme. Og fortæl mig ikke om Mono – det er ikke en pålidelig mulighed.

Kommentarer

  • +1: " Men jeg kan godt lide Java-verdenen – meget mere open source-rammer, og den kører på alle platforme. " Lad ' håber Oracle ændrer ikke dette!
  • Tænk på at forklare, hvad ' ikke er " pålidelig " i Mono?
  • @Petar Minchev, det er intet andet end din egen skyld. Du skal følge retningslinjerne for bærbarhed, og du bør ikke brug ikke-bærbare biblioteker – og på denne måde vil enhver kompleks applikation køre pålideligt med Mono. Ting som WPF vil aldrig blive portet.
  • @Petar Minchev, der er mange ikke-bærbare Java-biblioteker derude. Du skal altid være forsigtig med bærbarhed, uanset hvilket sprog du ' bruger. Og alligevel er spørgsmålet om sprogene, ikke de e tredjepartsbiblioteker.
  • @Petar Minchev, GTK # er bærbar. Brug det i stedet.

Svar

Ifølge nogle kilder (se f.eks. http://www.indeed.com/jobtrends ) C # er stadig mindre populær end Java og lige så populær som C ++.

C # indeholder funktioner, som Java mangler, for eksempel direkte support til visse programmeringsidiomer som egenskaber, funktionel programmeringsstil osv. C # har et højere abstraktionsniveau end C ++, hvilket er en fordel, når udviklingstid er vigtigere end programmets hastighed.

Personligt foretrækker jeg stadig Java / C ++ -verdenen. Som Petar Minchev sagde, har Java flere open source-rammer og applikationer, den kører overalt, er mindre bundet til en bestemt leverandør og et operativsystem. C ++ har lignende fordele, selvom kode ofte har brug for tilpasninger, der går fra en platform til en anden. Da jeg foretrækker at udvikle på Linux, og efter min viden ikke kan have fuldt udviklet C # på Linux, fik jeg aldrig en reel interesse i C #, fordi mine programmeringsbehov er dækket af C, C ++, Java, Scala.

På den anden side er det ikke et problem for mange udviklere, der er bundet til en bestemt leverandør: Microsoft har en dominerende stilling på operativsystemmarkedet, og C # giver masser af jobmuligheder. Derfor vedtager IMO mange udviklere C #, fordi det ud over at være et funktionsrige sprog også er en god investering.

Kommentarer

  • " Jeg kan ikke have fuldt ud udviklet C # på Linux " – Kunne du uddybe dette? Mener du, at den fulde .Net-ramme ikke er ' t tilgængelig, fordi jeg ikke har ' ikke løber ind i problemer med selve C # -sproget eller F # for den sags skyld) på Linux?
  • @wawa: Efter min viden svarer .Net-rammen til JDK, og. Net-rammen er kun tilgængelig for Windows, mens JDK er tilgængelig for flere OS ' s. Hvis dette ikke er korrekt, kan jeg redigere mit svar (og ændre min mening også).
  • Jeg tror, at en nærmere analogi ville være Base Class Library til JDK. BCL har standardiserede og ikke-standardiserede dele. Monoprojektet implementerer såvel standardiserede som meget af ikke-standardiserede stykker.
  • @wawa: Tak for informationen. Jeg overvejer at prøve C # med Mono. Alligevel har jeg stadig en ret stærk fornemmelse af, at C # er meget stærkere bundet til Microsoft, end Java er til Oracle (eller tidligere i Sun).

Svar

Hvad med " Hvilken ramme om softwareudvikling, der inkluderer et programmeringssprog " dens bedre?

Du har glemt at medtage andre ting som f.eks. " miljøet " du vil arbejde med.

  1. Vil du kun arbejde for Windows OS, men behøver ikke at være lavt niveau og have meget hukommelse og andre ressourcer?

    Vælg .NET som ramme over Windows, og brug C #.

  2. Skal du kun arbejde for Windows, men behøver ikke at være lavt niveau, MEN ikke, t har mange ressourcer?

    Vælg Delphi Framework (og Object Pascal Delphi programmeringssprog eller Lazarus Object Pascal programmeringssprog)

  3. Er din app påkrævet? at støtte seve ral platforme, som et spil, i forskellige mobiltelefoner?

    Vælg Java Framework og Java programmeringssprog.

  4. Er det Linux med KDE som grafik interface?

    Vælg QT-ramme med C ++

  5. Er det Linux med Gnome som grafisk interface?

    Vælg GObject / GLib-ramme , med C ++

  6. Vil du arbejde med mange lavt niveau operationer, som at udvikle drivere?

    Almindelig C eller C ++ bruges til flere operativsystemer Systemer med standardbiblioteker som en ramme.

Bare mine 2 cent.

Kommentarer

  • Jeg ' er ikke sikker på 3. Smartphones er meget populære i dag og AFAIK, alle understøtter C # i en eller anden form, men kun Android understøtter Java.
  • Er ikke ' t Delphi død? 🙂
  • @ šljaker Nej, men er ikke ' t meget populære tesedage.
  • @svick: Det er en løgn. Bortset fra Android findes Java også i en eller anden form på iOS, Symbian, WinMo, Blackberry, Maemo og WebOS (dvs. alt, hvad der betyder noget eller stadig betyder noget; don ' t får mig i gang med endnu mindre platforme). Android, Blackberry og Symbian understøtter officielt Java som udviklingsmulighed; Sun plejede at understøtte Java på iOS, selvom Apple ikke har lyst til det. Java er det primære udviklingssprog i Android- og Blackberry-telefonen. Jeg kan ' ikke sige det samme med C #, AFAICT det ' s understøttes kun officielt på WinMo.

Svar

Hvis du foretager en søgning, vil du sandsynligvis snuble over diskussioner om de bedste programmeringssprog. Her er et af søgeresultaterne – http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html – Java synes stadig at være det mest populære sprog.

Java forsøgte at fjerne nogle af manglerne ved C ++ (og gøre programmørernes liv enklere for applikationer, der ikke er i realtid og ikke-kritiske). C # som sidstnævnte til festen undgik nogle af manglerne ved Java-sproget. C # har gjort store fremskridt (da Microsoft har meget kontrol over det), mens fremskridt i Java blev blokeret i en betydelig periode på grund af konflikt mellem dets interessenter.

Svar

Et par ting, der ikke allerede er nævnt:

C # er bedre end C ++, fordi:

Det fjerner med header-filer, hvilket oversættes til meget enkelhed.

C # er bedre end Java, fordi:

Det understøtter både referencetype (klasse) og værditype (struct) brugerdefineret typer, som, hvis du ved hvad du laver, kan give betydelige ydelsesfordele.

Det understøtter delegerede, der er som grænseflader med en enkelt metode, hvilket i høj grad forenkler kodningen af hyppigt forekommende konstruktioner, der involverer objekter med en enkelt metode.

Kommentarer

  • Kan du forklare på hvilken måde at have både referencetype og værditype kan give ydelsesfordele i C #?
  • Hvis du f.eks. vil have en række poster , i Java har du ingen anden mulighed end at beskrive din post ved hjælp af en klasse, så din matrix vil være en række referencer til et væld af separat tildelte objekter. I C # kan du beskrive din post ved hjælp af en struct, så din array vil være et enkelt kontinuerligt hukommelsesområde, der indeholder dine strukturer efter hinanden, ligesom i C.
  • Som et andet eksempel, hvis du vil for at definere en lille ny type (en type, der passer ind i et maskinord), behøver du ikke definere en ny klasse for den; du kan simpelthen gøre det til en struktur, så det vil adlyde værdisemantik. At videregive sådanne strukter vil ikke være dyrere end at videregive referencer til objekter, men du vil have fordelen ved ikke at allokere, konstruere og affaldsindsamle nogen objekter.
  • Jeg forstår. Så klasser instantieres på bunken og tilgås gennem referencer, mens structs instantieres på stakken (?)
  • Næsten korrekt. Den eneste unøjagtighed i denne erklæring er, at en struktur findes på bunken, hvis den er indlejret i et andet objekt, eller hvis den er inde i en række strenge. Og det findes også på bunken, hvis det nogensinde bliver indrettet på nøjagtig samme måde som værdityper er indrammet i Java.

Svar

Du skal vælge det bedste sprog til dit forventede miljø og din ekspertise.

Vælg C #, hvis du arbejder i et eneste Microsoft-miljø. Mens C # er standardiseret under ISO / IEC 23270: 2003, forbliver Microsofts version den eneste komplette implementering. Flere vigtige dele af sproget er ikke omfattet af standarden og er således underlagt Microsofts patenter. Ingen andre vil implementere en helt kompatibel version af sproget til andre systemer, så i virkeligheden er du leverandørlåst til Microsoft Windows og .Net, så længe du bruger sproget. Hvis du er på udkig efter færdigheder til at bruge på mobilmarkedet, bedst at se på et andet sprog.

Java fungerer, men har en hel del overhead, dels på grund af sådanne funktioner som affaldssamling. Java er heller ikke standardiseret af ISO / IEC, så du har ingen garantier, hvis du skifter platform og versioner af Java, kun Sun / Oracles bedste intentioner. Hvis du til sidst planlægger at arbejde med Android, er dette bestemt den rigtige vej . Androids programmering er grundlæggende Java med nogle få ændringer.

C ++ er standardiseret, og næsten alle compilere følger den internationale standard, så du har garanteret adfærd, MEN sproget beskytter dig ikke mod dig selv. Du er nødt til at udføre oprydning og overløbskontrol på egen hånd. Dette er ikke svært. C / C ++ programmerere har gjort disse i mange år. Apple bruger mål C til alt, så hvis du vil sigte mod Apple, anbefaler jeg, at du prøver dette i stedet.

Hvis du ser dig selv efterlade Windows på et eller andet tidspunkt, foreslår jeg at lære både C / C ++ og Java – som begge kan markedsføres på dette tidspunkt.

Svar

I forhold til C ++ vs C # (da jeg ikke er dygtig nok i Java), hvad jeg mangler her, er muligheden for at få adgang til ting på lavt niveau på Windows. For eksempel kan du ikke udvikle en indbygget displaydriver i C # (endnu), men du kan med C ++. Dette gør ikke C ++ bedre. Jeg ser C ++ versus C # som Assembly versus C.

C # er i min se meget mere effektivt, hvis du ser på den tid, det tager at implementere en funktion. Ydelsesstraffen for. Net-runtime er ubetydelig for 99% af de udviklede applikationer. Det kan have betydning, hvis du kører en stram løkke, ja under alle omstændigheder, men det meste af tiden er en applikation inaktiv og venter på enhver form for input, signal eller afbrydelse (disk IO, klik på knappen, netværk, færdiggørelse af animation).

CLR-biblioteket med alle hans funktioner har en anden r stor fordel. Da jeg uddannede C # til juniorudviklere, sagde de fleste af dem, at de kunne lide den logiske navngivningskonvention for klasser, medlemmer og navneområder. At finde en funktion af metoden var logisk på tværs af SDK, noget som Visual Basic 5 var alvorligt mangelfuldt med. Dette har hjulpet dem enormt med at vedtage biblioteket. Efter at have lært syntaksen for et sprog er det vigtigt at lære et nyt bibliotek at få en god forståelse af enhver SDK. Det sparer dig for at genopfinde hjulet.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *