Kommentit
- Kirjoittamisen yhteydessä kysymys oli oppikirjaesimerkki siitä, että " mikä kieli on parempi? " kysymykset, jotka ovat aiheen ulkopuolella. Olen ' yrittänyt tehdä siitä rakentavamman muokkauksella, koska se sai todella hyviä, hyvin harkittuja vastauksia. Pidä silti mielessä usein kysytyt kysymykset ja tämä blogiviesti , kun esität tällaisia kysymyksiä. .
- Haluan lisätä joitain edgier-kohteita. .NET: llä on tarkoin määritelty kieli DOM ( esim. CodeDOM ), minkä vuoksi asioiden dynaaminen luominen ajon aikana on paljon yksinkertaisempaa ja tehokkaampaa. Tästä voi olla hyötyä myös infrastruktuurina. Tyyppijärjestelmässä on myös 1: 1-ottelu kaikkien alkuperäisten W3-tyyppien kanssa. Sen ytimessä W3 ja muut interopit leivottiin kielelle alusta alkaen. Muille kielille nämä huolenaiheet vain kiinnitettiin, ja ne asettavat heille monia haasteita. Lisäksi, jos ' käsittelet paljon kieliä ja / tai protokollia, niin .NET on myös erittäin vahva
- Hei, JoeGeeky, lisää kommenttisi nimellä vastaus kysymykseen.
- Todelliset kysymykset ovat: Mistä syistä minun pitäisi valita Nemerle, F * ja F # C #: n sijasta? (eli kaikki kolme kieltä ovat peräisin MS: stä ja kaikki kolme ovat parempia)
- En todellakaan usko ' mitään genren lausuntoja " kieli / käyttöympäristö X verrattuna kieleen / käyttöympäristöön Y on AINA parempi yhteydessä. Mikä ' on tämän kysymyksen tarkoitus?
Vastaa
Kysymyksen tulisi olla " Mikä kieli sopii paremmin nykyaikaiseen, tyypilliseen sovelluskehitykseen? ".
Muokkaa : Käsittelin joitain alla olevia kommentteja. Pieni huomautus: ota huomioon, että kun sinulla on paljon asioita natiivisti, idioomeina, se on suuri ero kuin niiden toteuttaminen tai lataaminen ja käyttäminen itse joka kerta. Lähes kaikki voidaan toteuttaa millä tahansa näistä kielistä. Kysymys on – mitä kielet tarjoavat sinulle luonnollisesti.
Joten pois pääni päältä (jotkut argumentit pätevät molempiin kieliin) …
C # on parempi kuin C ++, koska:
- Siinä on natiivi roskat-keräys.
- Sen avulla voit käsitellä luokan metodien ”allekirjoituksia vapaina toimintoina (ts. jättää huomioimatta staattisesti kirjoitettu
this
osoittimen argumentti), ja luoda siten dynaamisempia ja joustavampia suhteita luokkien välille. muokkaa jos et tiedä mitä tämä tarkoittaa, yritä sitten määrittää jäsenmenetelmä, joka palauttaa mitätön ja hyväksyy tyhjänvoid (*ptr)()
muuttuja. C # -edustajat kantavatthis
-osoitinta mukanaan, mutta käyttäjän ei tarvitse aina huolehtia siitä. He voivat vain määrittää minkä tahansa luokanvoid()
-menetelmän mille tahansa muullevoid()
-edustajalle. - Sillä on valtava standardi kirjasto, jossa on niin paljon hyödyllisiä juttuja, jotka ovat hyvin toteutettuja ja helppokäyttöisiä.
- Se sallii sekä hallitut että alkuperäiset koodilohkot.
- Kokoonpanon versiointi korjaa helposti DLL-helvetin ongelmat.
- Voit asettaa luokat, menetelmät ja kentät kokoonpanosisäisiksi (mikä tarkoittaa, että niihin pääsee käsiksi mistä tahansa DLL-tiedostosta, johon ne ilmoitetaan, mutta ei muista kokoonpanoista).
C # on parempi kuin Java siinä mielessä:
- Paljon melua (EJB, yksityiset staattiset luokkatoteutukset jne.) sijaan saat tyylikkäitä ja ystävällisiä natiivirakenteita, kuten Ominaisuudet ja Tapahtumat .
- Sinulla on todellisia geneerisiä aineistoja (ei huono casting-vitsi, jota Java kutsuu geneerisiksi), ja voit heijastaa niitä.
- Se tukee alkuperäisiä resurssienhallinnan idioomeja (
using
-lauseke). Java 7 tukee myös tätä, mutta C #: lla on ollut se jonkin aikaa pidempään. - Siinä ei ole tarkistettu poikkeuksia 🙂 (kiistanalainen onko tämä hyvää vai huonoa)
- Se on syvästi integroitu Windowsiin, jos se on mitä haluat.
- Siinä on Lambdas ja LINQ, joten se tukee pientä määrää toiminnallista ohjelmointia.
- Se sallii sekä yleinen kovarianssi että ristiriitaisuus.
- Siinä on dynaamisia muuttujia, jos haluat niitä.
- Parempi luettelointituki
yield
-käskyllä. - Sen avulla voit määrittää uudet arvotyypit (tai ei-viittaavat). / li>
Muokkaa – Osoitekommentit
- En sanonut, että C ++ ei tue natiivia RAII: ta. Sanoin, että Java: lla ei ole sitä (sinun on ehdottomasti kokeiltava / lopuksi). C ++: lla on automaattisia osoittimia, jotka sopivat erinomaisesti RAII: lle, ja (jos tiedät mitä teet) voi korvata myös roskakorin. li>
- En sanonut mitään emuloimasta vapaita toimintoja. Mutta esimerkiksi jos sinun on käytettävä kenttää
this
-osoittimella ja sitoa menetelmä, joka tekee sen, yleiseen funktion osoittimeen (eli ei samaan luokkaan), silloin ei yksinkertaisesti ole mitään alkuperäistä tapaa tehdä se. C #: ssä saat sen ilmaiseksi. Sinun ei edes tarvitse tietää, miten se toimii. - Käsittelemällä " jäsenmenetelmiä vapaina toimintoina " Tarkoitin, että et voi esimerkiksi sitoa jäsenmenetelmää luonnollisesti vapaan funktion allekirjoitukseen, koska jäsenmenetelmä " salaa " tarvitsee
this
-osoittimen. - Lauseke
using
, ilmeisesti yhdessä käyttämättömien kääreiden kanssa, on hieno esimerkki RAII. Katso tämä linkki . Ajattele, että et tarvitse RAII: ta niin paljon C #: ssä kuin C ++: ssa, koska sinulla on GC. Voit käyttää tiettyjä aikoja varten nimenomaisestiusing
Toinen pieni muistutus: muistin vapauttaminen on kallis toimenpide. GC: llä on suorituskykyetu monissa tapauksissa (varsinkin kun sinulla on paljon muistia). Muisti ei vuoda eikä kuluta paljon aika jakautumiseen. Mitä enemmän, kohdentaminen on myös nopeampaa, koska muistia ei jaeta joka kerta, vain silloin tällöin.new
-palvelun soittaminen yksinkertaisesti lisää viimeistä objektiosoitin. - " C # on huonompi siinä mielessä, että sillä on roskien keräys ". Tämä on todellakin subjektiivista, mutta kuten totesin yläreunassa, nykyaikaisimmalle tyypilliselle sovelluskehitykselle roskien keräys on helvetti etu.
C ++: ssa voit joko hallita muistiasi manuaalisestinew
a nddelete
, joka johtaa empiirisesti aina virheisiin täällä tai siellä (tai C ++ 11: n kanssa) voit käyttää automaattisia osoittimia natiivisti, mutta pidä mielessä, että ne lisäävät paljon ja paljon melua koodiin. Joten GC: llä on edelleen reuna siellä. - " Geneeriset aineet ovat paljon heikompia kuin mallit " – En vain ” En tiedä mistä sait sen. Malleilla voi olla etuja, mutta kokemukseni mukaan rajoitukset, yleisten parametrien tyyppitarkistus, ristiriitaisuus ja kovarianssi ovat paljon vahvempia ja tyylikkäimpiä työkaluja. Mallien vahvuus on, että ne antavat sinun pelata kielellä a bitti, mikä saattaa olla siistiä, mutta aiheuttaa myös paljon päänsärkyä, kun haluat debugoida jotain. Joten kaiken kaikkiaan malleilla on mukavat ominaisuudet, mutta minusta yleiset ovat käytännöllisempiä ja puhtaampia.
Kommentit
- Ja jos haluat silti roskakorin C ++: lle, voit ladata sen .
- jatkakaamme keskustelua keskustelussa
- Toinen tärkeä ominaisuus C #: ssa verrattuna Java-toimintaan suorituskyvyn vuoksi on " struct ", objektityyppi, joka voidaan tallentaa pinoon (tai erikoistapauksissa CPU-rekistereihin) tai upottaa muihin kasan kohteisiin. Niitä käytetään usein pienille kohteille, joissa on 1–4 kenttää, kuten X-, Y-koordinaattiparit.
- @LokiAstari Mind selittää? Niin kauan kuin muistat poistaa tapahtumankäsittelijöiden rekisteröinnin ja käyttää Hävitä-mallia luokissa, jotka sisältävät natiivikääreitä, ' voi olla kunnossa. Se ' on paljon vähemmän tiedettävää ja muistettavaa kuin C ++: n muistinhallinta.
- -1 koska minulta puuttuu osiot " C ++ on parempi kuin C #, koska … " ja " Java on parempi kuin C # … ". En usko, että C # on ylivoimainen kaikilla alueilla, joten vastauksesta ilman näitä kahta osaa ei todennäköisesti ole tärkeitä tietoja.
Vastaus
Ympäristö
.NET Framework ja Windows-asiakkaat
Windows on hallitseva käyttöjärjestelmä asiakastietokoneissa. Windows-sovellusten parhaat GUI-kehykset ovat Winforms ja WPF yhdessä .NET Framework kanssa. Paras ohjelmointikieli .NET Framework ja sen sovellusliittymien kanssa on C # . Java ei ole vaihtoehto tälle.Ja C ++ on vanhempi kieli ilman automaattista muistinhallintaa. C # on samanlainen kuin C ++, mutta sillä on automaattinen muistinhallinta, eikä sinun tarvitse työskennellä osoittimien kanssa, mikä tekee sinusta tuottavampaa. C ++ voi silti olla paras vaihtoehto joissakin tapauksissa, mutta ei muodonintensiivisille tietokantasovelluksille, mikä on yleistä liiketoiminta.
IIS ja Windows Server
Jos olet tottunut työskentelemään Windows-ympäristössä ja C #: n kanssa, tarvitset vähiten investointeja oppiaksesi IIS: n palvelinohjelmointiin ja Windows Server: n perusvalvonta.
Active Directory ja Windows Server
Jos kehität ohjelmistoa, joka otetaan käyttöön yritysverkoissa, on todennäköistä, että he käyttävät Windows-keskitettyä ympäristöä Windows Server ja Active Directory. Tällaisessa ympäristössä on helppoa integroida ja ottaa käyttöön ratkaisu, joka on tehty C # ja .NET Framework .
Henkilökohtaisesti olen Java-kehittäjä, en C # -kehittäjä, mutta työskentelen verkon kanssa. Haluaisin vaihtaa C #: een, jos kehittäisin Windows-verkon verkkosovelluksia. Mutta mieluummin Java Linux-pohjaisille web-palvelimille. Valitsisin sulautetuille järjestelmille C ++: n, jos minulla ei olisi monia riippuvuuksia.
Kyllä, C # on parempi kieli, jossa on nykyaikaisempia ominaisuuksia kuin C ++ ja Java, mutta se on ei tärkein asia valittaessa C # .
Yhteenveto
Ohjelmiston ympäristö on tärkein valinta C # . Jos työskentelet ympäristössä, jossa on Windows-asiakkaat, Windows-palvelimet, Active Directory, IIS ja ehkä SQL Server ja sitten C # on paras kieli .NET Frameworkin kanssa .
Jos työskentelet Unix-ympäristössä esim. verkkopalvelut, Java olisi minun valintani. Ja jos työskentelet sulautettujen järjestelmien kanssa tai joudut integroimaan laitteistojen kanssa, C ++ olisi hyvä valinta.
Kommentit
- Ehdottomasti – siksi käytän C #: tä, ei oikeastaan mitään muuta syytä
- Voit varmasti käyttää .NET: ää muilla alustoilla Monon kautta, MonoTouch ja MonoDroid, mutta vertailuarvojeni mukaan Mono on huomattavasti hitaampi kuin .NET for Windows, ja Microsoftin ' oma Compact Framework on erittäin hidas Windows CE: ssä: codeproject.com/KB/cross-platform/BenchmarkCppVsDotNet.aspx … tietysti, WPF on käytettävissä vain Windowsissa (mutta en ' tykkää siitä joka tapauksessa.)
- Mitä riippuvuuksia tarkoitat " Valitsisin C ++ upotetuille järjestelmille, jos en ' t ei voittanut ' t monia riippuvuuksia. " Tarkoitatko Java-kirjastoja?
- @Puckl kyllä, mutta enimmäkseen jvm / jre.
- " Jos työskentelet Unix-ympäristössä esim. verkkopalvelut " on joitain muita kieliä &, joita voidaan harkita: ruby, Python, node.js jne.
Vastaa
C # ja Java
C # on erittäin hyvä kieli, jos:
- Haluat tehdä yleiskäyttöisen objektikeskeisen kehityksen. Se on klassinen, staattisesti kirjoitettu OOP-kieli.
- Kohdistat vain Microsoft-alustoille (kannattaa muistaa, että Microsoft kloonasi Java tehokkaasti C #: n luomiseksi, koska he halusivat Java-tyyppisen kielen, joka lukitsisi ihmiset Windows. He olisivat voineet käyttää Java-sovellusta, mutta se olisi antanut ihmisille mahdollisuuden suorittaa sovelluksia helposti muilla alustoilla ….)
C # kielenä on monin tavoin mukavampi kuin Java. ominaisuuksien, arvotyyppien, uudistettujen geneeristen ominaisuuksien jne. syntaksi). Pidän parempana C # kielenä kuin Java, mutta pääpiirteissään ne ovat melko samanlaisia kieliä ja sopivat samankaltaisiin sovelluksiin.
Toisaalta Javalla on myös joitain suuria etuja:
- Valtava avoimen lähdekoodin ekosysteemi – Java-kirjastot, jotka voit saada ilmaiseksi, ovat selvästi kaikkien kielien parhaat puolet. Tämän merkitystä on vaikea yliarvioida – Java on erittäin tehokas asioiden suorittamisen näkökulmasta.
- Työkalut – mielestäni Java-työkalut ovat parempia kuin mitä .Net-maailma voi saada. . esimerkiksi. Maven (kun olet oppinut sen!) On erityisen vaikuttava.
- Ylläpitokelpoisuus – Java on ollut jonkin aikaa ja menestynyt suurissa yrityksissä juuri siksi, että se on suhteellisen vakaa ja taaksepäin yhteensopivuuteen on pyritty paljon. Yksinkertainen ja hieman sanallinen syntaksi auttaa myös Javaa täällä – koodia on helpompi lukea ja ylläpitää, jos koodi on hyvin selkeä ja selkeä.
- Uudet kielet – JVM: llä on upeita uusia kieliä (Scala, Clojure , Groovy jne.), Jotka ovat Java-alustan tulevaisuus. Täällä tapahtuu suuri osa kieliinnovaatioista, ja se tapahtuu paljon nopeammin kuin joko Java tai C #.
Joten Java vs. C # on melko läheinen puhelu, ja se todella riippuu siitä, haluatko olla Microsoftin leirissä vai avoimen lähdekoodin / alustojen välisessä leirissä.
Henkilökohtaisesti pidän Javaista, koska:
- Kirjaston ekosysteemi on mielestäni paljon tärkeämpää, että se tosiasia, että C #: lla on mukavampi syntakse kuin Java
- Haluan pitkällä aikavälillä, että kaikki koodini ristikkäin -alustainen ja pystyy toimimaan suurilla halpojen linux-koneiden klustereilla pilvellä.
- Clojure on IMHO: n lupaavin kieli tällä hetkellä, ja jos pidän kiinni JVM-alustasta, pystyn tran sijoita koodini ja taitoni helposti Clojureen ajan myötä.
C / C ++
C / C ++ on pohjimmiltaan täysin erilainen peto. En suosittele sitä nykyään yleiskäyttöön tarkoitettujen sovellusten kehittämiseen seuraavista syistä:
- Muistin hallinta – useimmissa nykypäivän yleiskäyttöisissä ohjelmoinnissa et halua olla oman muistin hallinta: C #- tai Java-jätteiden kerääminen on paljon parempi tuottavuudellesi ja järkevällesi kuin mikä tahansa selkeä muistinhallintatekniikka, jota sinun on käytettävä C / C ++: ssa.
- Monimutkaisuus – erityisesti C ++ on äärimmäisen monimutkainen kieli. Oppiminen vie kauan ja itse koodi voi olla myös pirullisen monimutkainen. (Esimerkiksi C ++ -mallit ovat erityisen karvaisia ….)
- Tuottavuus – suurimman osan ajasta ja kaikesta muusta Tasa-arvoisuus vie kauemmin saada aikaan asioita C / C ++: lla.
Se on kuitenkin epäilemättä loistava valinta tietyissä rajoitetuissa määrissä erityisalueita, erityisesti:
- Käyttöjärjestelmät – luultavasti haluat käyttää C / C ++: a, jos kirjoitat käyttöjärjestelmää.
- Pelikehitys – melkein kaikki t parhaat kaupalliset pelimoottorit ovat C / C ++. Se on edelleen paras valinta, jos kehität vaativaa AAA-otsikkoa (C # ja Java sopivat täydellisesti vähemmän vaativiin / rentoihin peleihin).
- Suorituskykyinen tietojenkäsittely – optimoitu C / C ++ on todennäköisesti paras tapa luo erittäin korkean suorituskyvyn koodi. Useimmissa sovelluksissa, jotka tekevät tämän tason optimoinnin, ei kannata vaivaa, mutta tietyillä alueilla se voi olla erittäin arvokasta (esimerkiksi suurtaajuuskauppa).
- Laitteistoyhteys – Tarvitset suoran pääsy laitteistoon (esim. sulautettuun järjestelmään)
Joten C / C ++ on pohjimmiltaan hyvä valinta vain ja vain, jos keskityt johonkin verkkotunnuksista, joihin se sopii erityisen hyvin .
Kommentit
- Mainitset Mavenin esimerkkinä Java-työkaluista. En ' ole erityisen perehtynyt siihen, mutta tarkastelemalla dokumentaatiota Maven näyttää samankaltaisemmalta kuin alkuperäinen .Net-rakennustyökalu MSBuild. Mikä tekee Mavenista paremman kuin MSBuild?
- +! (vain siksi, että minulla on vain yksi ääni): olet selittänyt hyvin, miksi Java-ekosysteemi on parempi ja miksi ei pitäisi verrata vain C #: n ja Java: n syntaksia. Javalla on enemmän ja parempia kirjastoja ja työkaluja. Itse Java-kielessä ei tapahdu paljon, mutta JVM: lle ilmestyy uusia erittäin mielenkiintoisia kieliä, jotka ovat (IMO) paljon mielenkiintoisempia kuin C #. En tiedä Clojurea, mutta Scala on mielestäni erittäin mielenkiintoinen: suunniteltu OOP + FP: ksi alusta alkaen.
- miksi kaikkien mielestä C ++ -koodi on täynnä manuaalista muistinhallintaa. Se ei ole C tiedät, RAII tarkoittaa, että sinun ei tarvitse melkein koskaan jakaa / vapauttaa muistia manuaalisesti (kertaa, jolloin teet C-kaltaisen kielen sinulle hyödytön).
- @gbjbaanb – luultavasti siksi, että RAII ei ole riittävä yleisen muistin hallintaan. Se ei mitenkään vastaa joustavuutta täydelliseen GC-järjestelmään, kuten näet Java- tai C # -järjestelmässä. Heti kun ylität RAII: n rajat, olet takaisin manuaalisen muistinhallinnan alueella.
- @mikera Haluan vain huomauttaa, että myös .NET-alustalla on melko vähän kielenkehitystä. Esimerkiksi. F # on siisti toiminnallinen kieli, joka integroi sujuvasti muun .NET: n, ja Python siirrettiin äskettäin .NETiin Iron Pythonina (ja sai myös mukavan IDE: n ! ).
Vastaa
I heard that syntactically they are almost the same.
Syntaktisesti? Kuka antaa lentäville apinoille syntaksia? Syntaksi on hyvä vain yhdestä asiasta: nopeampi siirtyminen syntaktisesti samanlaisista kielistä. Se siitä.
C # on huomattavasti parempi kuin Java. Harkitse heidän yleistä ja toiminnallista ohjelmointitukeaan – C # on paljon edellä Java. Puhumattakaan käyttäjän ylikuormituksista ja muista hyvistä asioista – C # on huomattavasti paremmin esillä. Ei ole mitään tapaa, jota Java voisi mahdollisesti pitää parempana kuin C #.
C ++ ja C # ovat enemmän kilpailuja. C ++: lla on uskomattoman ärsyttävä arkainen kokoelmamalli ja joukko vanhoja sairauksia C: stä, mutta sen mallit ovat huomattavasti tehokkaampia kuin geneeriset, ja sen resurssienhallintamenetelmät ovat yleensä paljon joustavampia ja tehokkaampia, koska using
on täydellinen epäonnistuminen , ja se toteutetaan nopeammin.
Kommentit
- Mielestäni tulisi verrata sekä kieliominaisuuksia että kielen saatavuutta eri alustoilla. on lukittu Microsoftin kanssa, Java-sovelluksella yksi ei ole: se ' on suuri etu, ainakin UNIX / Linux-kehittäjille. OOP + FP ovat hienoja ominaisuuksia, mutta miksi vaivautua C #: een, jos osaa käyttää Scalaa, joka toimii JVM: llä ja voi olla yhteydessä vanhaan Java-koodiin? En koskaan oppisi alustakohtaista kieltä, ellei minua pakoteta siihen.
- @Giorgio: Mono-projekti on olemassa . Mutta toiseksi Microsoft todella huolehtii alustastaan – he antavat sille säännöllisesti suuria päivityksiä. Java ei tuskin ole saanut mitään uutta. Kysymys koskee myös C # vs Java -ohjelmaa, ei CLR vs JVM.
- @DeadMG: Sikäli kuin tiedän, en voi ottaa mitään Windowsissa kehitettyä C # -ohjelmaa ja rakentaa sitä Monolla. Eikö CLR vs. JVM? Kysymys on siitä, miksi ihmiset käyttävät C # tai Java. Jotta ihmiset voisivat käyttää kieltä, he tarvitsevat ajon ja käyttöjärjestelmän. En keskustele siitä, että C #: llä on enemmän ominaisuuksia kuin Java, mutta Java on paljon kannettavampi: tämä on tekijä, joka voi vaikuttaa kielen käyttöönottoon. Itse asiassa Java-sovellusta käytetään edelleen paljon useammin kuin C #, vaikka siinä ei olisikaan tiettyjä lisäominaisuuksia.
- @Giorgio, voit ottaa ottaa minkä tahansa C # -ohjelman ja rakentaa sen Monolla. Et voi käyttää tiettyjä kirjastoja (jotka eivät missään tapauksessa ole osa C # -kieliä). Jaava ei ole " paljon kannettavampi ". Voit koodata iOS: n C #: lla, mutta et esimerkiksi Javalla.
- @Giogio, Mono on vähintään yhtä kannettava kuin JVM.
Vastaus
No C#
on hienoja sisäänrakennettuja ominaisuuksia, kuten LINQ
ja edustajia. Se saa parhaansa molemmista maailmoista – Java
ja C++
. Katso täydellinen vertailu täältä .
Mutta pidän Java
maailmasta paremmin – paljon enemmän avoimen lähdekoodin kehyksiä ja se toimii kaikilla alustoilla. Ja älä kerro minulle Mono
– se ei ole luotettava vaihtoehto.
Kommentit
- +1: " Mutta pidän Java-maailmasta paremmin – paljon enemmän avoimen lähdekoodin kehyksiä ja se toimii kaikilla alustoilla. " Let ' toivo, että Oracle ei muuta tätä!
- Selvitä, mitä ' ei " luotettava " mustavalkoisena?
- @Petar Minchev, Se ei ole mitään muuta kuin sinun oma vikasi. Sinun on noudatettava siirrettävyysohjeita, älä käytä ei-kannettavia kirjastoja – ja tällä tavalla kaikki monimutkaiset sovellukset toimisivat luotettavasti Monon kanssa. WPF: n kaltaisia asioita ei koskaan siirretä.
- @Petar Minchev, on monia kannettavia Java-kirjastot siellä. Sinun on aina oltava varovainen siirrettävyyden suhteen riippumatta siitä, mitä kieltä ' käytät. Ja joka tapauksessa, kysymys on kielistä, ei th Kolmansien osapuolten kirjastot.
- @Petar Minchev, GTK # on kannettava. Käytä sitä sen sijaan.
Vastaa
Joidenkin lähteiden mukaan (katso esim. http://www.indeed.com/jobtrends ) C # on edelleen vähemmän suosittu kuin Java ja yhtä suosittu kuin C ++.
C # tarjoaa ominaisuuksia, joista Java puuttuu, esimerkiksi suora tuki tietyille ohjelmointidioneille, kuten ominaisuuksille, toiminnalliselle ohjelmointityylille ja niin edelleen. C #: lla on korkeampi abstraktiotaso kuin C ++: lla, mikä on etu, kun kehitysaika on tärkeämpi kuin ohjelman nopeus.
Henkilökohtaisesti pidän edelleen Java / C ++ -maailmista. Kuten Petar Minchev sanoi, Javalla on enemmän avoimen lähdekoodin kehyksiä ja sovelluksia, se toimii kaikkialla, on vähemmän sidottu tiettyyn myyjään ja käyttöjärjestelmään. C ++: lla on samanlaisia etuja, vaikka koodi tarvitsee usein mukautuksia alustasta toiseen. Koska haluan kehittyä mieluummin Linuxissa, ja tietoni mukaan en voi olla täysin täyttänyt C #: tä Linuxissa, en koskaan saanut todellista kiinnostusta C #: een, koska ohjelmointitarpeeni kattavat C, C ++, Java, Scala.
Toisaalta monien kehittäjien sitoutuminen tiettyyn myyjään ei ole ongelma: Microsoftilla on hallitseva asema käyttöjärjestelmämarkkinoilla ja C # antaa paljon työmahdollisuuksia. Siksi monet IMO: n kehittäjät käyttävät C #: tä, koska se on monipuolinen kieli, mutta se on myös hyvä sijoitus.
Kommentit
- " En voi olla täysin täyttänyt C #: tä Linuxissa " – Voisitteko kertoa asiasta tarkemmin? Tarkoitatko, että koko .Net-kehys ei ole ' käytettävissä, koska minulla ei ole ' mitään ongelmia itse C # -kielessä ( tai F #)) Linuxissa?
- @wawa: Tietoni mukaan .Net-kehys vastaa JDK: ta, ja .Net-kehys on käytettävissä vain Windowsille, kun taas JDK on saatavana useille käyttöjärjestelmille ' s. Jos tämä ei ole oikein, voin muokata vastaustani (ja muuttaa myös mielipiteeni).
- Luulen, että läheisempi analogia olisi JDK: n perusluokan kirjasto. BCL: ssä on standardoituja ja standardoimattomia osia. Monoprojekti toteuttaa sekä standardoidut että suuren osan standardoimattomista kappaleista.
- @wawa: Kiitos tiedoista. Harkitsen antaa C #: lle kokeilla Monoa. Silti minulla on silti melko vahva tunne, että C # on paljon vahvemmin sidottu Microsoftiin kuin Java Oracleen (tai aikaisemmin Suniin).
Vastaa
Entä " mikä ohjelmistokehys, joka sisältää ohjelmointikielen " parempi?
Olet unohtanut sisällyttää muita asioita, kuten " ympäristö ", jonka kanssa työskentelet.
-
Aiotko työskennellä vain Windows-käyttöjärjestelmässä, mutta sinun ei tarvitse olla alhainen, ja sillä on paljon muistia ja muita resursseja?
Valitse .NET kehyksenä Windowsissa ja käytä C #: ta.
-
Aiotko työskennellä vain Windowsissa, mutta sen ei tarvitse olla matala, MUTTA, ei onko sinulla paljon resursseja?
Valitse Delphi Framework (ja Object Pascal Delphi -ohjelmointikieli tai Lazarus Object Pascal -ohjelmointikieli)
-
Onko sovelluksesi pakollinen tukea seitsemää ral-alustat, kuten peli, eri matkapuhelimissa?
Valitse Java Framework ja Java-ohjelmointikieli.
-
Onko Linux Linux, jossa KDE on graafinen käyttöliittymä?
Valitse QT-kehys, C ++: lla
-
Onko Linux graafisen käyttöliittymän, jossa Gnome?
Valitse GObject / GLib-kehys , C ++: lla
-
Aiotko työskennellä monien matalan tason toimintojen kanssa, kuten ajureiden kehittäminen?
Tavallinen C tai C ++, jota käytetään useissa käyttöjärjestelmissä Järjestelmät, vakiokirjastojen kanssa.
Vain 2 senttiäni.
Kommentit
- En ' en ole varma siitä, mistä 3. Älypuhelimet ovat nykyään erittäin suosittuja ja AFAIK, ne kaikki tukevat C #: ta jossakin muodossa, mutta vain Android tukee Javaa.
- Ei ' t Delphi kuollut? 🙂
- @ šljaker Ei, mutta, ei ' ole kovin suosittuja opinnäytetyöpäiviä.
- @svick: Se on valhe. Androidia lukuun ottamatta Java on jossain muodossa olemassa myös iOS: ssä, Symbianissa, WinMossa, Blackberryssä, Maemossa ja WebOS: ssa (eli kaikessa, mikä merkitsee tai on edelleen merkitystä; älä ' saa minut alkuun jopa pienemmillä alustoilla). Android, Blackberry ja Symbian virallisesti tukevat Java-kehitystyötä; Sun tuki aiemmin Java-sovellusta iOS: ssä, vaikka Apple ei pidä siitä. Java on ensisijainen kehityskieli Android- ja Blackberry-puhelimissa. En voi ' sanoa samaa C #: lla, AFAICT sitä ' tukee vain virallisesti WinMo.
vastaus
Jos teet haun, kompastut todennäköisesti keskusteluun parhaista ohjelmointikielistä. Tässä on yksi hakutuloksista – http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html – Java näyttää edelleen olevan suosituin kieli.
Java yritti poistaa joitain C ++: n puutteita (ja helpottaa ohjelmoijien elämää ei-reaaliaikaisissa ja ei-kriittisissä sovelluksissa). C # on myöhäinen tullut juhliin, ja välttänyt joitain Java-kielen puutteita. C # on edistynyt paljon (koska Microsoftilla on paljon määräysvaltaa siihen), kun taas Java-kehitykset estettiin pitkäksi ajaksi sidosryhmien välisen ristiriidan vuoksi.
Vastaus
Pari asiaa, joita ei ole vielä mainittu:
C # on parempi kuin C ++, koska:
Se poistaa otsikkotiedostoilla, mikä tarkoittaa suurta yksinkertaisuutta.
C # on parempi kuin Java, koska:
Se tukee sekä käyttäjän määrittelemää viitetyyppiä (luokka) että arvotyyppiä (rakenne). tyypit, jotka, jos tiedät mitä olet tekemässä, voivat tuottaa merkittäviä suorituskykyetuja.
Se tukee edustajia, jotka ovat kuin yhden menetelmän rajapintoja, mikä yksinkertaistaa huomattavasti usein esiintyvien rakenteiden koodausta, joihin liittyy yhden menetelmän objekteja.
Kommentit
- Voitteko selittää, millä tavalla sekä viitetyyppien että arvotyyppien saaminen voi tuottaa suorituskykyetuja C #: ssä?
- Esimerkiksi, jos haluat saada joukon tietueita , Java-ohjelmassa sinulla ei ole muuta vaihtoehtoa kuin kuvata tietueesi luokan avulla, joten matriisi on joukko viitteitä moniin erikseen varattuihin objekteihin. C #: ssä voit kuvata tietueesi strukturilla, joten matriisi on vain yksi jatkuva muistialue, joka sisältää rakenteesi peräkkäin, kuten kohdassa C.
- Toisena esimerkkinä, jos haluat Jos haluat määrittää pienen uuden tyypin (tyyppi, joka sopisi konesanaan), sinun ei tarvitse määrittää uutta luokkaa sille; voit yksinkertaisesti tehdä siitä rakenteen, joten se tottelee arvosemantiikkaa. Tällaisten rakenteiden välittäminen ei ole kalliimpaa kuin viittausten lähettäminen esineisiin, mutta sinulla on etu siitä, että et kohdista, rakenna ja jätä esineitä.
- Ymmärrän. Joten luokat ovat instantioituneet kasaan ja niihin pääsee viitteiden kautta, kun taas rakenteet ovat instantioidut pinossa (?)
- Melkein oikein. Ainoa epätarkkuus tässä lausunnossa on, että kasa löytyy rakenteesta, jos se on upotettu toisen objektin sisään tai jos se on joukko rakenteita. Ja se löytyy myös kasasta, jos se koskaan tulee ruutuun, täsmälleen samalla tavalla kuin arvotyypit on ruudussa Java.
Vastaa
Sinun tulisi valita paras kieli odotettua ympäristöäsi ja asiantuntemustasi varten.
Valitse C #, jos työskentelet vain Microsoftin ympäristössä. Vaikka C # on standardoitu ISO / IEC 23270: 2003 -standardin mukaisesti, Microsoftin versio on ainoa täydellinen toteutus. Useita kielen tärkeimpiä osia ei kuulu standardin piiriin, joten ne ovat Microsoftin patenttien alaisia. Kukaan muu ei ota käyttöön täysin yhteensopivaa versiota kielestä muille järjestelmille, joten itse asiassa olet toimittajan lukittu Microsoft Windowsiin ja .Netiin niin kauan kuin käytät kieltä. Jos etsit taitoja mobiilimarkkinoilla, kannattaa etsiä toista kieltä.
Java toimii, mutta sillä on paljon yleiskustannuksia osittain sellaisten ominaisuuksien kuin roskien keräys vuoksi. Java / ISO / IEC eivät myöskään ole standardoineet Java-järjestelmää, joten sinulla ei ole takeita, jos vaihdat Java-alustoja ja -versioita, vain Sun / Oraclen parhaat tavoitteet. Jos aiot lopulta työskennellä Androidin kanssa, tämä on ehdottomasti oikea tapa . Androidin ohjelmointi on pohjimmiltaan Java, muutamalla muutoksella.
C ++ on standardoitu ja melkein kaikki kääntäjät noudattavat kansainvälistä standardia, joten olet taatusti käyttäytynyt, mutta kieli ei suojaa sinua itseltäsi. Puhdistus ja ylivuoto on tarkistettava itse. Tämä ei ole vaikeaa. C / C ++ -ohjelmoijat ovat tehneet näitä monien vuosien ajan. Apple käyttää tavoite C: tä kaikkeen, joten jos haluat tavoittaa Applen, suosittelen kokeilemaan tätä.
Jos huomaat itsesi jättävän Windowsin jossakin vaiheessa, suosittelen, että opit sekä C / C ++: n että Java: n – jotka molemmat ovat tällä hetkellä myyntikelpoisia.
Vastaus
Suhteessa C ++ vs C # (koska en ole riittävän taitava Java-käyttöjärjestelmässä), tässä puuttuu kyky käyttää matalan tason sisältöä Windowsissa. Et esimerkiksi voi kehittää natiivinäyttöohjainta C #: ssa (vielä), mutta voit käyttää sitä C ++: lla. Tämä ei tee C ++: sta parempaa. Näen C ++: n ja C #: n kokoonpanona vs. C.
C # on minun tarkastele paljon tehokkaammin, jos tarkastelet aikaa, joka kuluu ominaisuuden tosiasialliseen käyttöönottoon. .Net-ajonaikaisen suorituskyvyn rangaistus on vähäinen 99%: lle kehitetyistä sovelluksista. Sillä voi olla merkitystä, jos käytät tiukkaa silmukkaa, kyllä kaikin keinoin, mutta useimmiten sovellus on käyttämättömänä ja odottaa kaikenlaista tuloa, signaalia tai keskeytystä (levyn IO, painikkeen napsautus, verkko, animaation valmistuminen).
CLR-kirjasto kaikilla hänen toiminnoilla on jokin muu r suuri hyöty. Kun koulutin C #: ta nuoremmille kehittäjille, useimmat heistä sanoivat pitävänsä luokkien, jäsenten ja nimitilojen loogisesta nimeämiskäytännöstä. Menetelmän ominaisuuden löytäminen oli loogista SDK: ssa, mikä Visual Basic 5: ssä oli vakava virhe. Tämä on auttanut heitä valtavasti kirjaston omaksumisessa. Kun olet oppinut kielen syntaksin, uuden kirjaston oppiminen on tärkeää, jotta saisit hyvän käsityksen mistä tahansa SDK: sta. Se säästää sinua pyörän keksimisestä uudelleen.