Was sind die Gemeinsamkeiten zwischen Perl und Java? [geschlossen]

14

Ich habe mir vorgenommen, Java als meine zweite Sprache zu lernen (ich bin ein Perl-Entwickler). Aber wenn ich nur ein wenig von den Online-Tutorials lese, kann ich keine Ähnlichkeiten zwischen den beiden feststellen. Was wird mir beim Erlernen von Java leicht fallen?

Dynamisch
quelle
Beginnen Sie mit der Entscheidung "I LIKE THIS LANGUAGE!". Wenn Sie auf etwas Schwieriges stoßen, denken Sie einfach an Ihre Entscheidung und sparen Sie sich viele Zähneknirschen und Haare ziehen.
1
Literaturempfehlung: Gorilla vs. Shark

Antworten:

32

Perl ist eine universelle, interpretierte, dynamische Programmiersprache mit mehreren Paradigmen. Java ist eine allgemeine Programmiersprache auf hoher Ebene, die zumeist aus einem einzigen Paradigma besteht und statisch typisiert ist.

Also sind beide auf hohem Niveau :

Eine High-Level-Programmiersprache ist eine Programmiersprache mit starker Abstraktion von den Details des Computers.

und für allgemeine Zwecke :

In Computersoftware ist eine Allzweck-Programmiersprache (GPL) eine Programmiersprache, die zum Schreiben von Software in einer Vielzahl von Anwendungsbereichen entwickelt wurde.

Im Wesentlichen bedeutet dies, dass Sie alles, was Sie mit Perl tun können, auch mit Java tun können. Und wie @KyleHodgson erwähnt , leiten sich beide Syntaxen von C und C ++ ab, und die Syntax für einfache Dinge wie forSchleifen und ifAnweisungen ist im Wesentlichen dieselbe - und wie bei @DipanMehta- Notizen handelt es sich bei beiden um Garbage Collected . Und natürlich sind beide sehr beliebt und haben lebendige Communities.

Aber hier hören die Ähnlichkeiten auf. Perl ist ein Multiparadigma, das eine Vielzahl von Programmierparadigmen unterstützt:

Perl unterstützt nicht ein einziges Paradigma, sie sind im Wesentlichen gleich und Sie können frei wählen, welches für Sie am besten geeignet ist, was auch immer Sie erstellen, ohne Sie natürlich auf ein einziges Paradigma zu beschränken. Sie können mischen und anpassen. Auf der anderen Seite ist Java meist eine klassenbasierte objektorientierte Sprache. Es gibt Unterstützung für die generische Programmierung, aber als Anfänger sollten Sie sich Java als eine streng klassenbasierte objektorientierte Sprache vorstellen.

Perl bietet also mehr als eine Möglichkeit, Code 1 zu strukturieren , während Java nur eine Möglichkeit bietet. Das ist keine schlechte Sache (oder eine gute Sache), es ist einfach anders. Wenn Sie keinen objektorientierten Perl-Code geschrieben haben, scheint Java zunächst etwas fremd zu sein. Lassen Sie sich nicht entmutigen, die Objektorientierung muss irgendwann erlernt werden, wenn Sie über eine Karriere in der Softwareentwicklung nachdenken, und das Erlernen von Java ist eine gute Möglichkeit, die grundlegenden Konzepte der Objektorientierung zu erlernen - aber keine perfekte Methode Auf jeden Fall ein guter Weg.

Und wie Sie wissen, wird Perl interpretiert, während Java ... nun ja ... ein ganz anderes Biest ist . In Java schreiben Sie Ihren Code wie in Perl und kompilieren ihn dann . Das Ergebnis ist keine ausführbare Datei, sondern ein Java-Bytecode . Dieses Zwischenformat wird (endlich!) In der Java Virtual Machine ausgeführt , die dem Perl-Interpreter etwas analog ist. Zuvor muss eine JVM installiert sein, damit ein Java-Programm ausgeführt werden kann, ähnlich wie Sie einen Perl-Interpreter installieren müssen, um ein Perl-Skript 2 auszuführen .

