C # sembra essere popolare in questi giorni. Ho sentito che sintatticamente è quasi lo stesso di Java. Java e C ++ esistono da più tempo. Per quali motivi dovrei scegliere C # su Java e C ++?
C # sembra essere popolare in questi giorni. Ho sentito che sintatticamente è quasi lo stesso di Java. Java e C ++ esistono da più tempo. Per quali motivi dovrei scegliere C # su Java e C ++?
Risposte:
La domanda dovrebbe essere "Quale lingua è più adatta allo sviluppo di applicazioni moderne e tipiche?".
Modifica: ho affrontato alcuni dei commenti qui sotto. Una piccola osservazione: considera che quando hai molte cose in modo nativo, come idiomi, è una grande differenza rispetto all'implementazione o al download e all'uso da soli ogni volta. Quasi tutto può essere implementato in una di queste lingue. La domanda è: cosa ti offrono le lingue in modo nativo.
Quindi, in cima alla mia testa (alcuni argomenti si applicano ad entrambe le lingue) ...
this
argomento del puntatore tipizzato staticamente ) e quindi creare relazioni più dinamiche e flessibili tra le classi. modifica se non sai cosa significa, quindi prova ad assegnare un metodo membro che restituisce void e accetta void a una void (*ptr)()
variabile. I delegati C # portano this
con sé il puntatore, ma l'utente non deve sempre preoccuparsene. Possono semplicemente assegnare un void()
metodo di qualsiasi classe a qualsiasi altro void()
delegato.using
dichiarazione). Anche Java 7 lo supporterà, ma C # lo ha avuto per molto tempo.yield
dichiarazione.this
puntatore e associare il metodo che lo fa a un puntatore a funzione generica (cioè non nella stessa classe), semplicemente non esiste un modo nativo per farlo. In C #, ottieni gratuitamente. Non devi nemmeno sapere come funziona.this
puntatore.using
dichiarazione, ovviamente insieme ai wrapper IDisposable, è un ottimo esempio di RAII. Vedere questo link . Considera che non hai bisogno di RAII tanto in C # come in C ++, perché hai il GC. Per i periodi specifici in cui ne hai bisogno, puoi utilizzare esplicitamente la using
dichiarazione. Un altro piccolo promemoria: liberare memoria è una procedura costosa. GC ha il vantaggio in termini di prestazioni in molti casi (specialmente quando si ha molta memoria). La memoria non perderà e non passerai molto tempo a deallocare. Inoltre, anche l'allocazione è più veloce, poiché non si alloca memoria ogni volta, solo una volta ogni tanto. La chiamata new
sta semplicemente incrementando un puntatore all'ultimo oggetto.new
e delete
, che empiricamente porta sempre a errori qua e là, oppure (con C ++ 11) puoi usare i puntatori automatici in modo nativo, ma tieni presente che aggiungono molti di rumore al codice. Quindi GC ha ancora un vantaggio lì.Windows è il sistema operativo dominante sui computer client. I migliori framework GUI per applicazioni Windows sono Winforms e WPF insieme a .NET Framework . Il miglior linguaggio di programmazione per lavorare con .NET Framework e le sue API è C # . Java non è un'alternativa per questo. E C ++ è un linguaggio più vecchio senza gestione automatica della memoria. C # è simile a C ++ ma ha una gestione automatica della memoria e non devi lavorare con i puntatori, il che ti rende più produttivo. Il C ++ può ancora essere la migliore opzione per alcuni casi, ma non per le applicazioni di database ad alta intensità di modulo che sono comuni nel mondo degli affari.
Se sei abituato a lavorare in ambiente Windows e con C #, avrai bisogno del minimo investimento per imparare IIS per la programmazione del server e Windows Server per l'amministrazione di base.
Se si sta sviluppando un software che verrà distribuito nelle reti aziendali, è probabile che utilizzino un ambiente centrato su Windows utilizzando un Windows Server con Active Directory. In tale ambiente è più semplice integrare e distribuire una soluzione realizzata in C # e .NET Framework .
Personalmente, sono uno sviluppatore Java, non uno sviluppatore C #, ma lavoro con il web. Passerei a C # se stavo sviluppando applicazioni di rete per la rete Windows. Ma preferisco i server Web basati su Java per Linux. Sceglierei C ++ per i sistemi embedded se non avessi molte dipendenze.
Sì, C # è un linguaggio migliore con funzionalità più moderne rispetto a C ++ e Java, ma non è la cosa più importante per scegliere C # .
L'ambiente per il tuo software è molto importante per scegliere C # . Se si lavora in un ambiente con client Windows, server Windows, Active Directory, IIS e forse di SQL Server , allora C # è il linguaggio di gran lunga meglio con il .NET Framework .
Se lavori in un ambiente Unix con ad esempio servizi web, Java sarebbe la mia scelta. E se lavori con sistemi embedded o devi integrarti con dispositivi hardware, C ++ sarebbe una buona scelta.
C # e Java
C # è un linguaggio molto valido se:
C # come linguaggio è più bello di Java in vari modi (migliore sintassi per proprietà, tipi di valore, generici reificati ecc.). Preferisco C # come linguaggio rispetto a Java ma nel grande schema delle cose sono linguaggi abbastanza simili e adatti per applicazioni simili.
D'altra parte, Java ha anche alcuni grandi vantaggi:
Quindi Java vs. C # è una chiamata piuttosto ravvicinata e dipende davvero dal fatto che tu voglia essere nel campo Microsoft o nel campo Open Source / multipiattaforma.
Personalmente, preferisco Java perché:
C / C ++
C / C ++ è sostanzialmente una bestia completamente diversa. Vorrei non consiglio per lo sviluppo di applicazioni di uso generale al giorno d'oggi per i seguenti motivi:
Tuttavia è senza dubbio un'ottima scelta in un certo numero limitato di domini speciali, in particolare:
Quindi, in sostanza, C / C ++ è un'ottima scelta se e solo se ti concentri su uno dei domini in cui è particolarmente adatto.
I heard that syntactically they are almost the same.
Sintatticamente? Chi dà scimmie volanti sulla sintassi? La sintassi è utile solo per una cosa: consentire una migrazione più rapida da linguaggi sintatticamente simili. Questo è tutto.
C # è di gran lunga migliore di Java. Considera il loro supporto per la programmazione generica e funzionale: C # è molto più avanti di Java. Per non parlare dei sovraccarichi dell'operatore e di altre cose buone: C # è di gran lunga migliore. Non è possibile che Java possa essere considerato migliore di C #.
C ++ e C # è più di un concorso. Il C ++ ha un modello di compilazione arcaica incredibilmente fastidioso e un sacco di malattie ereditarie da C, ma i suoi modelli sono enormemente più potenti dei generici, e i suoi approcci di gestione delle risorse sono molto più flessibili e potenti in generale, così come using
un fallimento completo, ed esegue Più veloce.
Bene C#
ha alcune belle funzioni integrate come LINQ
e delegati. Sta ottenendo il meglio da entrambi i mondi - Java
e C++
. Guarda qui per un confronto completo.
Ma il Java
mondo mi piace di più: molto più framework open source e funziona su ogni piattaforma. E non parlarmene Mono
, non è un'opzione affidabile.
Secondo alcune fonti (vedi ad esempio http://www.indeed.com/jobtrends ) C # è ancora meno popolare di Java e popolare come C ++.
C # fornisce funzionalità che mancano a Java, ad esempio il supporto diretto per alcuni modi di dire di programmazione come proprietà, stile di programmazione funzionale e così via. C # ha un livello di astrazione più elevato rispetto a C ++, il che è un vantaggio quando i tempi di sviluppo sono più importanti della velocità del programma.
Personalmente, preferisco ancora i mondi Java / C ++. Come ha detto Petar Minchev, Java ha più framework e applicazioni open source, funziona ovunque, è meno legato a un particolare fornitore e sistema operativo. Il C ++ ha vantaggi simili, anche se il codice spesso necessita di adattamenti che vanno da una piattaforma all'altra. Dato che preferisco sviluppare su Linux e, per quanto ne so, non posso avere pienamente sviluppato C # su Linux, non ho mai avuto un vero interesse per C # perché le mie esigenze di programmazione sono coperte da C, C ++, Java, Scala.
D'altra parte, per molti sviluppatori essere legati a un particolare fornitore non è un problema: Microsoft ha una posizione dominante nel mercato dei sistemi operativi e C # offre molte opportunità di lavoro. Pertanto, molti sviluppatori IMO adottano C # perché, oltre ad essere un linguaggio ricco di funzionalità, è anche un buon investimento.
Che dire di "Quale Framework di sviluppo software, che include un linguaggio di programmazione", è meglio?
Hai dimenticato di includere altre cose, come "l'ambiente" con cui lavorerai.
Lavorerai solo per il sistema operativo Windows, ma non deve essere di basso livello e avere molta memoria e altre risorse?
Scegli .NET come framework su Windows e usa C #.
Lavorerai solo per Windows, ma non deve essere di basso livello, MA non ha molte risorse?
Scegli il Delphi Framework (e il linguaggio di programmazione Object Pascal Delphi o il linguaggio di programmazione Lazarus Object Pascal)
È la tua app. richiesto di supportare diverse piattaforme, come un gioco, in diversi cellulari?
Scegli Java Framework e il linguaggio di programmazione Java.
È Linux con KDE come interfaccia grafica?
Scegli QT framework, con C ++
È Linux con Gnome come interfaccia grafica?
Scegli il framework GObject / GLib, con C ++
Lavorerai con molte operazioni di basso livello, come lo sviluppo di driver?
Plain C o C ++ è usato per diversi sistemi operativi, con librerie standard, come framework.
Solo i miei 2 centesimi.
Se fai una ricerca, probabilmente incapperai in una discussione sui principali linguaggi di programmazione. Ecco uno dei risultati della ricerca - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html - Java sembra essere ancora la lingua più popolare.
Java ha cercato di eliminare alcune delle carenze di C ++ (e di semplificare la vita dei programmatori per applicazioni non in tempo reale e non critiche). Essendo C-ritardatario della festa, C # ha evitato alcune carenze del linguaggio Java. C # ha fatto molti progressi (poiché Microsoft ha molto controllo su di esso) mentre i progressi in Java sono stati bloccati per un considerevole periodo di tempo a causa di conflitti tra le parti interessate.
Un paio di cose che non sono già state menzionate:
C # è meglio di C ++ perché:
Elimina i file di intestazione, il che si traduce in grande semplicità.
C # è meglio di Java perché:
Supporta tipi definiti dall'utente (di classe di riferimento) e di tipo di valore (struct) definiti dall'utente, che, se si sa cosa si sta facendo, può offrire significativi vantaggi in termini di prestazioni.
Supporta i delegati, che sono come interfacce a metodo singolo, semplificando così notevolmente la codifica di costrutti che si verificano frequentemente che coinvolgono oggetti a metodo singolo.
Dovresti scegliere la lingua migliore per il tuo ambiente previsto e la tua esperienza.
Scegli C # se lavori in un ambiente solo Microsoft. Mentre C # è standardizzato secondo ISO / IEC 23270: 2003, la versione di Microsoft rimane l'unica implementazione completa. Diverse parti chiave del linguaggio non sono coperte dallo standard e sono quindi soggette ai brevetti di Microsoft. Nessun altro implementerà una versione completamente compatibile della lingua per altri sistemi, quindi, in effetti, sei un fornitore bloccato su Microsoft Windows e .Net fintanto che usi la lingua. Se stai cercando competenze da utilizzare nel mercato mobile, è meglio cercare un'altra lingua.
Java funziona, ma ha un sacco di sovraccarico, in parte a causa di funzionalità come la garbage collection. Anche Java non è standardizzato da ISO / IEC, quindi non hai garanzie se cambi piattaforme e versioni di Java, solo le migliori intenzioni di Sun / Oracle. Se stai pianificando di lavorare con Android, questa è sicuramente la strada da percorrere. La programmazione di Android è sostanzialmente Java, con alcune modifiche.
Il C ++ è standardizzato e quasi tutti i compilatori seguono lo standard internazionale, quindi hai un comportamento garantito MA il linguaggio non ti protegge da te stesso. Devi eseguire il controllo di pulizia e overflow da solo. Questo non è difficile. I programmatori C / C ++ lo fanno da molti anni. Apple usa l'obiettivo C per tutto, quindi se vuoi mirare ad Apple, ti consiglio di provare questo.
Se ti vedi a lasciare Windows a un certo punto, ti suggerisco di imparare sia C / C ++ che Java, entrambi attualmente commercializzabili.
In relazione a C ++ vs C # (dato che non sono abbastanza esperto in Java), ciò che mi manca qui è la possibilità di accedere a cose di basso livello su Windows. Ad esempio, non è possibile sviluppare un driver di visualizzazione nativo in C # (ancora), ma è possibile con C ++. Ciò non migliora il C ++. Vedo C ++ contro C # come Assembly contro C.
A mio avviso, C # è molto più efficiente se si considera il tempo necessario per implementare effettivamente una funzione. La penalità prestazionale del runtime .Net è trascurabile per il 99% delle applicazioni sviluppate. Può essere importante se stai eseguendo un ciclo stretto, sì in ogni caso, ma la maggior parte delle volte un'applicazione è inattiva, in attesa di qualsiasi tipo di input, segnale o interruzione (IO del disco, clic del pulsante, rete, completamento dell'animazione) .
La libreria CLR con tutte le sue funzioni ha un altro grande vantaggio. Durante l'addestramento di C # per sviluppatori junior, la maggior parte di loro ha affermato di apprezzare la convenzione di denominazione logica di classi, membri e spazi dei nomi. Trovare una caratteristica del metodo era logico in tutto l'SDK, qualcosa a cui Visual Basic 5 era gravemente difettoso. Questo li ha aiutati moltissimo ad adottare la biblioteca. Dopo aver appreso la sintassi di una lingua, imparare una nuova libreria è importante per avere una buona conoscenza di qualsiasi SDK. Ti salva dal reinventare la ruota.