[Moscow.pm] safe navigation operator

Гришаев Анатолий agrishaev на gmail.com
Пт Ноя 20 11:13:08 PST 2015


Читал, что наличие сцепленных атрибутов a->b->c->d->e признак очень плохого
кода, который надо перепроектировать.
По опыту такой код плохо читает даже автор.

Как вариант, который решает некоторые вопросы производительности, но не
читаемости.

our $stub ||= {};
$stub->{$_} = $stub for qw/b c d/;
my $value = ({ { { { $a->{b} || $stub } -> {c} || $stub } -> { d } || $stub
} ->{e});

Можно сделать класс TrueFalsiness
====================
 package TrueFalsiness;
use overload 'bool' => sub {};
our $true_falsiness = bless {}, __PACKAGE__;
sub import{
    shift;
    my $caller = caller;
    for my $name (grep m#\Aw+\z#, @_){
        $true_falsiness->{$name} = $true_falsiness;
    }
}
sub new{$true_falsiness};
sub AUTOLOAD{$true_falsiness}

1;
====================

И можно писать:
======================================================
use TrueFalsiness qw(b c d);
my $stub = TrueFalsiness->new;
my $value = ({ { { { $a->b || $stub } ->c || $stub } ->  d  || $stub } ->e);
======================================================


И т.д. и т.п.



20 ноября 2015 г., 21:13 пользователь Nick Knutov <mail на knutov.com> написал:

> Тут вот у руби появился оператор безопасной навигации внутрь объекта -
> http://habrahabr.ru/company/truevds/blog/271301/
>
> А не появилось ли какого-нибудь готового способа для перла получить
> аналогичное? Для объектов и для вложенных хешей.
>
> Для объектов, если это свой код, еще можно сделать примерно как в моджо,
> но у меня очень много хешей и массивов с большим уровнем вложенности и
> писать длинные проверки для них - занимает очень много места (
>
> --
> Best Regards,
> Nick Knutov
> http://knutov.com
> ICQ: 272873706
> Voice: +7-904-84-23-130
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20151120/b6b599af/attachment.html>


Подробная информация о списке рассылки Moscow-pm