2015-04-02 2 views
-1

Этот вопрос является агностиком языка программирования, но IMO это важный.Лучше обрабатывать создание объекта внутри функции или добавить его в список параметров

Как известно, написание многоразового кода представляет собой сочетание науки и искусства, а также его важнейшее умение, которое любой разработчик должен иметь для написания отличного кода.

Предположим, у меня есть класс, который включает в себя несколько функций:

class Example 

def func1() 

    creates objectA 
    ... 
    ... 

def func2() 

    creates objectB 
    ... 
    ... 
def func3() 

    creates objectA 
    ... 
    ... 

def func4() 

    creates objectC 
    ... 
    ... 

В приведенном выше случае, это лучше:

А. создать объект А внутри функций 1 и 3, так что когда-то другое разработчики используют функции 1 или 3, они не должны пытаться найти, как отправить этот объект в качестве аргумента (какой конструктор использовать для его создания и т. д.).

В общем, чем больше параметров функции, тем больше усилий разработчик должен поставить для того, чтобы начать использовать его ...

ИЛИ

B. Что лучше поставить объект А, как требуемый параметр в функциях 1 и 3, поэтому, как только разработчик захочет использовать эти функции, ему/ей придется создать объект A вне функции, а затем отправить его в качестве аргумента функции?

Если я написал программу, которая использует func1 и func3, то обе функции будут повторять создание объекта дважды (плохая производительность).

Кто победит в этом вопросе об использовании многоразового использования?

Спасибо,

Qwerty

+3

Не заботьтесь о скорости, написать хороший читаемый, в сопровождении кода. Это всегда верно, пока вы не столкнетесь с проблемами производительности и не определили сам код, который является узким местом. Но во многих случаях компилятор будет так оптимизировать, что ваши оптимизации вручную, вероятно, принесут больше вреда. – usr1234567

ответ

0

Я принимаю комментарий «usr1234567» как правильный ответ.

Спасибо,

Qwerty

0

ИМХО это зависит от того, какой объект А и то, что эти методы делают. Если объект A является частной деталью реализации этих методов, я не ожидаю увидеть их в списке параметров.

Если он, например, может быть заменен или макетироваться, то вы можете сделать им аргумент, переменную класса Example или использовать что-то вроде инъекции зависимостей.

Вы всегда можете создать новый закрытый метод, который обрабатывает создание объекта A для уменьшения дублирования кода. Кроме того, вы можете добавить некоторые кеширования или ленивые создания, чтобы повысить производительность, если это необходимо.