#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
что frompromptMonth()
передается в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'