Das Wichtigste, das Sie von einem Perl-Hintergrund aus wissen sollten, ist der Schritt der Kompilierung in Bytecode: Jedes Mal, wenn Sie eine Änderung an einer Java-Quelldatei vornehmen, müssen Sie diese neu kompilieren. Zunächst mag es verrückt klingen, aber die Kompilierung hat eine sehr schöne Konsequenz: Ihr Code wird in diesem Stadium auf eine Vielzahl von Fehlern überprüft, und der Compiler lehnt es ab, den Vorgang abzuschließen, falls vorhanden, und hilft Ihnen manchmal dabei, die Fehler zu lokalisieren hilfreiche Nachrichten (Es gibt immer Nachrichten, aber nur manchmal sind sie hilfreich).

Was uns zum letzten großen Unterschied bringt:

Perl ist dynamisch 3 :

Dynamische Programmiersprache ist ein Begriff, der allgemein in der Informatik verwendet wird, um eine Klasse von Programmiersprachen auf hoher Ebene zu beschreiben, die zur Laufzeit viele häufig vorkommende Verhaltensweisen ausführen, die andere Sprachen möglicherweise während der Kompilierung ausführen. Zu diesen Verhaltensweisen könnte die Erweiterung des Programms durch Hinzufügen von neuem Code, durch Erweitern von Objekten und Definitionen oder durch Ändern des Typsystems während der gesamten Programmausführung gehören.

und dynamisch getippt 4 :

Eine Programmiersprache wird als dynamisch typisiert bezeichnet, wenn der Großteil ihrer Typüberprüfung zur Laufzeit und nicht zur Kompilierungszeit ausgeführt wird.

und Java ist statisch geschrieben :

Eine Programmiersprache verwendet die statische Typisierung, wenn die Typüberprüfung während der Kompilierung und nicht zur Laufzeit durchgeführt wird.

Dies bedeutet, dass Sie in Java den Typ Ihrer Variablen und Methoden deklarieren müssen, bevor Sie sie verwenden können. Es gibt noch andere Unterschiede, aber ich möchte nicht den Spaß verderben, sie selbst zu entdecken :)

Und schließlich gibt es einen sehr wichtigen Unterschied: Java ist die Liebste Sprache der Wissenschaft 5 und der Unternehmenswelt, während Sie werden selten Perl in einem akademischen Umfeld treffen mehr (wo ich traf sie zuerst), und ihre Karriereperspektiven schrumpfen (noch etliche Jobs, aber bei weitem nicht so viele wie Java, .NET-Sprachen oder PHP). Ich werde nicht auf die Gründe eingehen, sondern nur die (traurigen) Tatsachen darlegen. Da Sie noch sehr jung sind, werden Sie durch das Erlernen von Java ein wenig besser auf ein Informatik-Studium vorbereitet, wenn Sie diesen Weg wählen.

Geben Sie Perl natürlich nicht auf, sondern erkunden Sie Java. Die Tatsache, dass sie sich mehr unterscheiden als ähnliches, bedeutet auch, dass Sie ganz andere Ansätze und Programmiermentalitäten erlernen werden. Es ist ein schwieriger Weg, der Sie letztendlich zu einem besseren Programmierer machen wird.

1 "Tim Toady"

2 Die Perl-Community untersucht aktiv die Möglichkeiten einer virtuellen Perl-Maschine über Parrot .

3 Dynamisch bedeutet nicht immer dynamisch getippt.

4 Perl ist dynamisch typisiert für benutzerdefinierte Typen, statisch typisiert hinsichtlich der Unterscheidung von Arrays, Hashes, Skalaren und Subroutinen und stark typisiert über use strict, daher ist es im Wesentlichen eine Systemsprache mit variablem Typ getippt.

5 Bis zum Missbrauch, wie Joel Spolsky in The Perils of JavaSchools schreibt .

