Quelles sont les similitudes entre Perl et Java? [fermé]

14

Je pense que j'apprends Java comme deuxième langue (je suis développeur Perl). Mais juste en lisant un peu des tutoriels en ligne, je ne trouve vraiment aucune similitude entre les deux. Que vais-je comprendre facilement lors de l'apprentissage de Java?

Dynamique
la source
Commencez par décider "J'AIME CETTE LANGUE!". Chaque fois que vous rencontrez quelque chose de difficile, souvenez-vous de votre décision et évitez de grincer des dents et de tirer les cheveux.
1
Lecture recommandée: Gorilla vs. Shark

Réponses:

32

Perl est un langage de programmation dynamique, interprété et polyvalent de haut niveau. Java est un langage de programmation de haut niveau, à usage général, principalement à paradigme unique, de type statique.

Donc, les deux sont de haut niveau :

Un langage de programmation de haut niveau est un langage de programmation avec une forte abstraction des détails de l'ordinateur.

et à usage général :

Dans les logiciels informatiques, un langage de programmation à usage général (GPL) est un langage de programmation conçu pour être utilisé pour écrire des logiciels dans une grande variété de domaines d'application.

Essentiellement, cela signifie que tout ce que vous pouvez faire avec Perl, vous pouvez également le faire avec Java. Et comme @KyleHodgson le mentionne , leurs syntaxes dérivent de C et C ++ et la syntaxe des trucs simples comme les forboucles et les ifinstructions est essentiellement la même - et comme le note @DipanMehta , les deux sont des ordures ménagères . Et bien sûr, les deux sont extrêmement populaires et ont des communautés dynamiques.

Mais c'est là que s'arrêtent les similitudes. Perl est multi-paradigme, prenant en charge un large éventail de paradigmes de programmation:

Perl n'encourage pas un seul paradigme, ils sont essentiellement égaux et vous êtes libre de choisir celui qui vous semble le mieux adapté à ce que vous construisez, sans bien sûr vous limiter à un seul paradigme, vous pouvez mélanger et assortir. D'un autre côté, Java est principalement un langage orienté objet basé sur une classe. Il existe un support pour la programmation générique, mais en tant que débutant, vous devriez considérer Java comme strictement un langage orienté objet basé sur une classe.

Perl permet donc plus d'une façon de structurer votre code 1 , alors que Java une seule. Ce n'est pas une mauvaise chose (ou une bonne chose), c'est juste différent. Si vous n'avez écrit aucun code Perl orienté objet, Java peut sembler un peu étranger au premier abord. Ne vous découragez pas, l'orientation objet est quelque chose que vous devrez éventuellement apprendre, si vous envisagez une carrière dans le développement de logiciels, et l'apprentissage de Java est un bon moyen d'apprendre les concepts de base de l'orientation objet - pas un moyen parfait, mais définitivement un bon moyen.

Et comme vous le savez, Perl est interprété, alors que Java est ... enfin ... une bête complètement différente . En Java, vous écrivez votre code comme vous le feriez en Perl, puis vous le compilez . Le résultat n'est pas un exécutable, mais un bytecode Java . Ce format d'intermédiation est exécuté (enfin!) Dans la machine virtuelle Java , qui est quelque peu analogue à l'interpréteur Perl. Une machine virtuelle Java doit être installée au préalable pour qu'un programme Java s'exécute, de manière similaire à la façon dont vous devez installer un interpréteur Perl pour exécuter un script Perl 2 .

Venant d'un arrière-plan Perl, la chose la plus importante à retenir est l'étape de compilation en bytecode: chaque fois que vous modifiez un fichier source Java, vous devez le recompiler. Cela peut sembler fou au début, mais la compilation a une très bonne conséquence: votre code est vérifié pour une variété d'erreurs à ce stade, et le compilateur refuse de terminer le processus s'il y en a, et parfois vous aidera à localiser les erreurs avec messages utiles (Il y a toujours des messages, mais seulement parfois ils sont utiles).

Ce qui nous amène à la dernière différence majeure:

Perl est dynamique 3 :

Le langage de programmation dynamique est un terme largement utilisé en informatique pour décrire une classe de langages de programmation de haut niveau qui exécutent au moment de l'exécution de nombreux comportements courants que d'autres langages peuvent exécuter lors de la compilation, le cas échéant. Ces comportements peuvent inclure l'extension du programme, en ajoutant du nouveau code, en étendant les objets et les définitions, ou en modifiant le système de type, tout cela pendant l'exécution du programme.

et tapé dynamiquement 4 :

Un langage de programmation est dit être typé dynamiquement lorsque la majorité de sa vérification de type est effectuée au moment de l'exécution plutôt qu'au moment de la compilation.

et Java est typé statiquement :

On dit qu'un langage de programmation utilise un typage statique lorsque la vérification de type est effectuée pendant la compilation plutôt que pendant l'exécution.

Ce qui, pour le dire le plus simplement possible, signifie qu'en Java, vous devez déclarer le type de vos variables et méthodes avant de les utiliser. Il y a d'autres différences, mais je ne voudrais pas gâcher le plaisir de les découvrir par vous-même :)

