Wydaje się, że C # jest obecnie popularny. Słyszałem, że składniowo jest prawie taki sam jak Java. Java i C ++ istnieją od dłuższego czasu. Z jakich powodów powinienem wybrać C # zamiast Java i C ++?
Wydaje się, że C # jest obecnie popularny. Słyszałem, że składniowo jest prawie taki sam jak Java. Java i C ++ istnieją od dłuższego czasu. Z jakich powodów powinienem wybrać C # zamiast Java i C ++?
Odpowiedzi:
Pytanie powinno brzmieć: „Który język lepiej nadaje się do nowoczesnego, typowego tworzenia aplikacji?”.
Edycja: Odniosłem się do niektórych komentarzy poniżej. Mała uwaga: zastanów się, że gdy masz wiele rzeczy natywnie, jako idiomy, to duża różnica niż wdrażanie lub pobieranie i używanie ich za każdym razem. Prawie wszystko można zaimplementować w dowolnym z tych języków. Pytanie brzmi - co natywnie zapewniają ci języki.
Więc z góry mojej głowy (niektóre argumenty dotyczą obu języków) ...
this
argument wskaźnika), a tym samym tworzyć bardziej dynamiczne i elastyczne relacje między klasami. edytuj, jeśli nie wiesz, co to oznacza, a następnie spróbuj przypisać metodę członkowską zwracającą wartość void i akceptującą void dla void (*ptr)()
zmiennej. Delegaci C # noszą ze sobą this
wskaźnik, ale użytkownik nie zawsze musi się tym przejmować. Mogą po prostu przypisać void()
metodę dowolnej klasy dowolnemu innemu void()
delegatowi.using
instrukcja). Java 7 również to obsługuje, ale C # ma go już od dłuższego czasu.yield
oświadczeniu.this
wskaźnika i powiązać metodę, która robi to ze wskaźnikiem funkcji ogólnej (tj. Nie w tej samej klasie), to po prostu nie ma natywnego sposobu, aby to zrobić. W C # dostajesz za darmo. Nie musisz nawet wiedzieć, jak to działa.this
wskaźnika.using
oświadczenie, oczywiście wraz z opakowaniami IDisposable, jest doskonałym przykładem RAII. Zobacz ten link . Weź pod uwagę, że nie potrzebujesz RAII tak bardzo w C # jak w C ++, ponieważ masz GC. W określonych potrzebach możesz jawnie użyć using
instrukcji. Kolejne małe przypomnienie: zwolnienie pamięci jest kosztowną procedurą. GC ma przewagę wydajności w wielu przypadkach (szczególnie, gdy masz dużo pamięci). Pamięć nie wycieknie i nie będziesz spędzać dużo czasu na zwolnieniu. Co więcej, alokacja jest również szybsza, ponieważ nie alokujesz pamięci za każdym razem, tylko raz na jakiś czas. Wywołanie new
to po prostu zwiększenie wskaźnika ostatniego obiektu.new
i delete
, co empirycznie zawsze prowadzi do błędów tu i tam, lub (z C ++ 11) możesz używać natywnie wskaźników automatycznych, ale pamiętaj, że dodają dużo i dużo hałasu do kodu. Więc GC wciąż ma tam przewagę.Windows jest dominującym systemem operacyjnym na komputerach klienckich. Najlepsze frameworki GUI dla aplikacji Windows to Winforms i WPF wraz z .NET Framework . Najlepszym językiem programowania do pracy z .NET Framework i jego interfejsami API jest C # . Java nie jest alternatywą dla tego. A C ++ to starszy język bez automatycznego zarządzania pamięcią. C # jest podobny do C ++, ale ma automatyczne zarządzanie pamięcią i nie musisz pracować ze wskaźnikami, które zwiększają produktywność. C ++ może nadal być najlepszą opcją w niektórych przypadkach, ale nie w przypadku aplikacji bazodanowych wymagających dużej ilości formularzy, które są powszechne w biznesie.
Jeśli jesteś przyzwyczajony do pracy w środowisku Windows i w języku C #, będziesz potrzebować najmniejszej inwestycji, aby nauczyć się IIS do programowania serwerów i Windows Server do podstawowej administracji.
Jeśli opracowujesz oprogramowanie, które ma zostać wdrożone w sieciach firmowych, prawdopodobne jest, że korzystają one ze środowiska skoncentrowanego na systemie Windows za pomocą systemu Windows Server z usługą Active Directory. W takim środowisku najłatwiej jest zintegrować i wdrożyć rozwiązanie wykonane w C # i .NET Framework .
Osobiście jestem programistą Java, nie programistą C #, ale pracuję w sieci. Przejdę na C #, gdybym rozwijał aplikacje sieciowe dla sieci Windows. Ale wolę serwery sieciowe oparte na Javie dla Linuxa. Wybrałbym C ++ dla systemów wbudowanych, gdyby nie było wielu zależności.
Tak, C # jest lepszym językiem z bardziej nowoczesnymi funkcjami niż C ++ i Java, ale to nie jest najważniejsze przy wyborze C # .
Środowisko dla twojego oprogramowania jest najważniejsze przy wyborze C # . Jeśli pracujesz w środowisku z klientami Windows, serwery Windows, Active Directory, IIS , a może SQL Server następnie C # jest zdecydowanie najlepszym językiem z .NET Framework .
Jeśli pracujesz w środowisku uniksowym z np. Usługami internetowymi, Java będzie moim wyborem. A jeśli pracujesz z systemami wbudowanymi lub musisz zintegrować się z urządzeniami sprzętowymi, C ++ byłby dobrym wyborem.
C # i Java
C # to bardzo dobry język, jeśli:
C # jako język jest ładniejszy niż Java na różne sposoby (lepsza składnia dla właściwości, typów wartości, zmienionych generycznych itp.). Wolę C # jako język niż Java, ale w ogólnym rozrachunku są to dość podobne języki i odpowiednie dla podobnych aplikacji.
Z drugiej strony Java ma również kilka dużych zalet:
Tak więc Java vs. C # jest dość blisko i naprawdę sprowadza się do tego, czy chcesz być w obozie Microsoft, czy w obozie Open Source / cross-platform.
Osobiście wolę Javę, ponieważ:
C / C ++
C / C ++ to w zasadzie zupełnie inna bestia. Bym nie polecam go dla rozwoju aplikacji ogólnego przeznaczenia w dzisiejszych czasach z następujących powodów:
Jest to jednak niewątpliwie świetny wybór w pewnej ograniczonej liczbie specjalnych domen, w szczególności:
Zasadniczo C / C ++ to świetny wybór tylko wtedy, gdy koncentrujesz się na jednej z domen, w których jest szczególnie odpowiedni.
I heard that syntactically they are almost the same.
Składniowo? Kto daje latającym małpom składnię? Składnia jest korzystna tylko z jednego powodu: umożliwia szybszą migrację z podobnych języków składniowych. Otóż to.
C # jest znacznie lepszy niż Java. Zastanów się nad ich ogólną i funkcjonalną obsługą programowania - C # wyprzedza Javę. Nie wspominając o przeciążeniach operatora i innych dobrych rzeczach - C # jest znacznie lepiej prezentowany. Nie ma mowy, aby Java mogła być uważana za lepszą niż C #.
C ++ i C # to raczej konkurs. C ++ ma niewiarygodnie irytujący archaiczny model kompilacji i szereg starszych chorób z C, ale jego szablony są znacznie potężniejsze niż generyczne, a metody zarządzania zasobami są znacznie bardziej elastyczne i potężne, podobnie jak using
całkowita porażka i wykonuje szybciej.
Dobrze C#
ma kilka fajnych wbudowanych funkcji, takich jak LINQ
i delegaci. Wydobywa to, co najlepsze z obu światów - Java
i C++
. Zajrzyj tutaj, aby zobaczyć pełne porównanie.
Ale Java
świat bardziej mi się podoba - dużo więcej frameworków open source i działa na każdej platformie. I nie mów mi o tym Mono
- nie jest to niezawodna opcja.
Według niektórych źródeł (patrz np. Http://www.indeed.com/jobtrends ) C # jest nadal mniej popularny niż Java i tak popularny jak C ++.
C # zapewnia funkcje, których brakuje w Javie, np. Bezpośrednie wsparcie dla niektórych idiomów programowania, takie jak właściwości, funkcjonalny styl programowania i tak dalej. C # ma wyższy poziom abstrakcji niż C ++, co jest zaletą, gdy czas programowania jest ważniejszy niż szybkość programu.
Osobiście nadal wolę światy Java / C ++. Jak powiedział Petar Minchev, Java ma więcej struktur i aplikacji typu open source, działa wszędzie, jest mniej związana z konkretnym dostawcą i systemem operacyjnym. C ++ ma podobne zalety, chociaż kod często wymaga adaptacji przechodzących z jednej platformy na drugą. Ponieważ wolę rozwijać się w systemie Linux i, o ile wiem, nie mogę w pełni rozwinąć języka C # w systemie Linux, nigdy nie interesowałem się językiem C #, ponieważ moje potrzeby programistyczne są pokrywane przez C, C ++, Java, Scala.
Z drugiej strony, dla wielu programistów przywiązanie do konkretnego dostawcy nie stanowi problemu: Microsoft ma dominującą pozycję na rynku systemów operacyjnych, a C # daje wiele możliwości pracy. Dlatego wielu programistów IMO przyjmuje C #, ponieważ oprócz tego, że jest językiem bogatym w funkcje, jest to również dobra inwestycja.
Co powiesz na „Które ramy programistyczne, w tym język programowania”, są lepsze?
Zapomniałeś dołączyć inne rzeczy, takie jak „środowisko”, z którym będziesz pracować.
Czy zamierzasz pracować tylko dla systemu operacyjnego Windows, ale nie musi to być niski poziom i mieć dużo pamięci i innych zasobów?
Wybierz .NET jako platformę dla Windows i użyj C #.
Czy zamierzasz pracować tylko dla systemu Windows, ale nie musi to być poziom niski, ALE, nie ma dużo zasobów?
Wybierz Delphi Framework (i język programowania Object Pascal Delphi lub język programowania Lazarus Object Pascal)
To twoja aplikacja. wymagane do obsługi kilku platform, takich jak gra, w różnych telefonach komórkowych?
Wybierz Java Framework i język programowania Java.
Czy to Linux z KDE jako interfejsem graficznym?
Wybierz framework QT z C ++
Czy to Linux z Gnome jako interfejsem graficznym?
Wybierz framework GObject / GLib z C ++
Czy zamierzasz pracować z wieloma niskopoziomowymi operacjami, takimi jak opracowywanie sterowników?
Zwykły C lub C ++ jest używany w kilku systemach operacyjnych, ze standardowymi bibliotekami, jako framework.
Tylko moje 2 centy.
Jeśli przeprowadzisz wyszukiwanie, prawdopodobnie natkniesz się na dyskusję na temat najlepszych języków programowania. Oto jeden z wyników wyszukiwania - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html - Java nadal wydaje się najpopularniejszym językiem.
Java próbowała usunąć niektóre niedociągnięcia C ++ (i uprościć życie programistom w aplikacjach nie działających w czasie rzeczywistym i niekrytycznych). C # spóźniając się na imprezę, uniknął pewnych niedociągnięć języka Java. C # zrobił duży postęp (ponieważ Microsoft ma nad nim dużą kontrolę), podczas gdy postępy w Javie były blokowane przez znaczny okres czasu z powodu konfliktu między jego interesariuszami.
Kilka rzeczy, o których jeszcze nie wspomniano:
C # jest lepszy niż C ++, ponieważ:
Eliminuje pliki nagłówkowe, co przekłada się na wielką prostotę.
C # jest lepszy niż Java, ponieważ:
Obsługuje zarówno typy zdefiniowane przez użytkownika typu referencyjnego (klasa), jak i typu wartości (struct), które, jeśli wiesz, co robisz, mogą przynieść znaczące korzyści w zakresie wydajności.
Obsługuje delegatów, które są jak interfejsy jednoprocesowe, co znacznie upraszcza kodowanie często występujących konstrukcji zawierających obiekty jednoprocesowe.
Powinieneś wybrać najlepszy język dla swojego oczekiwanego środowiska i swojej wiedzy.
Wybierz C #, jeśli pracujesz w środowisku Microsoft. Podczas gdy C # jest znormalizowany zgodnie z ISO / IEC 23270: 2003, wersja Microsoft pozostaje jedyną pełną implementacją. Kilka kluczowych części języka nie jest objętych standardem, a zatem podlegają patentom Microsoft. Nikt inny nie wdroży w pełni kompatybilnej wersji języka dla innych systemów, więc w efekcie jesteś zablokowany na Microsoft Windows i .Net tak długo, jak długo używasz tego języka. Jeśli szukasz umiejętności korzystania z rynku mobilnego, najlepiej poszukaj innego języka.
Java działa, ale ma sporo narzutu, częściowo ze względu na takie funkcje, jak wyrzucanie elementów bezużytecznych. Java również nie jest znormalizowana przez ISO / IEC, więc nie masz żadnych gwarancji, jeśli zmienisz platformy i wersje Java, tylko najlepsze intencje Sun / Oracle. Jeśli w końcu planujesz pracować z Androidem, zdecydowanie jest to odpowiedni sposób. Programowanie Androida jest w zasadzie Java, z kilkoma zmianami.
C ++ jest ustandaryzowany i prawie wszystkie kompilatory są zgodne z międzynarodowym standardem, więc masz gwarantowane zachowanie, ALE język nie chroni przed tobą. Musisz samodzielnie wykonać czyszczenie i kontrolę przepełnienia. To nie jest trudne. Programiści C / C ++ robią to od wielu lat. Apple używa Celu C do wszystkiego, więc jeśli chcesz celować w Apple, zalecamy spróbować zamiast tego.
Jeśli zauważysz, że w pewnym momencie zostawiasz system Windows w tyle, sugeruję nauczenie się zarówno C / C ++, jak i Java - które są obecnie dostępne na rynku.
W stosunku do C ++ vs C # (ponieważ nie jestem wystarczająco biegły w Javie), brakuje mi tutaj dostępu do rzeczy niskiego poziomu w systemie Windows. Na przykład nie można opracować natywnego sterownika wyświetlania w języku C # (jeszcze), ale można to zrobić w języku C ++. To nie czyni C ++ lepszym. Widzę C ++ kontra C # jako Asembler kontra C.
Moim zdaniem C # jest o wiele bardziej wydajny, jeśli spojrzysz na czas potrzebny na wdrożenie funkcji. Ograniczenie wydajności środowiska uruchomieniowego .Net jest znikome w przypadku 99% opracowanych aplikacji. Może to mieć znaczenie, jeśli używasz ciasnej pętli, tak, na pewno, ale przez większość czasu aplikacja jest bezczynna, czeka na jakiekolwiek wejście, sygnał lub przerwanie (IO dysku, kliknięcie przycisku, sieć, zakończenie animacji) .
Biblioteka CLR ze wszystkimi jego funkcjami ma jeszcze jedną wielką zaletę. Kiedy trenowałem C # dla młodszych programistów, większość z nich stwierdziła, że podoba im się logiczna konwencja nazewnictwa klas, członków i przestrzeni nazw. Znalezienie cechy metody było logiczne w całym zestawie SDK, coś w czym Visual Basic 5 był poważnie wadliwy. To ogromnie pomogło im w przyjęciu biblioteki. Po nauczeniu się składni języka nauczenie się nowej biblioteki ma duże znaczenie dla dobrego opanowania dowolnego zestawu SDK. Dzięki temu nie musisz od nowa wymyślać koła.