41 votes

Dois-je apprendre le Perl 5 OO ou de l'Orignal en premier?

Je suis encore relativement nouveau pour la Programmation Perl, mais je sais comment Perl 5 OO fonctionne essentiellement. Cependant, je n'ai jamais créé un projet avec Perl 5 OO, donc je suis assez sûr que je vais courir dans de nombreux écueils.

Récemment, j'ai découvert le battage médiatique autour de l' Orignal module. J'ai vérifié une partie de la documentation sur le CPAN et je l'ai trouvé très intéressant et m'aide en tant que développeur de beaucoup. En outre, il semble être très stable et fiable.

Devrais-je plutôt intensifier le travail avec la base de Perl 5 OO syntaxe jusqu'à ce que je me sens très familier avec elle (à savoir ce qui se passe dans les stades), ou pensez-vous que je devrais plutôt aller de l'avant et de lancer directement le développement d'applications à l'aide de l'Orignal? Ou devrais-je même donner de la Souris de l'essayer?

Toutes les pensées et les expériences qui sont appréciés.

Merci à l'avance!

37voto

perigrin Points 4147

Comme tout le monde, a souligné l'apprentissage des bases de la façon dont OO en Perl est fait va vous aider, non seulement avec la plupart des non-moose paquets, mais aussi à l'Orignal lui-même depuis plus profond de l'Orignal, fondamentalement, tout simplement utilise un standard de Perl OO mise en page. Fondamentalement, une fois que vous êtes à l'aise pour vous de comprendre ce que l'Orignal::Manuel::Unsweetend montre, vous aurez une assez bonne compréhension de la OO principes en Perl. Damian Conway Orientée Objet en Perl livre est une excellente introduction à l'Orientation de l'Objet de la période de non seulement Perl saveur(s). Je lui conseillerais de le lire, ou au moins la première moitié.

