Всегда ли лучше объявлять переменную? - PullRequest
28 голосов
/ 25 апреля 2011

Я новичок в C # и любой форме программирования, и у меня есть вопрос, который, кажется, разделяет тех, кто знает на моем факультете университета. Этот вопрос прост: всегда ли я должен объявлять переменную? В качестве основного примера того, о чем я говорю: если у меня есть int pounds и int pence, нужно ли мне указывать int money, в который нужно вставить ответ, или это нормально, просто иметь:

textbox1.Text = (pounds + pence).ToString();

Я знаю обе работы, но я думаю с точки зрения наилучшей практики.

Заранее спасибо.

Ответы [ 10 ]

36 голосов
/ 25 апреля 2011

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

  • Когда значение используется несколько раз
  • Когда выполняется вызов дорогой функции или функции, которая имеет побочные эффекты
  • Когда выражение необходимо сделать более понятным, переменные (со значимыми именами) действительно помогают

По сути, следуйте своему здравому смыслу.Код должен быть понятен и понятен, если введение переменных помогает в этом, то используйте их.

14 голосов
/ 25 апреля 2011

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

Переменные хороши, потому что при отладке вы можете просматривать результаты функций и вычислений.

6 голосов
/ 25 апреля 2011

По моему мнению, если вы делаете что-то вроде

int a = SomeFunc();
int b = SomeFunc2();
int c = a + b;
SomeFunc3(c);

, лучше просто сделать

int a = SomeFunc();
int b = SomeFunc2();
SomeFunc3(a + b);

или даже просто

SomeFunc3(SomeFunc() + SomeFunc2());

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

6 голосов
/ 25 апреля 2011

Абсолютно нет.Единственный раз, когда я создаю переменную для однократного использования, как это, это если она значительно увеличивает читабельность моего кода.

3 голосов
/ 25 апреля 2011

Переменные служат для следующих двух целей:

  1. Место для данных (и информации)
  2. Улучшитель читаемости

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

Для меня два вышеупомянутых пункта имеют одинаковую важность.

Если вы считаете, что объявление переменной улучшит читабельность, или если вы думаете, что данные, хранящиеся в этой переменной, понадобятся много раз (и в этом случае сохранение их в имени скважины var снова повысит читабельность)), то непременно создайте новую переменную.

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

2 голосов
/ 25 апреля 2011

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

Я не всегда использую переменную.Например, если у меня есть метод, который оценивает что-то и возвращает true / false, я обычно возвращаю выражение.Результаты записываются в другом месте, и у меня записываются входные данные, поэтому я всегда знаю, что произошло.

1 голос
/ 27 апреля 2011

Локализация и область действия

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

void f()
{
    int x = ...;  // "we need x (or side effect) in next scope AND
                  // thereafter..."

    {
         int n = ...;  // "n isn't needed at function scope..."
         ...
    } // can "pop" that n mentally...

    ...
}

Наименьшая область действия - это буквальный или временный результат.Если значение используется только один раз, я предпочитаю использовать комментарии, а не переменную (они также не ограничиваются A-Za-z0-9_: -)):

x = employees.find("*",                       // name
                   retirement.qualify_at(),   // age
                   num_wives() + num_kids()); // # dependents

Concision

Важно сосредоточиться на достижении вашей программы.Если у вас есть много экранного пространства (то есть строк кода), получающего поля в переменные, у вас меньше кода на экране, который фактически отвечает за выполнение вещей алгоритмического уровня, и, следовательно, он менее ощутим для программиста.Это еще одна причина, по которой код должен быть кратким, поэтому:

сохранять полезными документация нацелена и лаконична

1 голос
/ 26 апреля 2011

Принятие этого решения преследует две цели:

  • Читабельность - код читабелен и не требует пояснений. Код
  • Оптимизация - в коде нет ненужных вычислений

Если вы посмотрите на это как на проблему оптимизации, она может показаться менее субъективной

Наиболее удобочитаемой в масштабе от 1 до 10, где 10 - самый простой.Использование разумных имен переменных может дать вам 2, показание вычисления в строке может дать вам 3 (так как пользователю не нужно искать, что такое «деньги», это просто есть в этой строке кода).и т. д. и т. д. Эта часть субъективна: вы и компании, в которых вы работаете, определяют, что можно прочитать, и вы можете построить эту модель затрат на основе этого опыта.

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

Это имеет больше смысла, когда вы смотрите на петли.Допустим, вы хотите суммировать 1000 значений в следующем цикле.

money = factor[1] + factor[2] + ... + factor[n]

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

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

1 голос
/ 25 апреля 2011

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

0 голосов
/ 25 апреля 2011

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

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