<div dir="ltr">Это конечно не Perl, но все тоже самое можно написать и на Perl-e<br><br>class NonePerson(BasePerson):<br><br>    def get_id():<br>        return None<br><br><br>class Person(BasePerson):<br><br>    def get_father():<br>        return self.father or NonePerson()<br><br>    def get_mother():<br>        return self.mother or NonePerson()<br><br>    def get_date_of_birth():<br>        return self.birthday  # datetime object<br><br>    def get_date_of_birth_as_a_very_custom_string():<br>        date = self.birthday.day or ""<br><br>        if self.birthday.month:<br>            date . = "/" + self.birthday.month<br><br>        if self.birthday.year:<br>            date . = "/" + self.birthday.year<br><br>        return date<br><br><br>class PersonRowBuilder():<br><br>    def build(self, person):<br>        row = ()<br>        row.append(person.get_father().get_id())<br>        row.append(person.get_mather().get_id())<br>        row.append(person.get_email())<br>        row.append(person.get_homepage())<br><br>        return row<br><br>##################################<br>def info():<br>    person = Person()<br>    birthday = person.get_date_of_birth_as_a_very_custom_string()<br><br><br>def method_related_to_db_usage():<br>    builder = PersonRowBuilder()<br>    row = builder.build(Person())<br><br><div class="gmail_extra"><br><div class="gmail_quote">15 октября 2015 г., 11:58 пользователь Vladimir Timofeev <span dir="ltr"><<a href="mailto:vovkasm@gmail.com" target="_blank">vovkasm@gmail.com</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Гм...<br>
<br>
push @person_row, $person->get_father_id, $person->get_mother_id,<br>
$person->get_email, $person->get_homepage;<br>
<br>
my $date = $person->get_display_date_of_birth;<br>
<br>
package Person;<br>
<br>
sub get_father_id {<br>
  my $self = shift;<br>
  if (my $self->get_father) {<br>
    return $self->get_father->get_id;<br>
  }<br>
  return;<br>
}<br>
<br>
... и  т.д.<br>
<br>
Это раз.<br>
<br>
Можно пойти дальше и объединить построение @person_row в  один метод:<br>
<br>
  push @person_row, $person->get_person_fields<br>
<br>
Хотя использование массива здесь выглядит очень подозрительно, но это<br>
уже к вопросу не относится.<br>
<br>
С датами, помимо выноса в отдельный метод кода форматирования, можно<br>
потом вынести код форматирования в класс даты. Потом можно переписать<br>
код форматирования даты, так, чтоб работал корректно во всех случаях.<br>
А то сейчас можно сделать "3/" к примеру (задан только месяц).<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
2015-10-15 5:43 GMT+03:00 Nikolay Mishin <<a href="mailto:mi@ya.ru">mi@ya.ru</a>>:<br>
> Hi Moscow.PM!<br>
><br>
> Существует ли какой-либо сбособ сделать более читаемым такой код?:<br>
><br>
>     push @person_row, (defined $person->get_father()) ? $person->get_father()->get_id() : undef;<br>
>     push @person_row, (defined $person->get_mother()) ? $person->get_mother()->get_id() : undef;<br>
>     push @person_row, ($person->get_email(), $person->get_homepage());<br>
><br>
>     my $date = "";<br>
>     if(defined $person->get_date_of_birth()) {<br>
>       my $date_of_birth = $person->get_date_of_birth();<br>
>       $date .= defined $date_of_birth->day ? $date_of_birth->day."/" : "";<br>
>       $date .= defined $date_of_birth->month ? $date_of_birth->month."/" : "";<br>
>       $date .= defined $date_of_birth->year ? $date_of_birth->year : "";<br>
>     }<br>
><br>
> источник <a href="https://github.com/mishin/Ftree-cpan/blob/master/lib/Ftree/Exporters/ExcelExporter.pm#L53" rel="noreferrer" target="_blank">https://github.com/mishin/Ftree-cpan/blob/master/lib/Ftree/Exporters/ExcelExporter.pm#L53</a><br>
><br>
> --<br>
> С уважением<br>
> Николай Мишин<br>
><br>
> --<br>
> Moscow.pm mailing list<br>
> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
<br>
<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Vladimir Timofeev <<a href="mailto:vovkasm@gmail.com">vovkasm@gmail.com</a>><br>
</font></span><div class="HOEnZb"><div class="h5">--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature">С уважением<br>Михаил Шогин.<br></div>
</div></div>