Moduł Spiffy
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
O czym to jest
Moduł Spiffy to moduł ułatwiający programowanie obiektowe w Perlu w jasny - choć jeszcze nie ustandardyzowany - sposób. Moduł napisany został w taki sposób by wykluczyć konieczność korzystania z jakichkolwiek innych dodatkowych modułów oferujących wspomaganie programowania obiektowego, obiecując że użycie use Spiffy qw( -Base ); rozwiąże wszystkie nasze obiektowe problemy.
Opis
Spiffy pozwala nam zapomnieć o każdorazowym uwzględnianiu w pisanych przez
nas metodach: my $self = shift;
Kolejna możliwość skrócenia kodu pojawia się przy wywoływaniu funkcji z klasy
nadrzędnej za pomocą metody SUPER. Na przykład kod:
sub init{
my $self = shift;
$self->metoda;
$self->SUPER::init(@_);
}
możemy sprowadzić do postaci
sub init{
$self->metoda;
super;
}
Dodatkowo Spiffy uzupełnia nasz kod o takie istotne linie kodu jak
aktywowanie pragm use strict; oraz use warnings; oraz dodaje
czasem nam umykającą 1; na końcu tworzonej przez nas klasy,
dziedziczącej po Spiffy. Ułatwione jest również tworzenie metod prywatnych.
Metoda zapisana poprzez my sub nazwa_metody
staje się metodą prywatną
i może zostać wywołana jedynie przez inne metody danego obiektu. Jest to jedna
z najfajniejszych cech tego modułu!
Przykład bez $self
Korzystanie z modułu Spiffy pozwala na pominięcie jawnego odbierania instancji klasy w każdej metodzie obsługi. Dlatego np. kod poniżej:
my $secret_door = sub {
my $self = shift;
...
};
sub knock {
my $self = shift;
if ($self->{counter}++ > 7){
$self->$secret_door();
}
}
w którym w każdej funkcji musi być my $self = shift; może zostać z modułem zapisany prościej:
my sub secret_door{
...
}
sub knock {
if ($self->{counter}++ > 7){
$self->$secret_door();
}
}
A co najważniejsze Spiffy udostępnia nam idealnie napisany konstruktor postaci:
sub new {
my $class = shift;
$class = ref($class) || $class;
my $self = bless {}, $class;
while (@_) {
my $method = shift;
$self->$method(shift);
}
return $self;
}
Można oczywiście dziedziczyć go naturalnie w klasach potomnych lub zastąpić własnym.
Dodatkowe informacje
- Spiffy - Spiffy Perl Interface Framework For You - search.cpan.org
- Class::Spiffy - Spiffy Framework with No Source Filtering - search.cpan.org
Informacje o autorze opracowania
Autor: M.M.