Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Рефакторинг кода


Автор: sklins 10.2.2014, 18:26
Занимаюсь рефакторингом кода, и не даёт мне покоя такой кусок кода:
Код

if ($self->{results}{correct_answer_percent} > $percent_5) {
  $self->{results}{evaluation} = 'Отлично';
} elsif ($self->{results}{correct_answer_percent} > $percent_4) {
  $self->{results}{evaluation} = 'Не плохо';
} elsif ($self->{results}{correct_answer_percent} > $percent_3) {
  $self->{results}{evaluation} = 'Слабовато';
} else {
  $self->{results}{evaluation} = 'Никуда не годится';
}

Как его лучше отрефакторить и повысить читабельность? Просто много такого кода встречается в модуле и он распух и плохо читаем. Хотелось бы данный код заменить чем то более элегантным и лёгким.

Автор: Сумасшедший 10.2.2014, 20:36
Вполне читаемо, по моему мнению. Разве что заменить постоянно встречающийся $self->{results} ссылкой на него в $_ , и большим жирным комментарием вверху в стиле #* Проверка тыц-тыцности на клац-клацность

Автор: krypt3r 11.2.2014, 06:01
"неплохо" пишется слитно

Автор: slavenk 18.2.2014, 11:12
У меня получился следующий вариант:

Код

$self->{results}{evaluation} =
  $self->{results}{correct_answer_percent} > $percent_5
    ? 'Отлично' 
    : $self->{results}{correct_answer_percent} > $percent_4
      ? 'Не плохо' 
      : $self->{results}{correct_answer_percent} > $percent_3
        ? 'Слабовато' 
        : 'Никуда не годится';



Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Рефакторинг-кода-id52f8efc7ae2015ac348b4567#findElement_E7045_5303160bae201506708b45fc_0

Автор: Bulat 18.2.2014, 11:38
slavenk, и тот и другой вариант мне в принципе понятен!  smile 

Автор: Grost 27.2.2014, 09:21
http://perldoc.perl.org/5.8.8/Switch.html

PS. Вариант от slavenk мне каждется менее читабельным.

Автор: tishaishii 12.9.2018, 21:17
Код

foreach (
    [ 'Отлично' , $percent_5 ] ,
    [ 'Не плохо' , $percent_4 ] ,
    [ 'Слабовато' , $percent_3 ] ,
    [ 'Никуда не годится' , -1 ]
) {
    next ( ) if $self->{ 'results' }{ 'correct_answer_percent' } <= $_->[ 1 ] ;

    $self->{ 'results' }{ 'evaluation' } = $_->[ 0 ]  ;

    last( ) ;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)