2014-12-07 4 views
0

У меня есть следующий код:- методы, которые изменяют входные параметры и возвращают их плохо?

public class MyClass 
{ 
     .... 
} 

public static MyClass MyClassModifier(MyClass myinstance) 
{ 

    ...... 
return myinstance; 
} 

мне кажется, что возвращение MyInstance на самом деле ничего не делать здесь, другими словами этого, достигает такой же, как приведенный выше код (Пока MyInstance не назначен к другому объекту в методе):

public static void MyClassModifier(MyClass myinstance) 
{ 

    ...... 

} 

Я мог бы, конечно, сделать это:

public static MyClass MyClassModifier(MyClass myinstance) 
{ 

    ...... 
    return new MyClass(); 
} 

, но это кажется довольно неуклюжим, и если конструктор для MyClass имеет много параметров, тогда это становится действительно неуклюжим, поэтому вопрос тогда, какой из них предпочтительнее и почему?

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

ответ

1

- методы, которые изменяют входные параметры и возвращают их плохо?

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

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

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

Да, в функциональном программировании вы хотите неизменное состояние - то есть MyClass не может быть изменено, и поэтому вам нужно вернуть новый экземпляр.

+0

спасибо за ответ, это в значительной степени то, что я себе представлял. Что касается изменения входного значения и создания нового, то, на самом деле я имел в виду, состоящий из списка как входного значения – ManyRootsofAllEvil

Смежные вопросы