В C # я должен повторно использовать параметр функции / свойства, чтобы вычислить чистое временное значение или создать временную переменную? - PullRequest
1 голос
/ 04 июня 2010

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

public string Thingy 
{
    set 
    {
        // I guess we can throw a null reference exception here on null.
        value = value.Trim(); // Well, imagine that there is so much processing to do
        this.thingy = value;  // That this.thingy = value.Trim() would not fit on one line
        ...

Итак, если присвоение должно занимать две строки, то мне нужно либо злоупотребить повторным использованием параметра, либо создать временную переменную. Я не большой поклонник временных переменных. С другой стороны, я не фанат запутанного кода. Я не включил пример, где задействована функция, но я уверен, что вы можете себе это представить. У меня есть одна проблема: если функция приняла строку, а параметр был «злоупотреблен», а затем кто-то изменил подпись на ref в обоих местах - это должно все испортить, но ... кто бы сознательно сделал такой поменять если уже работало без реф? Похоже, это их ответственность в этом случае. Если я запутался со значением value, я делаю что-то нетривиальное под капотом? Если вы считаете, что оба подхода приемлемы, то какой из них вы предпочитаете и почему?

Спасибо.

Редактировать : Вот что я имею в виду, когда говорю, что я не фанат временных переменных. Мне не нравится такой код:

string userName = userBox.Text;
if (userName.Length < 5) {
    MessageBox.Show("The user name " + userName + " that you entered is too short.");
    ....

Опять же, это может быть не лучшим способом сообщить о проблеме пользователю, но это просто иллюстрация. В моем случае переменная userName не нужна, по моему сильному мнению. Я не всегда против временных переменных, но когда их использование очень ограничено, и они не экономят столько времени при наборе текста, я настоятельно предпочитаю не использовать их.

Ответы [ 2 ]

4 голосов
/ 04 июня 2010

Рекомендуется не изменять значения входящих параметров, даже если это технически возможно. Не прикасайтесь к value.

Я не большой поклонник временных переменных.

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

Еще одно замечание относительно свойств. Хотя технически вы могли бы поместить много логики, рекомендуется сохранять свойства простыми и стараться не использовать код, который может генерировать исключения. Необходимость вызова других функций может указывать на то, что это свойство лучше сделать методом или что где-то нужен код инициализации. Просто переосмыслите то, что вы делаете, и действительно ли это выглядит как собственность.

4 голосов
/ 04 июня 2010

Во-первых, это не имеет большого значения.

Но я бы ввел временную переменную здесь. Это ничего не стоит и менее подвержено ошибкам. Представьте, что кто-то должен поддерживать код позже. Лучше, если значение имеет только 1 значение и цель.

И не называйте это temp, называйте это cleanedValue или как-то так

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...