VyusFire
@VyusFire
Студент, padavan, linux-mint-user.

Можно ли использовать ассоциативные массивы в качестве альтернативы операторов ветвления?

Итак здравствуйте.
Собственно наткнувшись на небольшой фрагмент кода, который содержал довольно объемный операторв ветвления я задумался -- а нельзяли как-то упростить данный фрагмент, и повысить его читаемость?
Думаю проще объяснить на премер.
Допустим мы имеем следующий код:
def convertSecondsTo(seconds, type):
  if type == "seconds":
    return seconds
  elif type == "minutes":
    return seconds / 60
  elif type == "hours":
   return seconds / 3600
  elif type == "days":
   return seconds / 86400
  elif type == "months":
    return seconds / 2592000
  elif type == "years":
    return seconds / 31536000
assert False

Собственно ветление здесь довольно большое, я подумал, что если взять словарь,
вида { 'seconds': 1, 'minutes': 60, ... }, то данное выражения можно выразить как:
def convertSecondsTo(seconds, type, types):
  #types -- наш словать со значениями.
  return seconds / types[type]

Собственно вопрос -- оправдан ли такой способ и имеетли он вообще право на жизнь?
P. S. Просто где-то я слышал, что если в коде есть большие операторы ветвления, то такие участк кода нуждаются в перерабротке.
  • Вопрос задан
  • 2605 просмотров
Решения вопроса 2
Да, это вполне приемлемый вариант, и гораздо лучше исходного. Передавать types в данном случае, пожалуй, ни к чему, лучше просто хранить где-нибудь.
Ответ написан
Изменение кода без изменения его функциональности это рефакторинг.
Рефакторинг осуществляется для того, чтобы код стало проще поддерживать.
Исходя из этого вы должны сами себе ответить на поставленный вопрос.
Просто так переписывать код, только потому, что там много логических конструкций, не стоит, у любого действия должна быть осознанная причина.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@lPolar
data scientist
Кстати, Лутц в "Изучаем Python" как раз писал о том, что словари и нужно использовать в качестве операторов ветвления.
Ответ написан
Flammar
@Flammar
Не только можно, но и рекомендуется, и не только на Python, но даже и на Java (а, значит, на Python и подавно), правда, в силу специфики языка, там используются не ассоциативные массивы, а перечисляемые типы...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы