Имена
Используйте активные имена для функций.
Имя функции должно базироваться на активном глаголе (в действительном залоге), за которым может следовать существительное:
now = date.getTime(); putchar("\n-);
Функции, которые возвращают логическое значение (истина или ложь – true или false), нужно называть так, чтобы их смысл не вызывал сомнений. Так, из вызова:
? if (checkoctal(c))…
Непонятно, когда будет возвращаться true, а когда false, а вот вызов:
if (isoctal(c))…
Не оставляет сомнений в том, что результат будет истиной, если аргумент – восьмеричное число, и ложью – в противном случае.
Будьте точны.
Как мы уже решили, имя не только обозначает объект, но и предоставляет читателю некоторую информацию о нем. Неверно подобранное имя может стать причиной совершенно таинственных ошибок.
Один из нас написал и не один год распространял макрос, называемый isoctal, имеющий некорректную реализацию:
<< define isoctal(c) ((с) >= '0' && (с) <= '8')?
Вместо правильного:
<< define isoctal(c) ((c) >= '0' && (с) <= '7')
В этом случае имя было правильным, а реализация ошибочной; правильное имя облегчило раскрытие ошибки.
В следующем примере имя и код находятся в полнейшем противоречии:
? public boolean inTable(Object obj) { ? int j = this.getlndex(ob]); ? }
Функция getlndex возвращает значение от 0 до nTable-1 в случае, если объект найден, и nTable, если объект не найден. Таким образом, возвращаемое логическое значение будет прямо противоположно тому, что подразумевается в имени функции. Во время написания кода это, может быть, не страшно, но, если программа будет дорабатываться позднее, да еще другим программистом, подобное неправильное имя наверняка станет причиной затруднений.
Упражнение 1.1
Составьте комментарий, объясняющий принцип выбора имен и значений в следующем примере:
Упражнение 1.2
Улучшите функцию:
Упражнение 1.3
Прочитайте вслух следующее выражение: