LINUX.ORG.RU

Вышла 0.04 версия Pony::Object - модуля для ООП в Perl

 ,


0

2

Учитывая некоторый интерес к данному модулю со стороны перлистов ЛОРа, решил опубликовать здесь известие о данном событии. На новость подобное не тянет, но вот на тред — вполне.

Pony::Object — модуль для ООП программирования в perl с поддержкой

  • наследования свойств (да и самих свойств) объектов;
  • разделения доступа к методам, полям;
  • абстрактных методов.

Обладает менее «инопланетным» синтаксисом, нежели распространённые Moose, Mouse и т.д., в разы меньшим размером, чем распространённые аналоги. Содержится в одном файле (возможно, это важно для тех, кто делает портативные версии своих продуктов).

В этой версии появилась поддержка абстрактных методов и классов, уменьшен и без того небольшой список зависимостей.

Пример использования абстрактных классов:

    # Let's define simple interface for texts.
    package Text::Interface;
    use Pony::Object -abstract; # Use 'abstract' or '-abstract'
                                # params to define abstract class.
    
        sub getText : Abstract; # Use 'Abstract' attribute to
        sub setText : Abstract; # define abstract method.
    
    1;

    # Now we can define base class for texts.
    # It's abstract too but now it has some code.
    package Text::Base;
    use Pony::Object abstract => 'Text::Interface';
    
        protected text => '';
        
        sub getText : Public
            {
                my $this = shift;
                return $this->text;
            }
    
    1;

    # And in the end we can write Text class.
    package Text;
    use Pony::Object 'Text::Base';
    
        sub setText : Public
            {
                my $this = shift;
                $this->text = shift;
            }
    
    1;

    # Main file.
    package main;
    use Text;
    use Text::Base;
    
    my $text = new Text::Base;  # Raises an error!
    
    my $text = new Text;
    $text->setText('some text');
    print $text->getText();     # Returns 'some text';

В тред кастуются пользователи, замеченные в неравнодушии к модулю: Virtuos86, outtaspace, akinator, skam. Также к обсуждению приглашаются перлисты ЛОРа.

Ссылка на описание на CPAN'е.

1;

__END__

Это не тред обсуждения плюсов и минусов языка.

★★★★★

Забавно. Смотрю RSS со свежими модулями CPAN, вижу «пони», смотрю раздел changes, ну а затем вижу комментируемый пост.

outtaspace ★★★
()
Ответ на: комментарий от outtaspace

:) Таки кто-то смотрит CHANGES... Я его веду для проформы.

helios ★★★★★
() автор топика
protected, private properties
    For properties you can use "has" keyword if your variable starts with _
    (for protected) or __ (for private).

        package News;
        use Pony::Object;
    
            has text => '';
            has __authors => [ qw/Alice Bob/ ];
        
            sub getAuthorString
                {
                    my $this = shift;
                    return join(' ', @{ $this->__authors });
                }
        
        1;

        package main;
    
        my $news = new News;
        say $news->getAuthorString();

    Or the same but with keywords "public", "protected" and "private".

        package News;
        use Pony::Object;
    
            public text => '';
            private authors => [ qw/Alice Bob/ ];
        
            sub getAuthorString
                {
                    my $this = shift;
                    return join(' ', @{ $this->authors });
                }

Это чтоб и вашим и нашим? С андерскорами нагляднее и питоноподобнее.

Из того что понял вроде годно выглядит. Что делает shift? А синглтоны зачем, тоже попросили?

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Синглтоны и прочие фетиши нужны для создания самосогласованной среды. Зачем выходить во внешний жестокий мир за синглтонами? В батарейке есть необходимое.

outtaspace ★★★
()
Ответ на: комментарий от Virtuos86

Это чтоб и вашим и нашим? С андерскорами нагляднее и питоноподобнее.

Да, для этого. Да, нагляднее :) Но многим приятнее через protected и т.д. объявлять.

Что делает shift?

В Perl все параметры, переданные функции, лежат в @_. Когда не указывается shift чего делается - делается shift @_; То есть получаем следующий параметр вызова.

А синглтоны зачем, тоже попросили?

Уже точно и не помню. Вроде, меня не устраивало как выглядит его написание - чистой воды костыль. Вот я и решил спрятать детали реализации.

helios ★★★★★
() автор топика
Ответ на: комментарий от buddhist

Сейчас я скастую сюда йогурта, который скажет, что это не нужно и будет прав.

Видел я уже его объяснения. Да, можно без них. И что?

helios ★★★★★
() автор топика
Ответ на: комментарий от Olegymous

На мой взгляд, каждый модуль должен лежать в своём файле.

«1;» не «не нужен», а не обязателен. Это разное.

helios ★★★★★
() автор топика

my $this = shift; ещё бы скрыть , и цены бы не было :)

default
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.