Это хороший стиль?

#c #coding-style #parameter-passing

#c #стиль кодирования #передача параметров

Вопрос:

У меня есть некоторые параметры в моих функциях, которые получают и передают примерно одно и то же значение. Должен ли я называть все переменные параметров одинаково?

Пример:

 // assume numMonth = 12
// assume numYear = 2000

int promptMonth(); // returns numMonth
int promptYear();  // returns numYear

int daysInMonth(int numMonth, int numYear); // numMonth and numYear will always
int daysInYear(int numYear);                // be sent to these.

bool isLeapYear(int numYear);               // daysInYear() and daysInMonth() call
                                            // this function and send it numYear 
                                            // (which would be 2000 in this case).
  

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

Комментарии:

1. Что вы подразумеваете под «тем же значением»?

2. Я имел в виду, что если numMonth присвоено 12 в promptMonth() переменной параметра numMonth в функции daysInMonth() , также равно 12, потому numMonth что from promptMonth() передается в daysInMonth() . Таким образом, переменная numMonth имеет и всегда должна иметь одно и то же значение, которое в данном случае равнялось 12.

Ответ №1:

Я полагаю, вы имеете в виду имя параметра функции numYear .

Да, всегда рекомендуется называть переменные осмысленным образом, который указывает на значение / цель передаваемого значения.

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

Ответ №2:

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

Позвольте мне объясниться

  • Неправильное толкование: даже если вы последовательно называете переменные, читатель может не убедиться, что вы это имеете в виду.
  • Неправильное использование: возможно, ни один из них не int подходит в качестве значения года.

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

 Month promptMonth();
Year promptYear();

int daysInMonth( Month m, Year y); 
int daysInYear( Year y );

bool isLeapYear( Year );
  

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

 cout << "the current month is " << promptMonth();  
  

может выводить

 the current month is 'October'