ну я так и думал на moose переписать
или типа того
13:52, 15 октября 2015 г., "Михаил Шогин" <[email protected]>:
Это конечно не Perl, но все тоже самое можно написать и на Perl-e
class NonePerson(BasePerson):
def get_id():
return None
class Person(BasePerson):
def get_father():
return self.father or NonePerson()
def get_mother():
return self.mother or NonePerson()
def get_date_of_birth():
return self.birthday # datetime object
def get_date_of_birth_as_a_very_custom_string():
date = self.birthday.day or ""
if self.birthday.month:
date . = "/" + self.birthday.month
if self.birthday.year:
date . = "/" + self.birthday.year
return date
class PersonRowBuilder():
def build(self, person):
row = ()
row.append(person.get_father().get_id())
row.append(person.get_mather().get_id())
row.append(person.get_email())
row.append(person.get_homepage())
return row
##################################
def info():
person = Person()
birthday = person.get_date_of_birth_as_a_very_custom_string()
def method_related_to_db_usage():
builder = PersonRowBuilder()
row = builder.build(Person())
15 октября 2015 г., 11:58 пользователь Vladimir Timofeev <[email protected]> написал:Гм...
push @person_row, $person->get_father_id, $person->get_mother_id,
$person->get_email, $person->get_homepage;
my $date = $person->get_display_date_of_birth;
package Person;
sub get_father_id {
my $self = shift;
if (my $self->get_father) {
return $self->get_father->get_id;
}
return;
}
... и т.д.
Это раз.
Можно пойти дальше и объединить построение @person_row в один метод:
push @person_row, $person->get_person_fields
Хотя использование массива здесь выглядит очень подозрительно, но это
уже к вопросу не относится.
С датами, помимо выноса в отдельный метод кода форматирования, можно
потом вынести код форматирования в класс даты. Потом можно переписать
код форматирования даты, так, чтоб работал корректно во всех случаях.
А то сейчас можно сделать "3/" к примеру (задан только месяц).
2015-10-15 5:43 GMT+03:00 Nikolay Mishin <[email protected]>:
> Hi Moscow.PM!
>
> Существует ли какой-либо сбособ сделать более читаемым такой код?:
>
> push @person_row, (defined $person->get_father()) ? $person->get_father()->get_id() : undef;
> push @person_row, (defined $person->get_mother()) ? $person->get_mother()->get_id() : undef;
> push @person_row, ($person->get_email(), $person->get_homepage());
>
> my $date = "";
> if(defined $person->get_date_of_birth()) {
> my $date_of_birth = $person->get_date_of_birth();
> $date .= defined $date_of_birth->day ? $date_of_birth->day."/" : "";
> $date .= defined $date_of_birth->month ? $date_of_birth->month."/" : "";
> $date .= defined $date_of_birth->year ? $date_of_birth->year : "";
> }
>
> источник https://github.com/mishin/Ftree-cpan/blob/master/lib/Ftree/Exporters/ExcelExporter.pm#L53
>
> --
> С уважением
> Николай Мишин
>
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
--
Vladimir Timofeev <[email protected]>
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
--
С уважением
Михаил Шогин.
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
Sincerely, Nikolay Mishin
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