Et, enfin, il y a une différence très importante: Java est le langage chéri du monde universitaire 5 et du monde de l'entreprise, alors que vous rencontrerez rarement Perl dans un cadre universitaire (où je l'ai rencontrée pour la première fois), et ses perspectives de carrière se réduisent (encore pas mal d'emplois, mais loin d'être aussi nombreux que Java, les langages .Net ou PHP). Je ne commenterai pas les raisons, je ne fais qu'énoncer les (tristes) faits. Puisque vous êtes encore très jeune, en apprenant Java, vous serez un peu mieux préparé pour un diplôme en informatique, si vous choisissez de suivre cette voie.

N'abandonnez pas Perl, bien sûr, mais explorez Java. Le fait qu'ils soient plus différents que similaires signifie également que vous apprendrez des approches et des mentalités de programmation assez différentes, c'est un chemin difficile mais qui finira par faire de vous un meilleur programmeur.

1 "Tim Toady"

2 La communauté Perl explore activement la possibilité d'une machine virtuelle Perl, via Parrot .

3 Dynamique ne signifie pas toujours typé dynamiquement.

4 Perl est typé dynamiquement pour les types définis par l'utilisateur, typé statiquement en ce qui concerne les tableaux, les hachages, les scalaires et les sous-routines, et fortement typé via use strict, c'est donc essentiellement un langage système de type variable, mais pour garder un certain sens, appelons-le dynamiquement tapé.

5 Au point d'abuser, comme l'écrit Joel Spolsky dans The Perils of JavaSchools .

yannis
la source
6
Comparé à Perl, Java n'est pas un langage de haut niveau. Il faut beaucoup plus de code Java pour écrire quelque chose que pour le code Perl.
tchrist
1
@tchrist Qu'est-ce que la quantité de code a à voir avec le fait qu'une langue soit de haut niveau ou de niveau supérieur / inférieur à une autre langue?
yannis
1
@YannisRizos C'est assez facile de répondre. Si cela prend plus de code, vous n'avez pas affaire à une couche d'abstraction suffisamment élevée. Un exemple flagrant est avec la gestion des chaînes douteuses de Java. Il ne prend pas en charge le concept de haut niveau des points de code Unicode abstraits, sauf dans le moteur regex de Java 7. Cela fait beaucoup de malarkey en raison de la façon dont un langage Java de bas niveau est comparé à Perl.
tchrist
@tchrist La subjectivité du terme ne laisse pas beaucoup de place à une comparaison sensée, les lignes sont trop floues et les deux langues ont un éventail extrêmement large de fonctionnalités, dont certaines sont de très haut niveau et d'autres de faible intensité. Donc, je continuerai à les penser comme étant au même niveau et je ne m'en inquiéterai pas beaucoup. J'ai eu une conversation similaire ici , ce qui m'a inspiré pour ne pas perdre de temps à comparer les langues;)
yannis
@YannisRizos Vous ne pouvez pas trouver en Java un concept de haut niveau qui manque à Perl, mais vous pouvez trouver de nombreux concepts de haut niveau en Perl qui manquent à Java. Ainsi, Perl est de niveau supérieur. Perl a des pointeurs de fonction; Java ne le fait pas. Perl a une surcharge d'opérateur; Java ne le fait pas. Perl a des destructeurs déterministes; Java ne le fait pas. Perl peut surcharger les fonctions par type de retour; Java ne peut pas. Je peux continuer ainsi très longtemps. Bien sûr, vous continuerez à vous «sentir» comme bon vous semble et pour quelque raison que ce soit, mais cela n'est pas dû à une analyse subjective.
tchrist
2

Eh bien, ils utilisent tous les deux une syntaxe de type C - les points-virgules, les accolades et autres. Personnellement, lorsque j'ai essayé de passer de Perl à Java il y a quelques années - la plus grande chose qui m'a fait trébucher a été la programmation orientée objet. J'avais développé quelques objets en Perl, mais ça me faisait mal à la tête d'essayer d'imaginer la vie dans le Royaume des Noms.

Kyle Hodgson
la source
@downvote, pourquoi? (Je ne suis pas tellement amoureux de la réponse, juste curieux de savoir ce que vous avez trouvé si problématique.)
Kyle Hodgson
1

Essayer une réponse alternative car celle actuellement sélectionnée semble se concentrer sur les différences entre les deux (vraiment il n'y a pas beaucoup de similitudes entre Perl et Java).

Similitudes

  • Ils sont tous les deux en forme de C (ils ont des boucles et des accolades et des points-virgules)
  • Ils sont principalement impératifs
  • Ni produire des binaires compilés
  • Ils sont tous les deux très matures
  • Ils sont tous deux testés au combat dans l'entreprise (Perl plus comme colle d'opérations et Java plus comme applications / services)
  • Ils sont tous les deux populaires
  • Ils prennent tous deux en charge l'orientation objet
  • Ils ont tous deux un large éventail de cadres disponibles
  • Ils ont tous deux publié des livres à leur sujet
  • Ils sont tous les deux de plus haut niveau que l'assemblage C /
  • Ils sont tous les deux "lents" (pour divers scénarios spécifiques de ralentissement dans la mesure où aucun C / assembly n'est également)
  • Ils gèrent tous les deux la mémoire automatiquement ("garbage collection")
  • Ni hip / cool à l'été 2012
  • Ils sont tous deux ancrés dans la communauté open source
  • Ils sont tous deux disponibles pour de nombreuses plateformes

Si votre code Perl est très rigoureux et orthogonal (bien testé, bien documenté, utilise Moose ou une orientation d'objet stricte), alors ces concepts se porteront très bien dans Java, car Java est extrêmement orthogonal et pas aussi expressif.

Mark Canlas
la source