Av hvilke grunner skal jeg velge C # fremfor Java og C ++? [lukket]

Stengt . Dette spørsmålet er meningsbasert . Det aksepteres for øyeblikket ikke svar.

Kommentarer

  • Som skrevet var spørsmålet et lærebokeksempel på ikke konstruktivt " hvilket språk er bedre? " spørsmål som er utenfor emnet her. Jeg ' har forsøkt å gjøre det mer konstruktivt med en redigering siden det faktisk fikk gode, gjennomtenkte svar. Husk likevel FAQ og dette blogginnlegget når du stiller spørsmål av denne karakteren .
  • La meg legge til noen edgier gjenstander. .NET har en veldefinert DOM ( f.eks. CodeDOM ) for språket sitt, og det er derfor mye enklere og mer effektivt å generere ting dynamisk under kjøretid. Dette kan også være nyttig som en infrastrukturell evne. Dessuten har typesystemet en 1-til-1-kamp med alle innfødte W3-typer. I kjernen ble W3 og andre interops bakt inn i språket fra starten. For andre språk ble disse bekymringene bare festet på og ga mange utfordringer for dem. Også, hvis du ' vil samhandle med mange språk og / eller protokoller, så er .NET også veldig sterk
  • Hei, JoeGeeky, legg til din kommentar som et svar på spørsmålet.
  • De virkelige spørsmålene er: Av hvilke grunner skal jeg velge Nemerle, F * og F # over C #? (dvs. at alle tre språkene er fra MS og alle tre er bedre)
  • Jeg tror egentlig ikke ' Jeg tror ikke noe utsagn fra sjangeren " språk / plattform X sammenlignet med språk / plattform Y er ALLTID bedre " er gyldig, og jeg tror også at det for alle X og Y lett kan bli ugyldiggjort for visse sammenhenger. Hva ' er poenget med dette spørsmålet?

Svar

Spørsmålet bør være " Hvilket språk er bedre egnet for moderne, typisk applikasjonsutvikling? ".

Rediger : Jeg adresserte noen av kommentarene nedenfor. En liten kommentar: Tenk på at når du har mange ting naturlig, som idiomer, er det en stor forskjell enn å implementere eller laste ned og bruke dem selv hver gang. Nesten alt kan implementeres på alle disse språkene. Spørsmålet er – hva språkene gir deg opprinnelig.

Så utenfor toppen av hodet mitt (noen argumenter gjelder begge språkene) …

C # er bedre enn C ++ i det:

  • Den har innfødt søppelinnsamling.
  • Den lar deg behandle klassemetoder «-signaturer som gratisfunksjoner (dvs. ignorere den statisk typede this pekerargument), og dermed skape mer dynamiske og fleksible forhold mellom klassene. rediger hvis du ikke vet hva dette betyr, så prøv å tilordne en medlemsmetode som returnerer ugyldig og godta ugyldighet til en void (*ptr)() variabel. C # delegater bærer this pekeren med seg, men brukeren trenger ikke alltid å bry seg om det. De kan bare tildele en void() -metode for en hvilken som helst klasse til en hvilken som helst annen void() -delegat.
  • Den har en enorm standard bibliotek med så mange nyttige ting som er godt implementert og enkel å bruke.
  • Det gir mulighet for både administrerte og innfødte kodeblokker.
  • Versjonsversjon av monteringen løser enkelt DLL-helvete-problemer.
  • Du kan angi at klasser, metoder og felt skal være monteringsintern (noe som betyr at de er tilgjengelige fra hvor som helst i DLL-en de er deklarert i, men ikke fra andre samlinger).

