Należy pamiętać, że nie jest to argument Java vs. C #. Jestem programistą Java bez doświadczenia w C #, pytam z ciekawości.
Czytałem trochę na C # i wygląda na to, że ma znacznie więcej funkcji niż Java. Wiele przykładów:
- Wnioskowanie typu.
dynamic
słowo kluczowe.- Delegaci
- Parametry opcjonalne.
- Lambda i LINQ (właściwie nie mam pojęcia, co to jest).
- Nieruchomości.
Jednak Java tak naprawdę nie zawiera niczego, czego nie ma w C #.
Moje pytanie brzmi: dlaczego C # ma znacznie więcej funkcji natywnych niż Java? I dlaczego Java nie dodawała niektórych z nich przez lata, na przykład właściwości lub wnioskowanie o typie? Czy projektanci języka Java przyjmują bardziej uproszczone podejście? Jaki jest tego powód?
Odpowiedzi:
Kilka powodów:
W rezultacie Java ma teraz trochę luki w funkcjach. Ma wielkie plany na przyszłość, ale jak zwykle przy tego typu rzeczach wszystko trwa nieco dłużej niż planowano.
źródło
Dodałbym do odpowiedzi Kiliana, że jedną wielką różnicą między Javą a C # jest to, że projektanci C # kontrolują nie tylko język, ale także standardowe IDE.
Dodanie czegoś takiego jak metody rozszerzeń i klasy częściowe może być koszmarem w wersjach programistycznych / kontrolnych, jeśli środowiska IDE nie będą go odpowiednio obsługiwać.
Ponieważ oczekuje się, że będziesz w stanie skompilować Javę na wybranej platformie (Eclipse, Netbeans, vi + Ant), dodawanie funkcji, które łamią kod (i używanie ich do opracowywania dodatkowych rozszerzeń, takich jak LINQ) jest o wiele bardziej skomplikowane niż tylko powiedzenie „ ponieważ IntelliSense poradzi sobie z tymi przypadkami, nie musimy się martwić ”.
Ponadto czasami warto zauważyć wartość funkcji zamiast jej liczby. Na przykład właściwości automatyczne są ładne i na pewno chciałbym, aby Java to obsługiwała, ale w końcu oznacza to tylko, że musisz napisać jeszcze kilka wierszy kodu w Javie. Podobnie uważam, że nazywanie funkcji „Zdarzenia” jest nieco błędne, ponieważ są one czymś więcej niż specjalnie oznaczonymi delegatami, a jedynie udoskonaloną kopią wzorca Observer już używanego przez Javę (z drugiej strony w Javie potrzebuje bardziej wyraźnego kodowanie)
Nie zrozumcie mnie źle, myślę, że C # wprowadził kilka ważnych innowacji i życzę, aby kiedyś wielcy szefowie Oracle obudzili się i uruchomili prawdziwą „Javę 2”, aby uwzględnić niektóre z nich, ale różnica nie jest tak oczywista, jak twoja pytania
źródło