Enfin il n'y a pas de raison d'utiliser la Souris (une alternative à l'Orignal), sauf si vous tomber dans deux catégories spécifiques, vous avez dur de démarrage des contraintes de temps ou dur exigences de dépendance. Si vous ne tombez pas dans ces deux pays, l'Orignal sera presque toujours une meilleure réponse.

Divulgation: je suis un Orignal développeur, et nous avons travaillé sur et avec la Souris.

32voto

brian d foy Points 71781

La plupart des Perl monde n'est pas d'Orignal, de sorte que vous aurez toujours besoin de notions de base pour utiliser l'ensemble des autres modules.

28voto

Schwern Points 33677

À mon humble avis, j'ai appris à l'Orignal en premier. Pourquoi? Oui, la plupart OO Perl n'est pas fait faire de l'Orignal. Oui, l'Orignal est lent (bien essayer de la Souris). Oui, il y a beaucoup de pratique, les raisons pour lesquelles vous allez avoir à fini par apprendre à le faire à la dure. Mais il y a une raison impérieuse.

Parce que Perl façon de faire de OO les croisements de votre cerveau.

Le point est d'apprendre les bonnes OO, pas de Perl OO. Une fois que vous comprenez la programmation orientée-objet en tant que concept, vous pouvez appliquer la technique spécifique de la langue. L'inverse n'est pas tellement vrai.

Perl stock OO ne vous donne pas beaucoup à tous. Vous avez à construire toutes vos pièces vous-même. Vous devez apprendre tous les petits détails de la façon dont tout cela fonctionne. Il vous enseigne les concepts brisés comme des "objets de la magie de hachage références" et "méthodes sont juste des sous-routines $de soi que le premier argument" et "classes sont juste des paquets". En bref, OO Perl, vous apprend à prêter attention à la façon dont tout fonctionne et c'est l'EXACT OPPOSÉ de la façon dont OO est censé fonctionner.

OO est de ne PAS se soucier des détails de la façon dont les choses fonctionnent. Le point de l'ensemble d'un objet est sa CHOSE vous DEMANDER de faire le travail et vous ne se soucient pas comment il le fait. Un bon objet, c'est comme un bon gardien. Vous demandez au concierge de nettoyer le sol, et alors que vous vous éloignez. Quand vous revenez, le sol est nettoyé. Il n'a pas d'importance si le concierge utilisé un balai, une brosse à dents, de leur langue ou déchiré le sol et installé un nouveau. Le sol est propre et que tout ce qui compte.

En outre, la seule manière de composer des objets Perl vous donne de la boîte est l'héritage. L'héritage est ce que tout le monde apprend d'abord lors de l'apprentissage d'OO et de ses dangereuses et de l'esprit de déformation. OO est orienté OBJET, pas d'héritage axé sur les résultats. L'important, c'est l'encapsulation de l'objet, pas que vous pouvez partager du code. Un débutant programmeur avec l'héritage est comme donner une arme pour le bébé. L'héritage Multiple est comme de leur donner un obusier. Les débutants immédiatement saut à l'héritage et a créé une grande hiérarchies enchevêtrées. Ils n'apprennent jamais à propos de la délégation ou de la composition ou des rôles ou des mixin ou de l'une de la demi-douzaine de bien meilleures façons de laisser des objets de partager et de construire des comportements.

L'orignal vous donne tout ce qui, hors de la boîte, de sorte que vous pouvez vous concentrer sur l'écriture de l'objet et non sur la rédaction d'un OO système.

Une fois que vous avez appris à le faire OO à droite, puis vous pouvez en apprendre Perl OO et comment le faire à une vingtaine d'autres moyens, douze d'entre eux mal.

21voto

jrockway Points 23734

Honnêtement, je ne suis pas sûr de la façon de précieuses connaissances de Perl raw OO primitives est pour l'écriture de nouveaux codes plus. Je n'ai pas utilisé @ISA ou "utilisation de base" ou de "bénir" dans mon code pour un temps très long; tout OO je fais, c'est via l'Orignal MOP. (Je ne rebless cas, bien sûr, mais j'utilise $meta->rebless_instance au lieu de "bénir". Beaucoup plus propre!)

De toute façon, je voudrais vous enseigner l'Orignal en premier. Il est facile à prendre en main et d'obtenir immédiatement productifs, et vous pouvez ramasser les détails que vous devenez plus compétent en Perl et la programmation en général.

À titre d'exemple:

#!/usr/bin/env perl

use strict;
use warnings;
use feature ':5.10'; # for 'say'

use MooseX::Declare;

class Point {
    has [qw/x y/] => ( is => 'ro', isa => 'Num', required => 1 );

    method new_from_ordered_pair(ClassName $class: Num $x, Num $y){
        return $class->new( x => $x, y => $y );
    }

    method distance(Point $a: Point $b){
        return sqrt( ($a->x - $b->x)**2 + ($a->y - $b->y)**2 );
    }

}

my $origin = Point->new_from_ordered_pair(0,0);
my $point  = Point->new_from_ordered_pair(3,4);

say '(3,4) is '. $point->distance($origin). ' units away from the origin.';

Remarquez comment il n'y a pas plus de combats avec les détails de Perl à la mise en œuvre. Vous pouvez facilement soucier des détails de votre programme à la place de comment faire de l'OO en Perl. Vous n'avez même pas à faire un "Point.h" du fichier, vous pouvez avoir la définition de la classe en ligne.

Je pense également que ce code serait immédiatement compréhensible pour presque n'importe quel programmeur -- même ceux qui ne sont pas familiers avec les détails de Perl ou de l'Orignal (ou MooseX::Déclarer).

(BTW, cet exemple a travaillé un peu bizarrement avec les ":" la syntaxe dans les signatures de méthode. Normalement, vous obtenez une instance de vous-même, appelée $à soi-même comme le premier arg. Si vous fournissez quelque chose d'autre avant un : dans la signature, vous pouvez modifier le type et le nom de la variable. J'ai aussi écrit "new_from_ordered_pair", de sorte que vous ne voudriez pas avoir à taper x => $x, y => $y que les arguments nouveaux à chaque fois. C'est juste un peu de sucre que je pense est agréable, rien de magique qui se passe ici.)

Enfin, vous obtenez beaucoup ici "gratuitement". Les essayer, et notez les messages d'erreur utiles:

Point->new; # x is required
Point->new_from_ordered_pair('foo', 'bar'); # x needs to be a number
$point->distance('some string'); # $b needs to be a Point

Vous obtenez tout cela pour gratuit, et il permet de déboguer votre programme plus facile. Il n'y a pas de raison pour l'éviter, il rend la programmation plus agréable (et cela rend votre programme plus fiable... gratuitement!)

Oh, encore une chose. Avec l'Orignal, vous pouvez connaître le fonctionnement de votre classe. Cela peut ne pas être important, tout de suite, mais il peut être agréable d'avoir. Ouvrir Devel::REPL, de type " faire "test.pl" " pour charger la classe Point, et puis dire quelque chose comme:

map { $_->name } Point->meta->get_all_attributes;

Le résultat est ['x', 'y']. Sans avoir le code source, vous pouvez savoir quels sont les attributs de la classe. Essayez de faire ça avec "la plaine" OO Perl. (Ce genre de chose est ce qui rend les riches MooseX:: espace de noms possibles. Vous ne pourriez pas besoin d'introspection, mais vous permettra de profiter de la possibilité d'utiliser des modules fiables sur le CPAN.)

18voto

Quentin Points 325526

L'orignal est bonne, mais la décision au sujet de l'apprentissage dépend de ce que vos objectifs sont.

Si vous voulez juste écrire vos propres programmes à l'aide de OO techniques, alors qu'il pourrait très bien être la peine de plonger dans l'Orignal (et à s'inquiéter des autres OO techniques plus tard)

Si vous voulez devenir "un développeur Perl", puis vous rencontrerez plus de non-Moose OO code de l'Orignal OO code, de sorte que vous devriez apprendre à composer avec le codage sans Moose première. Je suggère Orientée Objet en Perl par Damian Conway comme un bon point de départ.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X