<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>