yannis
quelle
6
Im Vergleich zu Perl ist Java keine Hochsprache. Es braucht viel mehr Java-Code als Perl-Code, um etwas zu schreiben.
Tchrist
1
@tchrist Was hat die Menge an Code damit zu tun, ob eine Sprache höher oder niedriger ist als eine andere Sprache?
Yannis
1
@YannisRizos Das ist ziemlich einfach zu beantworten. Wenn mehr Code benötigt wird, haben Sie es nicht mit einer ausreichend hohen Abstraktionsebene zu tun. Ein eklatantes Beispiel ist Javas zwielichtiges Saitenhandling. Das übergeordnete Konzept der abstrakten Unicode-Codepunkte wird nur in der Regex-Engine in Java 7 unterstützt. Dies führt zu erheblichen Fehlern, da Java im Vergleich zu Perl eine untergeordnete Sprache ist.
Tchrist
@tchrist Die Subjektivität des Begriffs lässt nicht viel Raum für einen vernünftigen Vergleich, die Linien sind zu verschwommen, und beide Sprachen haben eine extrem breite Palette von Merkmalen, von denen einige sehr gut und andere schlecht sind. Also werde ich sie weiterhin als gleichwertig betrachten und mir darüber keine großen Sorgen machen. Ich hatte ein ähnliches Gespräch hier , was mich inspirierte keine Zeit zu verlieren Sprachen zu vergleichen;)
Yannis
@YannisRizos Sie können in Java kein Konzept auf hohem Niveau finden, das Perl fehlt, aber Sie können in Perl viele Konzepte auf hohem Niveau finden, denen Java fehlt. Perl ist also eine höhere Ebene. Perl hat Funktionszeiger; Java nicht. Perl hat Operatorüberladung; Java nicht. Perl hat deterministische Destruktoren; Java nicht. Perl kann Funktionen nach Rückgabetyp überladen. Java kann nicht. Ich kann diesen Weg sehr lange gehen. Sie werden sich natürlich weiterhin "wohlfühlen", wie es Ihnen auch am besten gefällt, und aus welchem ​​Grund auch immer, aber es liegt nicht an subjektiven Analysen.
Donnerstag,
2

Nun, beide verwenden eine C-ähnliche Syntax - Semikolons, geschweifte Klammern und dergleichen. Persönlich, als ich vor einigen Jahren versuchte, von Perl auf Java umzusteigen, war das größte Problem, das mir aufgefallen ist, die objektorientierte Programmierung. Ich hatte einige Objekte in Perl entwickelt, aber es tat meinem Kopf weh, mir das Leben im Königreich der Nomen vorzustellen.

Kyle Hodgson
quelle
@ Downvote, warum? (Ich bin nicht so verliebt in die Antwort, nur neugierig, was Sie so problematisch fanden.)
Kyle Hodgson
1

Probieren Sie eine alternative Antwort aus, da sich die aktuell ausgewählte auf die Unterschiede zwischen beiden zu konzentrieren scheint (tatsächlich gibt es nicht viele Ähnlichkeiten zwischen Perl und Java).

Ähnlichkeiten

  • Sie sind beide C-like (sie haben Schleifen und Klammern und Semikolons)
  • Sie sind grundsätzlich zwingend
  • Weder kompilierte Binärdateien erzeugen
  • Sie sind beide sehr ausgereift
  • Sie sind beide im Unternehmen kampferprobt (Perl eher als Betriebssystem und Java eher als Anwendungen / Dienste).
  • Sie sind beide beliebt
  • Beide unterstützen die Objektorientierung
  • Beide haben eine breite Palette von Frameworks zur Verfügung
  • Sie haben beide Bücher über sie veröffentlicht
  • Sie sind beide übergeordneter als C / Assembly
  • Sie sind beide "langsam" (für verschiedene, spezifische Szenarien von "langsam", in denen sich C / Assembly nicht befindet).
  • Beide verwalten den Speicher automatisch ("Garbage Collection")
  • Weder sind hip / cool ab Sommer 2012
  • Sie sind beide in der Open-Source-Community verankert
  • Sie sind beide für viele Plattformen verfügbar

Wenn Ihr Perl-Code sehr streng und orthogonal ist (gut getestet, gut dokumentiert, verwendet Moose oder strenge Objektorientierung), sind diese Konzepte für Java sehr gut geeignet, da Java extrem orthogonal und nicht so aussagekräftig ist.

Mark Canlas
quelle