Jakie są podobieństwa między Perlem a Javą? [Zamknięte]
14
Zdecydowałem, że uczę się Java jako drugiego języka (jestem programistą Perla). Ale po przeczytaniu kilku samouczków online naprawdę nie mogę znaleźć podobieństw między nimi. Co zrozumiem podczas nauki języka Java?
Zacznij od początku, decydując „LUBIĘ TEN JĘZYK!”. Ilekroć natkniesz się na coś trudnego, pamiętaj o swojej decyzji i zaoszczędź sobie dużo szlifowania zębów i ciągnięcia włosów.
Perl jest wysokopoziomowym, uniwersalnym, zinterpretowanym, dynamicznym językiem programowania. Java jest językiem programowania wysokiego poziomu, ogólnego przeznaczenia, głównie z pojedynczym paradygmatem.
W oprogramowaniu komputerowym język programowania ogólnego (GPL) jest językiem programowania zaprojektowanym do pisania oprogramowania w wielu różnych dziedzinach aplikacji.
W gruncie rzeczy oznacza to, że wszystko, co możesz zrobić z Perlem, możesz także zrobić z Javą. I jak wspomina @KyleHodgson , obie ich składnie pochodzą z C i C ++, a składnia prostych rzeczy, takich jak forpętle i ifinstrukcje, jest zasadniczo taka sama - a jak zauważa @DipanMehta , obie są wyrzucane na śmieci . I oczywiście oba są niezwykle popularne i mają żywe społeczności.
Ale na tym kończą się podobieństwa. Perl jest paradygmatem obsługującym szeroki zakres paradygmatów programowania:
Perl nie zachęca do jednego paradygmatu, są one zasadniczo równe i możesz swobodnie wybierać to, co według ciebie najlepiej pasuje do tego, co budujesz, nie ograniczając się oczywiście do jednego paradygmatu, który możesz łączyć ze sobą. Z drugiej strony Java jest głównie językiem obiektowym opartym na klasach. Istnieje wsparcie dla programowania ogólnego, ale jako początkujący powinieneś myśleć o Javie jako ściśle obiektowym języku obiektowym.
Więc Perl pozwala na więcej niż jeden sposób na uporządkowanie kodu 1 , podczas gdy Java tylko jeden. To nie jest złe (lub dobre), jest po prostu inne. Jeśli nie napisałeś żadnego zorientowanego obiektowo kodu Perla, Java może początkowo wydawać się trochę obca. Nie zniechęcaj się, orientacja obiektowa jest czymś, czego ostatecznie musisz się nauczyć, jeśli rozważasz karierę w tworzeniu oprogramowania, a nauka Java jest dobrym sposobem na poznanie podstawowych pojęć orientacji obiektowej - nie jest to doskonały sposób, ale zdecydowanie dobry sposób.
I jak wiadomo, Perl jest interpretowany, podczas gdy Java jest ... cóż ... całkowicie inną bestią . W Javie piszesz kod tak jak w Perlu, a następnie go kompilujesz . Wynikiem nie jest plik wykonywalny, ale kod bajtowy Java . Ten format pośrednictwa jest wykonywany (wreszcie!) Na wirtualnej maszynie Java , która jest nieco analogiczna do interpretera Perla. JVM musi być wcześniej zainstalowany, aby program Java mógł zostać uruchomiony, podobnie jak musisz zainstalować interpreter Perla, aby wykonać skrypt Perla 2 .
Pochodząc z tła Perla, najważniejszą rzeczą do zapamiętania jest krok kompilacji do kodu bajtowego: Za każdym razem, gdy wprowadzasz zmiany do pliku źródłowego Java, musisz go ponownie skompilować. Na początku może się to wydawać szalone, ale kompilacja ma bardzo przyjemną konsekwencję: na tym etapie sprawdzany jest kod pod kątem różnych błędów, a kompilator odmawia zakończenia procesu, jeśli taki istnieje, i czasami pomoże ci zidentyfikować błędy za pomocą pomocne wiadomości (zawsze są wiadomości, ale tylko czasami są pomocne).
Dynamiczny język programowania to termin szeroko stosowany w informatyce, aby opisać klasę języków programowania wysokiego poziomu, które wykonują w czasie wykonywania wiele typowych zachowań, które inne języki mogłyby wykonać podczas kompilacji, jeśli w ogóle. Zachowania te mogą obejmować rozszerzanie programu, dodawanie nowego kodu, rozszerzanie obiektów i definicji lub modyfikowanie systemu typów, wszystko podczas wykonywania programu.
Mówi się, że język programowania jest dynamicznie wpisywany, gdy większość jego sprawdzania typów jest wykonywana w czasie wykonywania, a nie w czasie kompilacji.
Mówi się, że język programowania używa pisania statycznego, gdy sprawdzanie typu odbywa się w czasie kompilacji, a nie w czasie wykonywania.
Co, mówiąc najprościej, oznacza to, że w Javie musisz zadeklarować typ zmiennych i metod przed ich użyciem. Istnieją inne różnice, ale nie chciałbym zepsuć radości z ich samodzielnego odkrywania :)
I w końcu jest jedna bardzo ważna różnica: Java jest ukochanym językiem akademii 5 i świata korporacyjnego, podczas gdy rzadko spotykasz Perla w środowisku akademickim (tam, gdzie ją poznałem), a jego perspektywy kariery maleją (wciąż sporo zadań, ale tak blisko jak Java, .Net lub PHP). Nie będę komentować powodów, tylko stwierdzam (smutne) fakty. Ponieważ nadal jesteś bardzo młody, ucząc się języka Java, będziesz nieco lepiej przygotowany do uzyskania stopnia naukowego na kierunku informatyka, jeśli zdecydujesz się pójść tą drogą.
Oczywiście nie poddawaj się Perlowi, ale eksploruj Javę. Fakt, że są one bardziej różne niż podobne, oznacza również, że nauczysz się zupełnie innych podejść i mentalności programowania, to trudna ścieżka, ale ostatecznie sprawi, że będziesz lepszym programistą.
2 Społeczność Perla aktywnie bada możliwości wirtualnej maszyny Perla za pośrednictwem Parrot .
3 Dynamiczny nie zawsze oznacza dynamiczne wpisywanie.
4 Perl jest dynamicznie typowany dla typów zdefiniowanych przez użytkownika, typowany statycznie w odniesieniu do rozróżniania tablic, skrótów, skalarów i podprogramów, i silnie typowany przez use strict, więc zasadniczo jest to język systemowy o zmiennym typie, ale aby zachować poczucie rozsądku, nazwijmy to dynamicznie wpisane.
W porównaniu z Perlem Java nie jest językiem wysokiego poziomu. Napisanie czegoś wymaga znacznie więcej kodu Java niż kodu Perla.
tchrist
1
@tchrist Co ma wspólnego kod z tym, czy język jest językiem wyższym, czy wyższym / niższym niż inny język?
yannis
1
@YannisRizos To dość łatwa odpowiedź. Jeśli wymaga to więcej kodu, nie masz do czynienia z wystarczająco wysoką warstwą abstrakcji. Jednym rażącym przykładem jest podejrzana obsługa ciągów Java. Nie obsługuje on wysokopoziomowej koncepcji abstrakcyjnych punktów kodu Unicode, z wyjątkiem silnika wyrażeń regularnych w Javie 7. To sprawia, że jest dużo malarkey ze względu na to, jak niski poziom języka Java jest porównywany z Perlem.
tchrist
@tchrist Subiektywność tego terminu nie pozwala na wiele rozsądnego porównania, linie są zbyt rozmyte, a oba języki mają niezwykle szeroki zakres funkcji, z których niektóre są bardzo wysokie, a niektóre niskie. Będę więc nadal uważał, że są na tym samym poziomie i nie będę się o to martwić. Miałem podobną rozmowę tutaj , który zainspirował mnie do nie tracić czasu porównując języki;)
Yannis
@YannisRizos Nie można znaleźć koncepcji wysokiego poziomu w Javie, której brakuje w Perlu, ale można znaleźć wiele koncepcji wysokiego poziomu w Perlu, której brakuje w Javie. Zatem Perl jest na wyższym poziomie. Perl ma wskaźniki funkcji; Java nie. Perl ma przeciążenie operatora; Java nie. Perl ma deterministyczne czynniki destrukcyjne; Java nie. Perl może przeciążać funkcje według typu zwracanego; Java nie może. Mogę iść tą drogą bardzo długo. Oczywiście nadal będziesz „czuć”, jakkolwiek najbardziej ci się podoba i z jakiegokolwiek powodu, ale nie jest to wynikiem subiektywnej analizy.
tchrist
2
Obaj używają składni podobnej do C - średników, nawiasów klamrowych i tym podobnych. Osobiście, kiedy kilka lat temu próbowałem przejść z Perla na Javę - największą rzeczą, która mnie zaskoczyła, było programowanie obiektowe. Opracowałem kilka przedmiotów w Perlu, ale próba wyobrażenia sobie życia w Królestwie Rzeczowników bolała mnie głowa.
@downvote, dlaczego? (Nie jestem tak zakochany w odpowiedzi, po prostu ciekawi mnie, co uważacie za takie problematyczne).
Kyle Hodgson,
1
Pchnięcie nożem w alternatywną odpowiedź, ponieważ obecnie wybrana wydaje się koncentrować na różnicach między nimi (naprawdę nie ma zbyt wielu podobieństw między Perlem a Javą).
Podobieństwa
Oba są podobne do litery C (mają pętle, szelki i średniki)
Są one przede wszystkim konieczne
Nie produkuj skompilowanych plików binarnych
Oboje są bardzo dojrzali
Oba są testowane w bitwie w przedsiębiorstwie (Perl więcej jako klej do operacji i Java więcej jako aplikacje / usługi)
Oba są popularne
Obie obsługują orientację obiektową
Oba mają szeroką gamę dostępnych ram
Obaj opublikowali książki o nich
Oba są na wyższym poziomie niż C / montaż
Oba są „powolne” (dla różnych, specyficznych scenariuszy spowolnienia, w których ani C / montaż)
Jeśli Twój kod Perla jest bardzo rygorystyczny i ortogonalny (dobrze przetestowany, dobrze udokumentowany, używa łosia lub ścisłej orientacji obiektowej), wtedy te koncepcje będą bardzo dobrze pasować do Java, ponieważ Java jest wyjątkowo ortogonalna i nie jest tak ekspresyjna.
Odpowiedzi:
Perl jest wysokopoziomowym, uniwersalnym, zinterpretowanym, dynamicznym językiem programowania. Java jest językiem programowania wysokiego poziomu, ogólnego przeznaczenia, głównie z pojedynczym paradygmatem.
Oba są na wysokim poziomie :
i ogólnego przeznaczenia :
W gruncie rzeczy oznacza to, że wszystko, co możesz zrobić z Perlem, możesz także zrobić z Javą. I jak wspomina @KyleHodgson , obie ich składnie pochodzą z C i C ++, a składnia prostych rzeczy, takich jak
for
pętle iif
instrukcje, jest zasadniczo taka sama - a jak zauważa @DipanMehta , obie są wyrzucane na śmieci . I oczywiście oba są niezwykle popularne i mają żywe społeczności.Ale na tym kończą się podobieństwa. Perl jest paradygmatem obsługującym szeroki zakres paradygmatów programowania:
Perl nie zachęca do jednego paradygmatu, są one zasadniczo równe i możesz swobodnie wybierać to, co według ciebie najlepiej pasuje do tego, co budujesz, nie ograniczając się oczywiście do jednego paradygmatu, który możesz łączyć ze sobą. Z drugiej strony Java jest głównie językiem obiektowym opartym na klasach. Istnieje wsparcie dla programowania ogólnego, ale jako początkujący powinieneś myśleć o Javie jako ściśle obiektowym języku obiektowym.
Więc Perl pozwala na więcej niż jeden sposób na uporządkowanie kodu 1 , podczas gdy Java tylko jeden. To nie jest złe (lub dobre), jest po prostu inne. Jeśli nie napisałeś żadnego zorientowanego obiektowo kodu Perla, Java może początkowo wydawać się trochę obca. Nie zniechęcaj się, orientacja obiektowa jest czymś, czego ostatecznie musisz się nauczyć, jeśli rozważasz karierę w tworzeniu oprogramowania, a nauka Java jest dobrym sposobem na poznanie podstawowych pojęć orientacji obiektowej - nie jest to doskonały sposób, ale zdecydowanie dobry sposób.
I jak wiadomo, Perl jest interpretowany, podczas gdy Java jest ... cóż ... całkowicie inną bestią . W Javie piszesz kod tak jak w Perlu, a następnie go kompilujesz . Wynikiem nie jest plik wykonywalny, ale kod bajtowy Java . Ten format pośrednictwa jest wykonywany (wreszcie!) Na wirtualnej maszynie Java , która jest nieco analogiczna do interpretera Perla. JVM musi być wcześniej zainstalowany, aby program Java mógł zostać uruchomiony, podobnie jak musisz zainstalować interpreter Perla, aby wykonać skrypt Perla 2 .
Pochodząc z tła Perla, najważniejszą rzeczą do zapamiętania jest krok kompilacji do kodu bajtowego: Za każdym razem, gdy wprowadzasz zmiany do pliku źródłowego Java, musisz go ponownie skompilować. Na początku może się to wydawać szalone, ale kompilacja ma bardzo przyjemną konsekwencję: na tym etapie sprawdzany jest kod pod kątem różnych błędów, a kompilator odmawia zakończenia procesu, jeśli taki istnieje, i czasami pomoże ci zidentyfikować błędy za pomocą pomocne wiadomości (zawsze są wiadomości, ale tylko czasami są pomocne).
Co prowadzi nas do ostatniej dużej różnicy:
Perl jest dynamiczny 3 :
i dynamicznie wpisywane 4 :
a Java jest wpisana statycznie :
Co, mówiąc najprościej, oznacza to, że w Javie musisz zadeklarować typ zmiennych i metod przed ich użyciem. Istnieją inne różnice, ale nie chciałbym zepsuć radości z ich samodzielnego odkrywania :)
I w końcu jest jedna bardzo ważna różnica: Java jest ukochanym językiem akademii 5 i świata korporacyjnego, podczas gdy rzadko spotykasz Perla w środowisku akademickim (tam, gdzie ją poznałem), a jego perspektywy kariery maleją (wciąż sporo zadań, ale tak blisko jak Java, .Net lub PHP). Nie będę komentować powodów, tylko stwierdzam (smutne) fakty. Ponieważ nadal jesteś bardzo młody, ucząc się języka Java, będziesz nieco lepiej przygotowany do uzyskania stopnia naukowego na kierunku informatyka, jeśli zdecydujesz się pójść tą drogą.
Oczywiście nie poddawaj się Perlowi, ale eksploruj Javę. Fakt, że są one bardziej różne niż podobne, oznacza również, że nauczysz się zupełnie innych podejść i mentalności programowania, to trudna ścieżka, ale ostatecznie sprawi, że będziesz lepszym programistą.
1 „Tim Toady”
2 Społeczność Perla aktywnie bada możliwości wirtualnej maszyny Perla za pośrednictwem Parrot .
3 Dynamiczny nie zawsze oznacza dynamiczne wpisywanie.
4 Perl jest dynamicznie typowany dla typów zdefiniowanych przez użytkownika, typowany statycznie w odniesieniu do rozróżniania tablic, skrótów, skalarów i podprogramów, i silnie typowany przez
use strict
, więc zasadniczo jest to język systemowy o zmiennym typie, ale aby zachować poczucie rozsądku, nazwijmy to dynamicznie wpisane.5 Do tego stopnia, że Joel Spolsky pisze w The Perils of JavaSchools .
źródło
Obaj używają składni podobnej do C - średników, nawiasów klamrowych i tym podobnych. Osobiście, kiedy kilka lat temu próbowałem przejść z Perla na Javę - największą rzeczą, która mnie zaskoczyła, było programowanie obiektowe. Opracowałem kilka przedmiotów w Perlu, ale próba wyobrażenia sobie życia w Królestwie Rzeczowników bolała mnie głowa.
źródło
Pchnięcie nożem w alternatywną odpowiedź, ponieważ obecnie wybrana wydaje się koncentrować na różnicach między nimi (naprawdę nie ma zbyt wielu podobieństw między Perlem a Javą).
Podobieństwa
Jeśli Twój kod Perla jest bardzo rygorystyczny i ortogonalny (dobrze przetestowany, dobrze udokumentowany, używa łosia lub ścisłej orientacji obiektowej), wtedy te koncepcje będą bardzo dobrze pasować do Java, ponieważ Java jest wyjątkowo ortogonalna i nie jest tak ekspresyjna.
źródło