В чем разница между объявлением переменной, её определением и инициализацией
Начинающим программистам первое время бывает трудно запомнить все те названия и термины, которые обрушиваются на них из учебников и современных вебинаров. Особенно, если они еще чем-то похожи между собой.
Такими близкими по смыслу и довольно часто путающимися являются понятия "объявление" переменной, её "определение" и её "инициализация".
В силу некоторой личной привычки я иногда фиксирую результаты гугления по тому или иному вопросу, связанному с обучением, в небольших конспектах. Это помогает разобраться в материале, систематизировать его и по-своему, более удобно для себя изложить. В дальнейшем такие записи помогают быстро повторить пройденный материал и являются своеобразным альтернативным вариантом изложения той или иной учебной темы.
И поскольку мы живем в жутко социализированное время, то естественно хочется поделиться результатами своего труда с другими,такими же начинающими программистами. Возможно кому-то это тоже пригодится.
Объявление переменной или константы
Итак, выражение называется объявлением переменной или декларированием. На английском это выглядит так - Declaring Constants and Variables:
var a = 10
В приведенном примере задана переменная (var), задано имя переменной (а) и задано значение переменной (10).
Определение переменной или константы
Как известно, объявить переменную мы можем и без указания значения. Но тогда нужно указать тип данных будущего значения.
Например:
var b: Int?
Вспомним, зачем это делается. Если в первом случае мы сразу указываем значение, то Swift автоматом определяет тип данных значения. Если же значение не указано, то Swift не знает, какого типа данные в ней будут храниться и ему нужно явно указать этот тип.
Заодно и еще один термин - аннотация типа. Это вот как раз результат действия по определению, а именно слово Int?.
Аннотация типа может быть простая, состоящая из одного слова, обозначающая тип данных, так и составная. Например, в кортежах (tuples) может быть и такая запись
var b: (Int, Int, Int)
И кстати, для чистоты кода в Swift рекомендуется не ставить пробел между именем переменной и двоеточием.
Инициализация переменной или константы
В первом примере, который мы продублируем ниже, где происходит не только объявление переменной, но и её инициализация:
var a = 10
Инициализация означает, что переменная запущена в работу, ей присвоено начальное значение, она инициализирована. Без присвоения начального значения переменная просто объявлена, а с начальным значением она еще и инициализирована.
Во втором случае, когда переменная объявлена без начального значения, т.е. она еще не инициализирована, не готова полностью к работе.
var b: Int
Три действия - объявление, определение, инициализация
Таким образом, мы имеем здесь три действия - объявление, определение и инициализацию. Их можно записать в одном выражении:
var a: Int = 10
Но, как мы помним, Swift рекомендует экономить время, если есть значение, он может самостоятельно определить тип данных.
И еще, обратите внимание, что голого объявления переменной не может быть. Должно быть обязательно объявление с какой-то второй операцией - или с присвоением значения или с определением типа данных значения. И можно применять сразу три действия, но нельзя только одно, т.е. больше можно, меньше нельзя.
Ковбойская история
Разницу между этими тремя действиями можно проиллюстрировать с помощью шуточного примера, найденного на просторах интернета и немного подредактированного))
Итак, в бар входит в ковбой и требует выпивку - это объявление, декларация намерений.
Бармен спрашивает - чем будешь платить: деньгами, отдашь пистолет или отработаешь мытьем посуды? - Я заплачу, - отвечает ковбой, - у меня есть деньги. - Это определение типа данных.
Тогда плати 5 баксов и получай выпивку - Ковбой платит и веселье начинается - Это инициализация, присвоение начального значения, запуск процесса в работу.
Заметка
Обратите внимание, что мы используем выражение "тип данных" и по отношению к значению, и по отношению к переменным и константам. Дело в том, что в программировании по большому счета можно практически все называть типом данных. Это и объекты, и классы, и наиболее нам известные Int, String, Double, Bool и т.д.
Но, чтобы как-то все же отличать типы данных значений от констант и переменных будем называть последние некими сущностями, элементами языка программирования. Тогда у нас будут типы данных для значений и типы данных для определенных элементов программирования (к которым относятся в том числе константы и переменные).
Автор: Максим Савостьянов