C # er bedre enn Java ved at:

  • I stedet for mye støy (EJB, private statiske klasseimplementeringer osv.) får du elegante og vennlige innfødte konstruksjoner som Egenskaper og hendelser .
  • Du har ekte generikk (ikke den dårlige casting-vitsen som Java kaller generikk), og du kan utføre refleksjon over dem.
  • Den støtter innfødte ressursadministrasjonsidiomer (using uttalelse). Java 7 kommer også til å støtte dette, men C # har hatt det en god stund lenger.
  • Det har ikke sjekket unntak 🙂 (diskutabelt om dette er bra eller dårlig)
  • Det er dypt integrert med Windows, hvis det er det du vil ha.
  • Den har Lambdas og LINQ, og støtter derfor en liten mengde funksjonell programmering.
  • Det gir mulighet for både generisk kovarians og kontravarens eksplisitt.
  • Den har dynamiske variabler, hvis du vil ha dem.
  • Bedre oppføringsstøtte, med yield -uttalelsen.
  • Den lar deg definere nye verdityper (eller ikke-referanse).

Rediger – Adressering av kommentarer

  • Jeg sa ikke at C ++ ikke støtter innfødt RAII. Jeg sa at Java ikke har det (du må eksplisitt prøve / endelig). C ++ har automatiske pekere som er bra for RAII, og (hvis du vet hva du gjør) kan også erstatte søppeloppsamling.
  • Jeg sa ikke noe om emulering gratis funksjoner. Men hvis du for eksempel trenger tilgang til et felt med en this -peker, og binde metoden som gjør det til en generisk funksjonspeker (dvs. ikke i samme klasse), så er det rett og slett ingen naturlig måte å gjøre det på. I C # får du gratis. Du trenger ikke engang å vite hvordan det fungerer.
  • Ved å " behandle medlemsmetoder som gratisfunksjoner " Jeg mente at du for eksempel ikke kan binde en medlemsmetode til en gratis funksjons signatur fordi medlemsmetoden " i hemmelighet " trenger this -pekeren.
  • using -uttalelsen, åpenbart sammen med ID-engangspapirer, er et godt eksempel på RAII. Se denne lenken . Vurder at du ikke trenger RAII så mye i C # som du gjør i C ++, fordi du har GC. For de spesifikke tidene du trenger det, kan du eksplisitt bruke using uttalelse. En annen liten påminnelse: å frigjøre minne er en kostbar prosedyre. GC har sin ytelsesfordel i mange tilfeller (spesielt når du har mye minne). Minne vil ikke lekke, og du vil ikke bruke mye tid på deallocating. Dessuten er allokering også raskere, siden du ikke tildeler minne hver gang, bare en gang i blant. Å ringe til new øker ganske enkelt en siste objekt-peker.
  • " C # er verre ved at den har søppeloppsamling ". Dette er faktisk subjektivt, men som jeg sa øverst, for mest moderne, typisk applikasjonsutvikling, er søppeloppsamling et helvete av en fordel.
    I C ++ er valgene dine å manuelt administrere minnet ditt ved hjelp av new a nd delete, noe som empirisk alltid fører til feil her og der, eller (med C ++ 11) kan du bruke autopekere naturlig, men husk at de legger til lots og mye støy til koden. Så GC har fremdeles en kant der.
  • " Generikk er langt svakere enn maler " – jeg bare ikke » t vet hvor du har fått det fra. Maler kan ha sine fordeler, men etter min erfaring er begrensninger, generisk parametertypekontroll, kontrast og kovarians mye sterkere og elegante verktøy. Styrken i maler er at de lar deg leke med språket a bit, som kan være kult, men som også forårsaker mye hodepine når du vil feilsøke noe. Så alt i alt har maler sine fine funksjoner, men jeg synes generiske mer praktiske og rene.

Kommentarer

  • Og hvis du fremdeles vil ha en søppeloppsamler for C ++, kan du laste ned en .
  • la oss fortsette denne diskusjonen i chat
  • En annen viktig funksjon i C # sammenlignet med Java, av ytelsesgrunner, er " struktur ", en type gjenstand som kan lagres på stakken (eller i CPU-registre, i spesielle tilfeller) eller innebygd i andre haugobjekter. De brukes ofte til små objekter med 1-4 felt, som for eksempel X-, Y-koordinatpar.
  • @LokiAstari Tenk på å forklare? Så lenge du husker å avregistrere hendelsesbehandlere og bruke avhendingsmønsteret på klasser som inneholder innfødte innpakninger, vil du ' ha det bra. At ' er mye mindre å vite og huske enn minneadministrasjon i C ++.
  • -1 siden jeg mangler seksjonene " C ++ er bedre enn C # ved at … " og " Java er bedre enn C # … ". Jeg tror ikke C # er overlegen på alle områder, så et svar uten disse to delene mangler sannsynligvis noen viktig informasjon.

