Perché C # ha molte più funzionalità di Java? [chiuso]

13

Si noti che questo non intende essere un argomento Java vs. C #. Sono un programmatore Java senza esperienza C #, che chiede solo per curiosità.

Ho fatto qualche lettura su C # e sembra che abbia molte più funzionalità di Java. Alcuni esempi:

  • Tipo di inferenza.
  • dynamic parola chiave.
  • I delegati.
  • Parametri opzionali.
  • Lambda e LINQ (in realtà non ho idea di cosa siano).
  • Proprietà.

Tuttavia Java in realtà non presenta nulla che C # non abbia.

La mia domanda è: perché C # ha molte più caratteristiche native di Java? E perché Java non ha aggiunto alcuni di questi nel corso degli anni, ad esempio Proprietà o inferenza di tipo? I progettisti del linguaggio Java adottano un approccio più semplicistico? Qual è la ragione di questo?

    
posta Aviv Cohn 03.07.2014 - 11:52
fonte

2 risposte

21

Diversi motivi:

  1. C # è arrivato dopo Java; la versione 1 era una palese fregatura di Java 1.4, quindi praticamente aveva tutto ciò che Java aveva a quel punto.
  2. Ma poi C # si sviluppò molto più velocemente di Java, perché era una nuova eccitante piattaforma (e aveva un driver assolutamente brillante in Anders Hejlsberg, il padre di Turbo Pascal). Ciò ha permesso loro di evitare tutti gli errori di Java che erano diventati ovvi, aggiungendo al contempo tutto ciò che i praticanti di Java desideravano avere.
  3. Nel frattempo, Java era ostacolato da rigidi obiettivi di compatibilità con le versioni precedenti e da un ritmo di sviluppo un po 'più lento, in parte perché cercava disperatamente di guadagnarsi la reputazione di soluzione standard, d'impresa, affidabile, non sorprendente per il 95% di programmatori non geniali. A questo sono riusciti, forse un po 'troppo bene.

Il risultato è che Java ha ora un po 'di lacuna di funzionalità. Ha piani enormi per il futuro, ma come al solito con questo genere di cose tutto richiede un po 'più del previsto.

    
risposta data 03.07.2014 - 12:42
fonte
4

Vorrei aggiungere alla risposta di Kilian che una grande differenza tra Java e C # è che i progettisti C # controllano non solo la lingua, ma anche l'IDE standard.

Aggiungere qualcosa come i metodi di estensione e le classi parziali potrebbe essere un incubo nel controllo delle versioni di sviluppo / controllo se gli IDE non lo supportassero correttamente.

Poiché ci si aspetta che sia possibile compilare Java con la propria piattaforma di scelta (Eclipse, Netbeans, vi + Ant), l'aggiunta di funzionalità che infrangono il codice (e l'utilizzo di queste per sviluppare estensioni aggiuntive come LINQ) è molto più complicata di solo dicendo "dal momento che IntelliSense si occuperà di questi casi, non dobbiamo preoccuparci".

Inoltre, a volte vale la pena notare il valore delle funzionalità anziché il suo numero. Ad esempio, le proprietà automatiche sono carine e certamente desidero che Java sia supportato da questo, ma alla fine significa solo che devi scrivere qualche riga di codice in più in Java. Allo stesso modo, trovo che chiamare "eventi" una caratteristica sia un po 'approssimativo, dal momento che sono poco più di delegati appositamente etichettati, e solo una copia raffinata del modello di Observer già usato da Java (quindi ancora, in Java ha bisogno di più espliciti codifica)

Non fraintendetemi, penso che C # abbia introdotto diverse innovazioni degne di nota, e mi auguro che un giorno i grandi capi di Oracle si sveglino e lanciano un vero "Java 2" per includerne alcuni, ma il divario non è così ovvio come i tuoi punti di domanda.

    
risposta data 03.07.2014 - 17:39
fonte

Leggi altre domande sui tag