Как говорили другие, это зависит от языка. Но я продемонстрирую мои идеи Java (и эффективной Java) об инициализации переменных. Они должны использоваться для многих других языков более высокого уровня.
Константы и переменные класса
Переменные класса, отмеченные static
в Java, похожи на константы. Эти переменные обычно должны быть окончательными и инициализироваться непосредственно после определения с использованием =
или из блока инициализатора класса static { // initialize here }
.
поля
Как и во многих языках более высокого уровня и сценариев, полям будет автоматически назначаться значение по умолчанию. Для цифр char
это и будет нулевое значение. Для строк и других объектов это будет null
. Теперь null
это опасно и должно использоваться экономно. Таким образом, эти поля должны быть установлены в допустимое значение как можно скорее. Конструктор обычно идеальное место для этого. Чтобы убедиться, что переменные установлены во время конструктора, а не изменены впоследствии, вы можете пометить их final
ключевым словом.
Попробуйте не поддаваться искушению использовать в null
качестве какого-либо флага или особого значения. Например, лучше включить определенное поле для хранения состояния. Поле с именем, state
которое использует значения State
перечисления, будет хорошим выбором.
Параметры метода
Поскольку изменения значений параметров (будь то ссылки на объекты или базовые типы, такие как целые числа и т. Д.) Не будут видны вызывающей стороне, параметры должны быть помечены как final
. Это означает, что значения самой переменной нельзя изменить. Обратите внимание, что значение экземпляров изменяемого объекта может быть изменено, ссылка не может быть изменена, чтобы указывать на другой объект или null
хотя.
Локальные переменные
Локальные переменные не инициализируются автоматически; они должны быть инициализированы перед использованием их значения. Один из способов убедиться в том, что ваша переменная инициализирована, состоит в том, чтобы напрямую инициализировать их каким-либо значением по умолчанию. Это то, что вы не должны делать. В большинстве случаев значение по умолчанию не является ожидаемым.
Гораздо лучше определять переменную только там, где она нужна. Если переменная должна принимать только одно значение (что верно для большинства переменных в хорошем коде), вы можете пометить переменную final
. Это гарантирует, что локальная переменная назначается ровно один раз, а не ноль раз или два раза. Пример:
public static doMethod(final int x) {
final int y; // no assignment yet, it's final so it *must* be assigned
if (x < 0) {
y = 0;
} else if (x > 0) {
y = x;
} else {
// do nothing <- error, y not assigned if x = 0
// throwing an exception here is acceptable though
}
}
Обратите внимание, что многие языки будут предупреждать вас, если переменная остается неинициализированной перед использованием. Проверьте спецификации языка и форумы, чтобы убедиться, что вы не беспокоитесь излишне.