Svar

Miljøet

.NET Framework og Windows-klienter

Windows er det dominerende operativsystemet på klientdatamaskiner. De beste GUI-rammene for Windows-applikasjoner er Winforms og WPF sammen med .NET Framework . Det beste programmeringsspråket for å jobbe med .NET Framework og dets API-er er C # . Java er ikke et alternativ for dette.Og C ++ er et eldre språk uten automatisk minnestyring. C # ligner på C ++, men har automatisk minnehåndtering, og du trenger ikke å jobbe med pekere, noe som gjør deg mer produktiv. C ++ kan fremdeles være det beste alternativet i noen tilfeller, men ikke for formkrevende databaseapplikasjoner som er vanlig i Business.

IIS og Windows Server

Hvis du er vant til å jobbe i Windows-miljøet og med C #, trenger du minst mulig investering for å lære IIS for serverprogrammering og Windows Server for grunnleggende administrasjon.

Active Directory og Windows Server

Hvis du utvikler programvare som skal distribueres i bedriftsnettverk, er det sannsynlig at de bruker et Windows-sentrert miljø ved hjelp av en Windows Server med Active Directory. I et slikt miljø er det lettest å integrere og distribuere en løsning laget i C # og .NET Framework .

Personlig er jeg en Java-utvikler, ikke en C # -utvikler, men jeg jobber med nettet. Jeg bytter til C # hvis jeg utvikler nettverksapplikasjoner for Windows-nettverk. Men jeg foretrekker Java for Linux-baserte webservere. Jeg ville valgt C ++ for innebygde systemer hvis jeg ikke vant mange avhengigheter.

Ja, C # er et bedre språk med mer moderne funksjoner enn C ++ og Java, men det er ikke det viktigste for å velge C # .

Sammendrag

Miljøet for programvaren din er viktigst for valg C # . Hvis du jobber i et miljø med Windows-klienter, Windows-servere, Active Directory, IIS og kanskje SQL Server så er C # det beste språket med .NET Framework .

Hvis du jobber i et Unix-miljø med f.eks. webtjenester, ville Java være mitt valg. Og hvis du jobber med innebygde systemer eller må integrere med maskinvareenheter, ville C ++ være et godt valg.

Kommentarer

  • Absolutt – dette er grunnen til at jeg bruker C # ikke egentlig noen annen grunn
  • Du kan absolutt bruke .NET på andre plattformer via Mono, MonoTouch og MonoDroid, men referanseverdiene mine fant at Mono var betydelig langsommere enn .NET for Windows, og Microsoft ' s egen Compact Framework er ekstremt treg på Windows CE: codeproject.com/KB/cross-platform/BenchmarkCppVsDotNet.aspx … selvfølgelig er WPF bare tilgjengelig på Windows (men jeg har ikke ' liker det uansett.)
  • Hvilke avhengigheter mener du med " Jeg ville valgt C ++ for innebygde systemer hvis jeg ikke ' t vant ' t mange avhengigheter. " Mener du java-bibliotekene?
  • @Puckl ja, men mest jvm / jre.
  • " Hvis du jobber i et Unix-miljø med f.eks. webtjenester " det er noen andre språk & rammer som kan vurderes: ruby, Python, node.js etc

Svar

C # og Java

C # er et veldig godt språk hvis:

  • Du vil gjøre generell objektorientert utvikling. Det er et klassisk, statisk skrevet OOP-språk.
  • Du retter deg bare mot Microsoft-plattformer (det er verdt å huske at Microsoft effektivt klonet Java for å lage C # fordi de ønsket et Java-lignende språk som ville låse folk inn i Windows. De kunne ha brukt Java, men det ville gjort det mulig for folk å kjøre applikasjoner enkelt på andre plattformer ….)

C # som språk er finere enn Java på forskjellige måter (bedre syntaks for egenskaper, verdityper, reified generics etc.). Jeg foretrekker C # som språk fremfor Java, men i den store ordningen med ting er de ganske like språk og passer for lignende applikasjoner.

På den annen side har Java også noen store fordeler:

  • Stort open source-økosystem – bibliotekene for Java som du kan få gratis er by langt det beste av alle språk. Det er vanskelig å overvurdere viktigheten av dette – fra det punktet å få ting gjort, er Java veldig effektivt.
  • Verktøy – Java-verktøyene er etter mitt syn bedre enn det du kan få .Net-verdenen . f.eks. Maven (når du først har mestret det!) Er spesielt imponerende.
  • Vedlikehold – Java har eksistert en stund og har vært vellykket i store selskaper, nettopp fordi det er relativt stabilt og det har blitt lagt ned mye krefter på bakoverkompatibilitet. Den enkle og litt ordrike syntaksen hjelper også Java her – det er lettere å lese og vedlikeholde koden hvis koden er veldig klar og eksplisitt.
  • Nye språk – JVM har noen fantastiske nye språk (Scala, Clojure , Groovy etc.) som er fremtiden for Java-plattformen. Det er her mye av språkinnovasjonen skjer, og det skjer mye raskere enn i Java eller C #.

Så Java vs C # er en ganske nær samtale, og det kommer egentlig ned til om du vil være i Microsoft-leiren eller Open Source / plattformleiren.

Personlig foretrekker jeg Java fordi:

  • Bibliotekets økosystem er etter mitt syn mye viktigere at det faktum at C # har finere syntaks enn Java
  • I det lange løp vil jeg at all koden min skal være riktig krysset -plattform og i stand til å kjøre på store klynger av billige linux-maskiner på skyen.
  • Clojure er IMHO det mest lovende språket i verden akkurat nå, og hvis jeg holder meg til JVM-plattformen, vil jeg kunne å tran del koden og ferdighetene mine lett inn i Clojure over tid.

C / C ++

C / C ++ er i utgangspunktet et annet dyr helt. Jeg vil ikke anbefale det til generell bruk av applikasjonsutvikling i dag av følgende årsaker:

  • Minnehåndtering – for mest generell programmering i dag, vil du ikke være administrere ditt eget minne. Søppelinnsamling i C # eller Java er mye bedre for produktiviteten og sunnheten din enn noen av de eksplisitte minnestyringsteknikkene du må bruke i C / C ++
  • Kompleksitet – spesielt C ++ er en ekstremt komplekst språk. Det tar lang tid å mestre, og selve koden kan også være utrolig kompleks. (C ++ maler er for eksempel spesielt hårete ….)
  • Produktivitet – mesteparten av tiden og alt annet for å være like vil det ta lengre tid å få ting gjort i C / C ++.

Det er imidlertid utvilsomt et godt valg i et bestemt begrenset antall spesielle domener, spesielt:

  • Operativsystemer – du vil sannsynligvis bruke C / C ++ hvis du skriver et operativsystem.
  • Spillutvikling – nesten alle t de beste kommersielle spillmotorene er C / C ++. Det er fremdeles det beste valget hvis du utvikler en krevende AAA-tittel (C # og Java er helt greie for mindre krevende / uformelle spill)
  • Høytytende databehandling – optimalisert C / C ++ er sannsynligvis den beste måten å opprette kode med høy ytelse. For de fleste applikasjoner er dette optimaliseringsnivået ikke verdt innsatsen, men på enkelte domener kan det være ekstremt verdifullt (for eksempel høyfrekvent handel)
  • Maskinvaretilgang – Du trenger direkte tilgang til maskinvaren (f.eks. for et innebygd system)

Så i utgangspunktet er C / C ++ et godt valg hvis og bare hvis du er fokusert på et av domenene der det er spesielt godt egnet .

Kommentarer

  • Du nevner maven som et eksempel på bedre verktøy for java. Jeg ' er ikke spesielt kjent med det, men ser på dokumentasjonen, ser Maven ut som det opprinnelige .Net-byggverktøyet MSBuild. Hva gjør Maven bedre enn MSBuild?
  • +! (bare fordi jeg bare har en stemme): du har forklart veldig godt hvorfor Java-økosystemet er bedre og hvorfor man ikke bare skal sammenligne syntaksen til C # vs Java. Java har flere og bedre biblioteker og verktøy. Det skjer ikke mye på selve Java-språket, men nye veldig interessante språk dukker opp for JVM som er (IMO) mye mer interessante enn C #. Jeg kjenner ikke Clojure, men jeg synes Scala er veldig interessant: designet for å være OOP + FP fra begynnelsen.
  • hvorfor er det at alle mener C ++ – koden er full av manuell minnestyring. Det er ikke C du vet, RAII betyr at du nesten aldri trenger å tildele / frigjøre minne manuelt (de gangene du gjør er de hvor et språk som C # ville være ubrukelig for deg).
  • @gbjbaanb – sannsynligvis fordi RAII er utilstrekkelig for minnehåndtering for generelle formål. Det tilsvarer på ingen måte fleksibilitet til et fullstendig GC-system som du ser i Java eller C #. Så snart du går utover grensene til RAII, er du tilbake i manuelt minnehåndteringsområde.
  • @mikera Vil bare påpeke at det er ganske mye språkutvikling også på .NET-plattformen. F.eks. F # er et pent funksjonelt språk som jevnt integrerer resten av .NET, og Python ble nylig portet til .NET som Iron Python (og fikk en fin IDE også! ).

Svar

I heard that syntactically they are almost the same. 

Syntaktisk? Hvem gir flygende aper om syntaksen? Syntaks er bra for bare én ting: å tillate raskere migrering fra syntaktisk lignende språk. Det er det.

C # er langt bedre enn Java. Tenk på deres generiske og funksjonelle programmeringsstøtte – C # ligger langt foran Java. For ikke å nevne overbelastning av operatører og andre gode ting – C # er langt bedre omtalt. Det er ingen måte at Java muligens kan betraktes som bedre enn C #.

C ++ og C # er mer en konkurranse. C ++ har en utrolig irriterende arkaisk kompilasjonsmodell og en rekke eldre sykdommer fra C, men malene er mye kraftigere enn generiske, og ressurshåndteringsmetodene er mye mer fleksible og kraftige generelt, da using er en fullstendig feil , og den kjøres raskere.

Kommentarer

  • Jeg tror man bør sammenligne både språkfunksjoner og tilgjengeligheten av et språk på forskjellige plattformer. er låst inne med Microsoft, med Java er det ikke: at ' er en stor fordel, i det minste for UNIX / Linux-utviklere. OOP + FP er kule funksjoner, men hvorfor bry deg med C # hvis du kan jeg bruke Scala, som kjører på JVM og kan grensesnitt med eldre Java-kode? Jeg ville aldri lære et plattformspesifikt språk med mindre jeg blir tvunget til det.
  • @Giorgio: Mono-prosjektet eksisterer . Men for det andre tar Microsoft faktisk vare på plattformen deres – de gir den regelmessige store oppgraderinger. Java har knapt hatt noe nytt. Spørsmålet handler også om C # vs Java, ikke CLR vs JVM.
  • @DeadMG: Så vidt jeg vet kan jeg ikke ta noe C # -program utviklet på Windows og bygge det med Mono. Ikke CLR vs JVM? Spørsmålet handler om hvorfor folk bruker C # eller Java. For at folk skal bruke et språk, trenger de en kjøretid og et operativsystem. Jeg diskuterer ikke om at C # har flere funksjoner enn Java, men Java er mye mer bærbart: dette er en faktor som kan påvirke adopsjonen av et språk. Faktisk brukes Java fortsatt mye oftere enn C #, selv om det mangler visse avanserte funksjoner.
  • @Giorgio, du kan ta et hvilket som helst C # -program og bygge det med Mono. Du kan ikke bruke visse biblioteker (som uansett ikke er deler av C # -språket). Og java er ikke " mye mer bærbart ". Du kan kode for iOS i C #, men ikke for eksempel i Java.
  • @Giogio, Mono er minst like bærbar som JVM.

Svar

Vel C# har noen fine innebygde funksjoner som LINQ og delegater. Det får det beste fra begge verdener – Java og C++. Se her for en fullstendig sammenligning.

Men jeg liker Java verden bedre – mye mer open source-rammer, og den kjører på alle plattformer. Og ikke fortell meg om Mono – det er ikke et pålitelig alternativ.

Kommentarer

  • +1: " Men jeg liker Java-verdenen bedre – mye mer open source-rammer og den kjører på alle plattformer. " La ' håper Oracle ikke endrer dette!
  • Å forklare hva ' ikke er " pålitelig " i Mono?
  • @Petar Minchev, det er ingenting annet enn din egen feil. Du må følge retningslinjene for bærbarhet, og du bør ikke bruk ikke-bærbare biblioteker – og på denne måten vil ethvert komplekst program kjøre pålitelig med Mono. Ting som WPF vil aldri bli portet.
  • @Petar Minchev, det er mange ikke-bærbare Java-biblioteker der ute. Du må alltid være forsiktig med bærbarhet, uansett hvilket språk du ' bruker. Og uansett, spørsmålet handler om språk, ikke e tredjepartsbiblioteker.
  • @Petar Minchev, GTK # er bærbar. Bruk den i stedet.

Svar

I følge noen kilder (se f.eks. http://www.indeed.com/jobtrends ) C # er fremdeles mindre populær enn Java, og like populær som C ++.

C # gir funksjoner som Java mangler, f.eks direkte støtte for visse programmeringsidiomer som egenskaper, funksjonell programmeringsstil og så videre. C # har et høyere abstraksjonsnivå enn C ++, noe som er en fordel når utviklingstid er viktigere enn programhastigheten.

Personlig foretrekker jeg fortsatt Java / C ++ -verdenene. Som Petar Minchev sa, har Java flere open source-rammer og applikasjoner, den kjører overalt, er mindre knyttet til en bestemt leverandør og et operativsystem. C ++ har lignende fordeler, selv om kode ofte trenger tilpasninger som går fra en plattform til en annen. Siden jeg foretrekker å utvikle meg på Linux, og så vidt jeg vet, kan jeg ikke ha fullverdig C # på Linux, jeg har aldri fått en reell interesse for C # fordi programmeringsbehovet mitt dekkes av C, C ++, Java, Scala.

På den annen side er det ikke et problem for mange utviklere å være bundet til en bestemt leverandør: Microsoft har en dominerende posisjon i operativsystemmarkedet og C # gir mange jobbmuligheter. Derfor bruker IMO mange utviklere C # fordi det, foruten å være et funksjonsrikt språk, også er en god investering.

Kommentarer

  • " Jeg kan ikke ha fullverdig C # på Linux " – Kan du utdype dette? Mener du at det fulle .Net-rammeverket ikke er ' t tilgjengelig fordi jeg ikke har ' t noen problemer med selve C # -språket ( eller F # for den saks skyld) på Linux?
  • @wawa: Så vidt jeg vet, tilsvarer .Net-rammeverket JDK, og .Net-rammeverket er bare tilgjengelig for Windows mens JDK er tilgjengelig for flere OS ' s. Hvis dette ikke er riktig, kan jeg redigere svaret mitt (og endre min mening også).
  • Jeg tror en nærmere analogi vil være Base Class Library til JDK. BCL har standardiserte og ikke-standardiserte deler. Monoprosjektet implementerer standardiserte så vel som mye av ikke-standardiserte brikker.
  • @wawa: Takk for informasjonen. Jeg vurderer å prøve C # med Mono. Likevel har jeg fortsatt en ganske sterk følelse av at C # er mye sterkere knyttet til Microsoft enn Java er til Oracle (eller tidligere i Sun).

Svar

Hva med " Hvilken ramme for programvareutvikling, som inkluderer et programmeringsspråk " bedre?

Du glemte å ta med andre ting, som " miljøet " du vil jobbe med.

  1. Skal du bare jobbe for Windows OS, men trenger ikke å være lavt og ha mye minne og andre ressurser?

    Velg .NET som rammeverk over Windows, og bruk C #.

  2. Skal du bare jobbe for Windows, men trenger ikke å være lavt, MEN, trenger ikke har mange ressurser?

    Velg Delphi Framework (og Object Pascal Delphi programmeringsspråk eller Lazarus Object Pascal programmeringsspråk)

  3. Er appen din påkrevd? å støtte seve ral plattformer, som et spill, i forskjellige mobiler?

    Velg Java Framework og Java programmeringsspråk.

  4. Er det Linux med KDE som grafisk grensesnitt?

    Velg QT-rammeverk, med C ++

  5. Er det Linux med Gnome som grafisk grensesnitt?

    Velg GObject / GLib-rammeverk , med C ++

  6. Skal du jobbe med mange operasjoner på lavt nivå, som å utvikle drivere?

    Vanlig C eller C ++ brukes til flere operativsystemer Systemer, med standardbiblioteker, som rammeverk.

Bare mine to øre.

Kommentarer

  • Jeg ' er ikke sikker på 3. Smarttelefoner er veldig populære i dag og AFAIK, alle støtter C # i en eller annen form, men bare Android støtter Java.
  • Er ikke ' t Delphi død? 🙂
  • @ šljaker Nei, men er ikke ' t veldig populære tesedager.
  • @svick: Det er en løgn. Bortsett fra Android, eksisterer Java også i en eller annen form på iOS, Symbian, WinMo, Blackberry, Maemo og WebOS (dvs. alt som betyr noe eller fremdeles betyr noe; ikke ' t får meg i gang med enda mindre plattformer). Android, Blackberry og Symbian offisielt støtter Java som utviklingsalternativ; Sun pleide å støtte Java på iOS selv om Apple ikke har lyst på det. Java er det primære utviklingsspråket i Android- og Blackberry-telefonen. Jeg kan ' ikke si det samme med C #, AFAICT det ' er bare offisielt støttet på WinMo.

Svar

Hvis du gjør et søk, vil du sannsynligvis snuble over diskusjon om de beste programmeringsspråkene. Her er et av søkeresultatene – http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html – Java ser fremdeles ut til å være det mest populære språket.

Java prøvde å fjerne noen av manglene ved C ++ (og gjøre programmørene enklere for applikasjoner som ikke er sanntid og ikke-kritiske). C # som sene til festen, unngikk noen av manglene ved Java-språket. C # har gjort store fremskritt (ettersom Microsoft har mye kontroll over det) mens fremskritt i Java ble blokkert i en betydelig periode på grunn av konflikt mellom interessentene.

Svar

Et par ting som ikke allerede er nevnt:

C # er bedre enn C ++ fordi:

Det gjør unna med header-filer, som oversettes til stor enkelhet.

C # er bedre enn Java fordi:

Den støtter både referansetype (klasse) og verditype (struktur) brukerdefinert typer, som, hvis du vet hva du gjør, kan gi betydelige ytelsesfordeler.

Den støtter delegater, som er som enkeltmetodegrensesnitt, og forenkler dermed kodingen av ofte forekommende konstruksjoner som involverer enkeltmetodeobjekter.

Kommentarer

  • Kan du forklare på hvilken måte å ha både referansetype og verditype kan gi ytelsesfordeler i C #?
  • Hvis du for eksempel vil ha en rekke poster , i Java har du ikke annet valg enn å beskrive posten din ved hjelp av en klasse, så matrisen din vil være en rekke referanser til et mangfold av separat tildelte objekter. I C # kan du beskrive posten din ved hjelp av en struct, slik at matrisen din vil være bare et enkelt kontinuerlig minneområde som inneholder strukturene dine etter hverandre, akkurat som i C.
  • Som et annet eksempel, hvis du vil for å definere en liten ny type (en type som passer inn i et maskinord), trenger du ikke definere en ny klasse for den; du kan ganske enkelt gjøre det til en struktur, så det vil være lydig mot verdisemantikk. Å sende slike strukturer rundt vil ikke være dyrere enn å sende referanser til objekter, men du vil ha fordelen av å ikke tildele, konstruere og søppel samle noen gjenstander.
  • Jeg forstår. Så klasser blir instantiert på dyngen og nås gjennom referanser mens structs instantieres på stacken (?)
  • Nesten riktig. Den eneste unøyaktigheten i denne uttalelsen er at en struktur vil bli funnet på dyngen hvis den er innebygd i et annet objekt, eller hvis den er inne i en rekke strukturer. Og det vil også bli funnet på dyngen hvis det noen gang blir bokset, på nøyaktig samme måte som verdityper er bokset i Java.

Svar

Du bør velge det beste språket for ditt forventede miljø og din kompetanse.

Velg C # hvis du jobber i et eneste Microsoft-miljø. Mens C # er standardisert under ISO / IEC 23270: 2003, forblir Microsofts versjon den eneste komplette implementeringen. Flere viktige deler av språket dekkes ikke av standarden og er dermed underlagt Microsofts patenter. Ingen andre vil implementere en helt kompatibel versjon av språket for andre systemer, så i virkeligheten er du leverandørlåst til Microsoft Windows og .Net så lenge du bruker språket. Hvis du leter etter ferdigheter du kan bruke i mobilmarkedet, er det best å se på et annet språk.

Java fungerer, men har mye overhead, delvis på grunn av slike funksjoner som søppeloppsamling. Java er heller ikke standardisert av ISO / IEC, så du har ingen garantier hvis du bytter plattform og versjon av Java, bare Sun / Oracles beste intensjoner. Hvis du til slutt planlegger å jobbe med Android, er dette definitivt veien å gå . Android-programmering er i utgangspunktet Java, med noen få endringer.

C ++ er standardisert og nesten alle kompilatorer følger den internasjonale standarden, så du har garantert atferd MEN språket beskytter deg ikke mot deg selv. Du må utføre opprydding og overløpskontroll på egen hånd. Dette er ikke vanskelig. C / C ++ programmerere har gjort dette i mange år. Apple bruker Objective C for alt, så hvis du vil sikte mot Apple, anbefaler jeg at du prøver dette i stedet.

Hvis du ser at du etterlater Windows på et eller annet tidspunkt, foreslår jeg at du lærer både C / C ++ og Java – som begge kan selges på dette tidspunktet.

Svar

I forhold til C ++ vs C # (da jeg ikke er dyktig nok i Java), mangler det her muligheten til å få tilgang til lavnivå ting på Windows. For eksempel kan du ikke utvikle en innfødt skjermdriver i C # (ennå), men du kan med C ++. Dette gjør ikke C ++ bedre. Jeg ser C ++ versus C # som Assembly versus C.

C # er i min se mye mer effektivt hvis du ser på tiden det tar å faktisk implementere en funksjon. Ytelsesstraffen for. Net-kjøretiden er ubetydelig for 99% av applikasjonene som er utviklet. Det kan være av betydning hvis du kjører en tett løkke, ja for all del, men mesteparten av tiden er en applikasjon inaktiv, og venter på alle slags innganger, signaler eller avbrudd (disk IO, knappeklikk, nettverk, fullføring av animasjon).

CLR-biblioteket med alle sine funksjoner har en annen r stor fordel. Da jeg trente C # til juniorutviklere, sa de fleste at de likte den logiske navnekonvensjonen til klasser, medlemmer og navnerom. Å finne en funksjon av metoden var logisk på tvers av SDK, noe Visual Basic 5 var alvorlig feil på. Dette har hjulpet dem enormt med å adoptere biblioteket. Etter å ha lært syntaksen til et språk, er det viktig å lære et nytt bibliotek å få god forståelse av SDK. Det sparer deg for å finne opp hjulet på nytt.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *