|
|
Строка 1: |
Строка 1: |
− | Про объявление как переменных так и констант уже достаточно много говорилось в предыдущих главах этой книги. Вероятно, Читатель уже хорошо себе представляет что такое [[переменные]], чем они отличаются от [[Константы|констант]] и как следует их [[Переменные#Типизация при инициализации|инициализировать]]. Читатель уже должен представлять себе, что такое [[Переменные#Понятие переменной, тип переменной|тип]] переменной или константы, и чем статически типированные переменные отличаются от нетипированных, [[Переменные#Нетипированные (динамические) переменные|динамических переменных]]. В этой главе мы не будем уделять много внимания философским вопросам, касающимся переменных и констант, а опишем только сами синтаксические конструкции объявления.
| + | Super informtiave writing; keep it up. |
− | | + | |
− | Вот несколько примеров объявления как одиночной переменной, так и группы переменных в рамках одного оператора:
| + | |
− | | + | |
− | <source lang="kpp" line="1">
| + | |
− | var x;
| + | |
− | var x = "hello";
| + | |
− | var x, y;
| + | |
− | var x, y = 0;
| + | |
− | var int x, y;
| + | |
− | var int x, real y;
| + | |
− | var int x = "1", y = 1.5;
| + | |
− | </source>
| + | |
− | | + | |
− | При объявлении переменных важно понимать, что при явном указании типа переменной, он сопостовляется только идентификатору идущему сразу после него. Таким образом, строка 5 объявляет переменную ''x'' типа <tt>[[Стандартные типы данных#Целые числа|int]]</tt>, в то время как переменная ''y'' будет иметь [[Переменные#Нетипированные (динамические) переменные|динамический тип]].
| + | |
− | | + | |
− | То же самое относится и к инициализаторам, которые ставятся в соответствие только той переменной, которая стоит слева от оператора "=". К примеру, выражение в строке 4 будет инициализировать только переменную ''y'', в то время как переменная ''x'' не будет иметь инициализатора; то есть для переменной ''x'' объявление эквивалентно тому что записано в строке 1.
| + | |
− | | + | |
− | Обратите внимание на строку 7: переменная ''x'' имеет инициализатор типа <tt>string</tt>, но ввиду того что тип переменной указан явным образом, переменная будет иметь тип <tt>int</tt>. При этом, тип инициализатора будет ''приведен'' к типу переменной. Если же типы переменной и инициализатора ''неприводимы'', — будет выдано сообщение об ошибке.
| + | |
− | | + | |
− | Приведем еще раз те же самые примеры, но оформим их в виде таблицы, дополнив сведениями о типах переменых:
| + | |
− | | + | |
− | <source lang="kpp">
| + | |
− | //Строка объявления Тип x Тип y Инициализатор x Инициализатор y
| + | |
− | | + | |
− | var x; динамика
| + | |
− | var x = "hello"; string "hello"
| + | |
− | var x, y; динамика динамика
| + | |
− | var x, y = 0; динамика int 0
| + | |
− | var int x, y; int динамика
| + | |
− | var int x, real y; int real
| + | |
− | var int x = "1", y = 1.5; int real "1" as int 1.5
| + | |
− | </source>
| + | |
− | | + | |
− | '''Примечание:''' как видно из таблицы, существует различие между инициализацией переменной и присваиванием ей значения, которое заключается в том, что в зависимости от условий, тип переменной может оказаться либо динамическим, либо фиксированным статическим; внешне же, выражения вызывающие такое поведение, могут выглядеть очень похоже. Рассмотрим следующий пример:
| + | |
− | | + | |
− | <source lang="kpp">
| + | |
− | var x = 0;
| + | |
− | var y;
| + | |
− | y = 0;
| + | |
− | </source>
| + | |
− | | + | |
− | В результате выполнения этого кода и переменная ''x'', и переменная ''y'' будут иметь значение равное 0. Более того, типы переменных в этот момент будут совпадать и равны <tt>int</tt>. Однако, переменная ''x'' будет иметь статический тип, в то время как переменная ''y'' — [[Переменные#Нетипированные (динамические) переменные|динамический]]. Если же мы попытаемся присвоить этим переменным другие значения, заведомо неприводимого типа, то произойдет следующее:
| + | |
− | | + | |
− | <source lang="kpp">
| + | |
− | x = { |x| return x + 1; };
| + | |
− | y = [1, 2, 3];
| + | |
− | </source>
| + | |
− | | + | |
− | В случае переменной ''x'' будет сгенерирована ошибка еще на этапе компиляции, поскольку тип переменной был назначен статически при инициализации и не может быть изменен в ходе работы программы. В случае переменной ''y'' никакой ошибки не произойдет, поскольку это динамическая переменная. В ходе присваивания, она просто изменит свой тип на <tt>[[Стандартные типы данных#Массивы и списки|array]]</tt> и будет представлять собой уже массив из трех чисел.
| + | |
− | | + | |
− | ----
| + | |
− | | + | |
− | | + | |
− | Объявления констант вместо <tt>'''var'''</tt>, начинаются с ключевого слова <tt>'''const'''</tt> и синтаксически ничем не отличаются от объявления переменных, за исключением того, что константы обязательно должны инициализироваться:
| + | |
− | | + | |
− | <source lang="kpp">
| + | |
− | const x; //неверно. требуется инициализатор
| + | |
− | const x = "hello"; //верно
| + | |
− | const x, y = 0; //неверно. константа x не инициализируется
| + | |
− | const int x = "1", y = 1.5; //верно
| + | |
− | </source>
| + | |
− | | + | |
− | BION I'm ipemrsesd! Cool post!
| + | |
− | | + | |
− | iwXPxK <a href="http://jasefpvspoyj.com/">jasefpvspoyj</a>
| + | |
Super informtiave writing; keep it up.