@hypersib

Имеет ли смысл создавать много простых методов?

Насколько правильно или не правильно создавать много простых методов которые по суть отличаются только несколькими моментами, например:

У меня есть класс и у него есть метод
прочитать_из_регистра()

насколько правильно создавать методы обертки для более простого доступа к данным, например :
получить_статус_прибора(){
  return прочитать_из_регистра('0x00');
}


или

получить_температуру_прибора(){
  return прочитать_из_регистра('0x01')/100;
}

Не будет ли много излишней памяти затрачено или глупо смотреться?

Или более правильно писать что-то общее типа:
получить_параметр_прибора(имя_параметра){
  switch(имя_параметра){
    case 'температура':
      ответ = прочитать_из_регистра('0x00');
    break;
    case 'статус':
      ответ = прочитать_из_регистра('0x01')/100;
    break;
  }
  return ответ;
}


Интересно мнение со всех сторон и поддержание кода и его "красота", а так же с точки зрения экономии ресурсов.

Заранее спасибо.
  • Вопрос задан
  • 375 просмотров
Решения вопроса 2
Много конкретных методов-обёрток лучше, чем большой свич. тк почти всегда вызывающий код и так знает что он читает. Излишней памяти тратится будет не много - очень часто компилятор такое может заинлайнить.
Вариант со свичём и менее эффективен и менее красив
Ответ написан
Комментировать
solotony
@solotony
покоряю пик Балмера
если для вашей задачи принципиальны затраты на лишний вызов метода - тогда наверно не стоит делать лишний вызов (если конечно это не С++ inline).

опять же - если код исполняется 1 раз, то особого смысла выводить его в функцию нет, а если таких вызовов много - то конечно надо оборачивать функцией.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
А классы не подходят?
прочитать_из_регистра = print

class Device (object):
    def __init(self):
        pass
    
    def temperature(self):
        return прочитать_из_регистра('0x00')
    
    def status(self):
        return прочитать_из_регистра('0x01')


device = Device()
device.status()
device.temperature()


0x01
0x00
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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