Для чего нужен тип переменной как исполнитель узнает
Руководство по JavaScript, часть 3: переменные, типы данных, выражения, объекты
Сегодня, в третьей части перевода руководства по JavaScript, мы поговорим о разных способах объявления переменных, о типах данных, о выражениях и об особенностях работы с объектами.
Переменные
Переменная представляет собой идентификатор, которому присвоено некое значение. К переменной можно обращаться в программе, работая таким образом с присвоенным ей значением.
Сама по себе переменная в JavaScript не содержит информацию о типе значений, которые будут в ней храниться. Это означает, что записав в переменную, например, строку, позже в неё можно записать число. Такая операция ошибки в программе не вызовет. Именно поэтому JavaScript иногда называют «нетипизированным» языком.
▍Ключевое слово var
До появления стандарта ES2015 использование ключевого слова var было единственным способом объявления переменных.
Так, если включён так называемый строгий режим (strict mode), подобное вызовет ошибку. Если строгий режим не включён, произойдёт неявное объявление переменной и она будет назначена глобальному объекту. В частности, это означает, что переменная, неявно объявленная таким образом в некоей функции, окажется доступной и после того, как функция завершит работу. Обычно же ожидается, что переменные, объявляемые в функциях, не «выходят» за их пределы. Выглядит это так:
В одном выражении можно объявить несколько переменных:
Областью видимости переменной (scope) называют участок программы, в котором доступна (видима) эта переменная.
Переменная, инициализированная с помощью ключевого слова var за пределами какой-либо функции, назначается глобальному объекту. Она имеет глобальную область видимости и доступна из любого места программы. Если переменная объявлена с использованием ключевого слова var внутри функции, то она видна только внутри этой функции, являясь для неё локальной переменной.
Важно понимать, что блоки (области кода, заключённые в фигурные скобки) не создают новых областей видимости. Новая область видимости создаётся при вызове функции. Ключевое слово var имеет так называемую функциональную область видимости, а не блочную.
Если в коде функции объявлена некая переменная, она видна всему коду функции. Даже если переменная объявлена с помощью var в конце кода функции, обратиться к ней можно и в начале кода, так как в JavaScript работает механизм поднятия переменных (hoisting). Этот механизм «поднимает» объявления переменных, но не операции их инициализации. Это может стать источником путаницы, поэтому возьмите себе за правило объявлять переменные в начале функции.
▍Ключевое слово let
Если само слово «let» кажется не очень понятным, можно представить, что вместо него используется слово «пусть». Тогда выражение let color = ‘red’ можно перевести на английский так: «let the color be red», а на русский — так: «пусть цвет будет красным».
Например, такой код вызовет ошибку:
▍Ключевое слово const
В данном примере константе a нельзя присвоить новое значение. Но надо отметить, что если a — это не примитивное значение, наподобие числа, а объект, использование ключевого слова const не защищает этот объект от изменений.
Когда говорят, что в переменную записан объект, на самом деле имеют в виду то, что в переменной хранится ссылка на объект. Эту вот ссылку изменить не удастся, а сам объект, к которому ведёт ссылка, можно будет изменить.
Ключевое слово const не делает объекты иммутабельными. Оно просто защищает от изменений ссылки на них, записанные в соответствующие константы. Вот как это выглядит:
Типы данных
JavaScript иногда называют «нетипизированным» языком, но это не соответствует реальному положению дел. В переменные, и правда, можно записывать значения разных типов, но типы данных в JavaScript, всё-таки, есть. В частности, речь идёт о примитивных и об объектных типах данных.
▍Примитивные типы данных
Вот список примитивных типов данных JavaScript:
Поговорим о наиболее часто используемых типах данных из этого списка.
Тип number
Значения типа number в JavaScript представлены в виде 64-битных чисел двойной точности с плавающей запятой.
В коде числовые литералы представлены в виде целых и дробных чисел в десятичной системе счисления. Для записи чисел можно использовать и другие способы. Например, если в начале числового литерала имеется префикс 0x — он воспринимается как число, записанное в шестнадцатеричной системе счисления. Числа можно записывать и в экспоненциальном представлении (в таких числах можно найти букву e ).
Вот примеры записи целых чисел:
Подсказка по объектной обёртке Number
Обратите внимание на двойные скобки после имени метода. Если их не поставить, система не выдаст ошибку, но, вместо ожидаемого вывода, в консоли окажется нечто, совсем не похожее на строковое представление числа 5.
Глобальный объект Number можно использовать в виде конструктора, создавая с его помощью новые числа (правда, в таком виде его практически никогда не используют), им можно пользоваться и как самостоятельной сущностью, не создавая его экземпляры (то есть — некие числа, представляемые с его помощью). Например, его свойство Number.MAX_VALUE содержит максимальное числовое значение, представимое в JavaScript.
Тип string
Значения типа string представляют собой последовательности символов. Такие значения задают в виде строковых литералов, заключённых в одинарные или двойные кавычки.
Строковые значения можно разбивать на несколько частей, используя символ обратной косой черты (backslash).
Строка может содержать так называемые escape-последовательности, интерпретируемые при выводе строки в консоль. Например, последовательность \n означает символ перевода строки. Символ обратной косой черты можно использовать и для того, чтобы добавлять кавычки в строки, заключённые в такие же кавычки. Экранирование символа кавычки с помощью \ приводит к тому, что система не воспринимает его как специальный символ.
Шаблонные литералы
В ES2015 появились так называемые шаблонные литералы, или шаблонные строки. Они представляют собой строки, заключённые в обратные кавычки ( ` ) и обладают некоторыми интересными свойствами.
Например, в шаблонные литералы можно подставлять некие значения, являющиеся результатом вычисления JavaScript-выражений.
Использование обратных кавычек упрощает многострочную запись строковых литералов:
Тип boolean
В частности, ложными значениями являются следующие:
Остальные значения являются истинными.
Тип null
Тип undefined
▍Объекты
Выражения
Выражения — это фрагменты кода, которые можно обработать и получить на основе проведённых вычислений некое значение. В JavaScript существует несколько категорий выражений.
Арифметические выражения
В эту категорию попадают выражения, результатом вычисления которых являются числа.
Строковые выражения
Результатом вычисления таких выражений являются строки.
Первичные выражения
В эту категорию попадают литералы, константы, ссылки на идентификаторы.
Сюда же можно отнести и некоторые ключевые слова и конструкции JavaScript.
Выражения инициализации массивов и объектов
Логические выражения
В логических выражениях используются логические операторы, результатом их вычисления оказываются логические значения.
Выражения доступа к свойствам
Эти выражения позволяют обращаться к свойствам и методам объектов.
Выражения создания объектов
Выражения объявления функций
Выражения вызова
Такие выражения используются для вызова функций или методов объектов.
Работа с объектами
▍Прототипное наследование
JavaScript выделяется среди современных языков программирования тем, что поддерживает прототипное наследование. Большинство же объектно-ориентированных языков используют модель наследования, основанную на классах.
У каждого JavaScript-объекта есть особое свойство ( __proto__ ), которое указывает на другой объект, являющийся его прототипом. Объект наследует свойства и методы прототипа.
Предположим, у нас имеется объект, созданный с помощью объектного литерала.
Проверить это можно следующим образом.
Все свойства и методы прототипа доступны объекту, имеющему этот прототип. Вот, например, как выглядит их список для массива.
Подсказка по массиву
У Object.prototype прототипа нет.
То, что мы видели выше, является примером цепочки прототипов.
При попытке обращения к свойству или методу объекта, если такого свойства или метода у самого объекта нет, их поиск выполняется в его прототипе, потом — в прототипе прототипа, и так — до тех пор, пока искомое будет найдено, или до тех пор, пока цепочка прототипов не кончится.
Функции-конструкторы
Выше мы создавали новые объекты, пользуясь уже имеющимися в языке функциями-конструкторами (при их вызове используется ключевое слово new ). Такие функции можно создавать и самостоятельно. Рассмотрим пример.
Здесь мы создаём функцию-конструктор. При её вызове создаётся новый объект, на который указывает ключевое слово this в теле конструктора. Мы добавляем в этот объект свойство name и записываем в него то, что передано конструктору. Этот объект возвращается из конструктора автоматически. С помощью функции-конструктора можно создать множество объектов, свойства name которых будут содержать то, что передано при их создании конструктору.
▍Классы
В стандарте ES6 в JavaScript пришло такое понятие как «класс».
До этого в JavaScript можно было пользоваться лишь вышеописанным механизмом прототипного наследования. Этот механизм непривычно выглядел для программистов, пришедших в JS из других языков. Поэтому в языке и появились классы, которые, по сути, являются «синтаксическим сахаром» для прототипного механизма наследования. То есть, и объекты, созданные традиционным способом, и объекты, созданные с использованием классов, имеют прототипы.
Объявление класса
Вот как выглядит объявление класса.
Наследование, основанное на классах
Классы могут расширять другие классы. Объекты, созданные на основе таких классов, будут наследовать и методы исходного класса, и методы, заданные в расширенном классе.
Если класс, расширяющий другой класс (наследник этого класса) имеет метод, имя которого совпадает с тем, который есть у класса-родителя, этот метод имеет преимущество перед исходным.
В классах не предусмотрено наличие переменных (свойств), свойства создаваемых с помощью классов объектов нужно настраивать в конструкторе.
Статические методы
Методы, описываемые в классе, можно вызывать, обращаясь к объектам, созданным на основе этого класса, но не к самому классу. Статические ( static ) методы можно вызывать, обращаясь непосредственно к классу.
Приватные методы
В JavaScript нет встроенного механизма, который позволяет объявлять приватные (частные, закрытые) методы. Это ограничение можно обойти, например, с использованием замыканий.
Геттеры и сеттеры
Итоги
В этом материале мы поговорили о переменных, о типах данных, о выражениях и о работе с объектами в JavaScript. Темой нашего следующего материала будут функции.
Уважаемые читатели! Если вы уже давно пишете на JS, просим рассказать о том, как вы относитесь к появлению в языке ключевого слова class.
Урок 5
Переменная: тип, имя, значение
§ 1.3. Переменная: тип, имя, значение
Содержание урока
1.3. Переменные: тип, имя, значение
1.3. Переменные: тип, имя, значение
В языках Visual Basic и Gambas и в языке OpenOffice.org Basic переменные используются для хранения и обработки данных в программах.
Переменная задается именем, определяющим область оперативной памяти компьютера, в которых хранится значение переменной. Значениями переменных могут быть данные различных типов (целые или вещественные числа, последовательности символов, логические значения и т. д.).
Переменная в программе представлена именем и служит для обращения к данным определенного типа, конкретное значение которых хранится в ячейке оперативной памяти.
Тип переменной. Тип переменной определяется типом данных, которые могут быть значениями переменной. Значениями переменных числовых типов Byte, Short, Integer, Long, Single, Double являются числа, логического типа Boolean — значения «истина» (True) или «ложь» (False), строкового типа String — последовательности символов. Обозначения типов переменных являются ключевыми словами языка и поэтому выделяются.
Данные различных типов требуют для своего хранения в оперативной памяти компьютера различное количество ячеек (байтов) (табл. 1.3).
Таблица 1.3. Типы переменных
Имя переменной. Имя переменной определяет область оперативной памяти компьютера, в которых хранится значение переменных. Имя каждой переменной (идентификатор) уникально и не может меняться в процессе выполнения программы. В рассматриваемых языках имя переменной может состоять из различных символов (латинские и русские буквы, цифры и т. д.), но должно обязательно начинаться с буквы и не должно включать знак точка «.». Количество символов в имени не может быть более 1023, однако для удобства обычно ограничиваются несколькими символами.
Объявление переменных. Необходимо объявлять переменные, для того чтобы исполнитель программы (компьютер) «понимал», переменные какого типа используются в программе.
Для объявления переменной используется оператор объявления переменных Dim. С помощью одного оператора можно объявить сразу несколько переменных, например:
Dim A As Byte, В As Short, С As Single, D As String, E As Boolean
Присваивание переменным значений. Задать или изменить значение переменной можно с помощью оператора присваивания. При выполнении оператора присваивания переменная, имя которой указано слева от знака равенства, получает значение, которое находится справа от знака равенства. Например:
Значение переменной может быть задано числом, строкой или логическим значением, а также может быть представлено с помощью арифметического, строкового или логического выражения.
Проанализируем процесс выполнения программы компьютером (для определенности записанной на языке Visual Basic). После запуска проекта оператор объявления переменных Dim отведет в оперативной памяти для их хранения необходимое количество ячеек (табл. 1.4):
• для целой неотрицательной переменной А одну ячейку;
• для целочисленной переменной В две ячейки;
• для переменной одинарной точности С четыре ячейки;
• для строковой переменной D по две ячейки на символ;
• для логической переменной Е две ячейки.
Таблица 1.4. Значения переменных в оперативной памяти
Таким образом, в памяти для хранения значений переменных будет отведена 31 ячейка, например ячейки с 1-й по 31-ю.
Контрольные вопросы
1. В чем состоит разница между типом, именем и значением переменной?
2. Какие основные типы переменных используются в языке программирования Visual Basic? Gambas? OpenOffice.org Basic?
3. Почему рекомендуется объявлять переменные перед их использованием в программе?
Задания для самостоятельного выполнения
1.5. Задание с кратким ответом. Назовите количество ячеек оперативной памяти, необходимое для хранения значений переменных первых семи типов языка OpenOffice.org Basic, перечисленных в табл. 1.3.
Cкачать материалы урока
Зачем нужно явно указывать тип переменной?
Зачем указывать тип функции?
Зачем нужно перед функции писать ее тип? И если функция int то может ли она принимать аргументы.
Скорее всего просто выделится количество памяти, достаточное для любого типа.
Добавлено через 46 секунд
Я знаю, и что?
Я узнал что хотел: явное указание для ускорения программы и экономии памяти, или одно из этого.
P.S. я программист игр, и сейчас моделирую игровую систему и проектирую ИИ, а такого простого оказывается не знаю!
P.P.S. я начинающий программист и на данном этапе «развития» всего лишь экспериментирую.
Знающий человек, не задавал бы такие вопросы.
Это гласит о том, что вы не знаете, как устроен компьютер, и не понимаете как представляется переменная в памяти. А это большой минус.
Добавлено через 8 минут
С одной стороны да, с другой нет. Я знаю как устроен компьютер и хранение в памяти тоже знаю, я лишь зациклился на том, что понял пост одного человека на форуме не верно, подумав, что он хотел сказать что это плохо сказывается на программе. Я понял это в смысле логической ошибки, которая может произойти если явно не указать тип (не в смысле всегда, обязательно, а при определенных обстоятельствах), а то что это просто влияет на память и скорость я не подумал.
P.S. спасибо за совет, почитаю
Типы данных и переменные.
Типы данных:
В языке Си различают понятия “тип данных” и “модификатор типа”. Тип данных – это целый, а модификатор – со знаком или без знака. Целое со знаком будет иметь как положительные, так и отрицательные значения, а целое без знака – только положительные значения. В языке Си можно выделить пять базовых типов.
Переменная типа char имеет размер 1 байт, ее значениями являются различные символы из кодовой таблицы, например: ‘ф’, ‘:’, ‘j’ (при записи в программе они заключаются в одинарные кавычки).
Ключевое слово double позволяет определить вещественную переменную двойной точности. Она занимает в памяти в два раза больше места, чем переменная типа float. Переменная типа double может принимать значения в диапазоне от 1.7e-308 до 1.7e+308.
Ключевое слово void используется для нейтрализации значения объекта, например, для объявления функции, не возвращающей никаких значений.
Типы переменных:
Программы оперируют с различными данными, которые могут быть простыми и структурированными. Простые данные – это целые и вещественные числа, символы и указатели (адреса объектов в памяти). Целые числа не имеют, а вещественные имеют дробную часть. Структурированные данные – это массивы и структуры; они будут рассмотрены ниже.
Переменная – это ячейка в памяти компьютера, которая имеет имя и хранит некоторое значение. Значение переменной может меняться во время выполнения программы. При записи в ячейку нового значения старое стирается.
Хорошим стилем является осмысленное именование переменных. Имя переменной может содержать от одного до 32 символов. Разрешается использовать строчные и прописные буквы, цифры и символ подчёркивания, который в Си считается буквой. Первым символом обязательно должна быть буква. Имя переменной не может совпадать с зарезервированными словами.
Тип char
Ключевые слова signed и unsigned указывают, как интерпретируется нулевой бит объявляемой переменной, т.е., если указано ключевое слово unsigned, то нулевой бит интерпретируется как часть числа, в противном случае нулевой бит интерпретируется как знаковый.
Тип int
Целочисленная величина int может быть short (короткой) или long (длинной). Ключевое слово short ставится после ключевых слов signed или unsigned. Таким образом, есть типы: signed short int, unsigned short int, signed long int, unsigned long int.
При объявлении переменной типа signed short int ключевые слова signed и short могут быть пропущены, и такой тип переменной может быть объявлен просто int. Допускается и объявление этого типа одним ключевым словом short.
Переменная unsigned short int может быть объявлена как unsigned int или unsigned short.
Тип | Диапазон | Шестнадцатеричный диапазон | Размер |
unsigned char | 0 … 255 | 0x00 … 0xFF | 8 bit |
signed char или просто char | -128 … 127 | -0x80 … 0x7F | 8 bit |
unsigned short int или просто unsigned int или unsigned short | 0 … 65535 | 0x0000 … 0xFFFF | 16 bit |
signed short int или signed int или просто short или int | -32768 … 32767 | 0x8000 … 0x7FFF | 16 bit |
unsigned long int или просто unsigned long | 0 … 4294967295 | 0x00000000 … 0xFFFFFFFF | 32 bit |
signed long или просто long | -2147483648 … 2147483647 | 0x80000000 … 0x7FFFFFFF | 32 bit |
unsigned long long | 0 … 18446744073709551615 | 0x0000000000000000 … 0xFFFFFFFFFFFFFFFF | 64 bit |
signed long long или просто long long | -9223372036854775808 … 9223372036854775807 | 0x8000000000000000 … 0x7FFFFFFFFFFFFFFF | 64 bit |
Объявление переменных
Переменные объявляют в операторе описания. Оператор описания состоит из спецификации типа и списка имён переменных, разделённых запятой. В конце обязательно должна стоять точка с запятой.
Модификаторы – ключевые слова signed, unsigned, short, long.
Спецификатор типа – ключевое слово char или int, определяющее тип объявляемой переменной.
Идентификатор – имя переменной.
При объявлении переменную можно проинициализировать, то есть присвоить ей начальное значение.
В переменную x при объявлении сразу же будет записано число 100. Инициализируемые переменные лучше объявлять в отдельных строках.
Понятие переменной в программировании. Виды и типы переменных (Понятие Переменная в программировании)
Содержание:
Введение
В данной курсовой работе будет раскрыто понятие переменной, её виды и типы. Так же я затронул тему операторов присваивания, классификации и области действия переменных, в том числе на примере Visual Basic. Более подробно раскрыты понятия простых и сложных переменных, операторов присваивания, статистической и динамической типизации.
Понятие Переменная в программировании.
Данные хранятся в ячейках памяти компьютера. Когда мы вводим число, оно помещается в память. Но как узнать, куда именно? Как в последствии обращаться к этим данными? Раньше, при написании программ на машинном языке, обращение к ячейкам памяти осуществляли с помощью указания регистров. Но уже с появлением ассемблеров, при обращении к данным стали использовать так называемые переменные. Механизм связи между переменными и данными может различаться в зависимости от языка программирования и типа данных. Пока достаточно запомнить, что данные связываются с каким-либо именем и в дальнейшем обращение к ним возможно по этому имени.
В программе на языке Python связь между данными и переменными устанавливается с помощью знака =. Такая операция называется присваиванием. Например, выражение sq = 4 означает, что на объект (данные) в определенной области памяти ссылается имя sq и обращаться к ним теперь следует по этому имени.
Имена переменных могут быть любыми. Однако есть несколько общих правил их написания:
Чтобы узнать значение, на которое ссылается переменная, находясь в режиме интерпретатора, достаточно ее вызвать (написать имя и нажать Enter).
Пример работы с переменными в интерактивном режиме:
Таким образом одним из важнейших понятий в языках программирования является понятие переменной. При программировании в машинных кодах выполнение простейшей арифметической операции над двумя числами требуется указать код операции, адреса ячеек оперативной памяти, где хранятся эти числа, и указать адрес ячеек памяти, где будет храниться результат операции. При выполнении такой программы по команде процессора данные передаются из этих ячеек на регистры процессора (так называются ячейки памяти процессора), где над ними и производится определенная операция. Иногда, согласно алгоритму задачи, результат может помещаться, записываться в ту же ячейку памяти, в которой хранилось одно из чисел, над которым выполнялась операция. В этом случае прежнее значение данных будет заменено новым.
В языках программирования высокого уровня аналогом этих ячеек памяти является переменная. Отсюда следующее определение.
Переменная–это именованная область памяти, где хранятся данные, с которыми производятся в программе определенные операции, действия и которые могут изменяться при выполнении программы. Само название «переменная» предполагает ее изменчивость.
Важнейшее положение языков программирования: «После присвоения переменной некоторого значения вместо этого значения можно использовать переменную. Это равносильно использованию самих значений.». Именно в этом состоит основный смысл введения переменных в языках программирования.
Long Integer (Длинное целое)
Currency (Денежные единицы)
от 0 до 65 535 символов
True (Истина) или False (Ложь)
Dim Flag As Boolean
от January (Январь)1, 100, до December (Декабрь) 31, 9999
Dim Birthday As Date
16 байт (для чисел); 22 байт на символ (для строк)
для всез типов данных
В расчетных задачах можно выделить переменные, являющиеся начальными данными, переменные для хранения промежуточных результатов и результирующие переменные, для вычисления которых и формулируется задача.
Именно использование переменных в программе позволяет выполнять одну и ту же программу с различными начальными значениями переменных без изменения кода программы.
После трансляции программы в машинные коды каждой переменной в компьютере выделяется определенная область оперативной памяти со своим адресом. Делают это трансляторы при переводе кодов программы, написанной программистом, в машинные коды и операционная система.
Но при разработке программы программиста совершенно не волнует, какой будет адрес выделяемой память и величина этой памяти для хранения значений переменных. Главное, если программист каким-либо способом задал, присвоил переменным какие-то значения, то в любых выражениях программы, где будут встречаться эти переменные, их значения будут подставляться вместо переменных.
Имена переменных
Каждая переменная должна иметь уникальное имя. Программист сам решает, исходя из постановки задачи и ее алгоритма, какие имена давать переменным. Рекомендуется переменным давать смысловые, информационные имена.
Некоторые требования при задании имен переменным:
Последнее требование будет ясно позже, после знакомства с областью видимости переменных. Примеры разрешенных и неразрешенных имен:
sngX, Data_Rogdenya, strNomerGruppi
Фамилия, NameStudent, Цена, Num_Room, D25
Date of Work, 5Numer, Next
(Next– слово из оператора циклаVB, ключевое словоVB).
В Visual Basic можно задавать имена переменным на русском языке.
Типы данных
Как уже указывалось, после трансляции программы в машинные коды разным переменным будут выделены свои и разные по величинеучастки памяти. Величина выделяемой памяти зависит оттипа данного, которое будет храниться в переменной. Но поскольку данные хранятся в переменных, то можно говорить отипах переменных. Приведем базовые типы переменных, используемые вVB:
Здесь приводится префикс для каждого типа переменных. Это придумка венгерских программистов. Префикс пишется строчными буквами в начале имени переменной и указывает на ее тип. Вводить префикс рекомендуется в больших программах. Примеры переменных с префиксом приведены в следующем параграфе.
Выбор типа переменных – забота программиста. Если тип переменной выбран неправильно, выполнение программы может сразу или в один «прекрасный» момент прерваться. Например, если при определении суммы натуральных чисел S = 1 + 2 + 3 + …+ n переменную S объявить как Integer, то при сложении 256 чисел (n = 256) и более будет переполнение, так как сумма будет превышать число 32767, которое является максимальным для переменной целого типа.
Следовательно, при выборе типа переменной программиста должны интересовать предельные значения переменных определенного типа, чтобы переменные программируемой задачи полностью соответствовали выбранному типу по своим возможным значениям.
Объявление переменных
Рассмотрим объявление переменных на примере языка Visual Basic.
В начале программы (процедуры) переменную рекомендуется объявлять с помощью оператора Dim (или Public, или Private, или Static). После оператора Dim (от английского Dimension – размер, величина) пишется имя переменной, затем ключевое слово As (как) и название типа переменной. Например:
Dim sngY As Single, curЦена As Currency, i As Integer
Dim ДатаРожд As Date
Static Баллы As Integer
Здесь переменные sngY иcurЦена приведены с префиксами.
Имена переменных еще называют идентификаторами (от английского Identification–отождествление, распознавание, обозначение). Интересно, что все возможные слова перевода соответствуют сути идентификатора, имени переменной.
В VB объявление переменных не обязательно. Но лучше, во избежание возможных ошибок программирования, приучить себя обязательно объявлять переменные. Для этого достаточно ввести в разделе General Declarations Окна написания кодаоператор Option Explicit. После этого VB не пропустит ни одного необъявленного переменного.
Другие, краткие способы объявления переменных здесь не рассматриваются. В кратких способах объявления переменных тип переменных может не указываться. Но следует знать, что если тип переменной не объявлен, она имеет тип Variant. А в этом случае переменной можно присвоить значение любого типа данных.
Оператор присваивания
Как уже указывалось выше, перед использованием переменной в программе необходимо ей присвоить значение. Это делается с помощью оператора присваивания, который известен всем как знак равенства «=». Операция присваивания имеет следующий синтаксис:
ИмяПеременной = Выражение
В качестве выражения может быть записана не только формула, но и константа (числовая, текстовая, дата, значение логической переменной и т. д.). Понимается этот оператор так: «Значение выражения, которое всегда записывается справа от оператора присваивания, присваивается переменной, имя которой всегда записывается слева от знака присваивания».
В третьей строке примера вычисляется выражение и его значение присваивается переменной Y. Следует отметить, что переменная х обязательно должна получить некоторое значение перед вычислением выражения Sin(x) + Cos(x/2), иначе случится аварийный останов программы.
Оператор типа k = k + 1 называется счетчиком. Счетчик демонстрирует отличие знака равенства от оператора присваивания. С точки зрения алгебры выражение для счетчика – полная бессмыслица, так как, сократив k, мы получаем, что 0 = 1 (!?). А согласно правилам программирования – величина k увеличивается на 1. Действительно, в выражении справа значениеk, которое имело оно к моменту выполнения этого выражения, складывается с 1 и присваивается опять же переменной k.
Сохранение данных в переменных А, Fam, Y, kс помощью оператора присваивания показано во всех приведенных кодах примера.
Получение данных из переменных х и k демонстрируют третий и четвертый коды примера. Это происходит всегда, когда имена переменных записываются в выражениях, следующих после оператора присваивания “=”. При выводе переменных с помощью оператора Print также происходит получение данных из переменных, если их имена записаны после этого оператора.
Область видимости переменных
При программировании необходимо не только объявить все используемые переменные с правильным заданием их типов, но и определить область их видимости. Поясним, что это такое.
Все переменные, объявленные только в событийной процедуре, нигде больше не могут быть использованы. Если их имена ввести в любой оператор другой процедуры, то это будут уже другие переменные, но с такими же именами. Такие переменные называются локальными в процедуре.
Если требуется, чтобы переменная могла использоваться в любой событийной процедуре одной формы, она должна быть объявлена в разделе General Declarations формы. Это надо сделать, например, в том случае, когда для ввода переменных создается отдельная процедура, а обработка введенных данных происходит в другой процедуре этой же формы. Такие переменные принято называть локальными в форме.
В случае, когда разрабатываемое приложение состоит из нескольких форм и в них используются одни и те же переменные, то эти общие для всех форм и процедур переменные следуют объявлять в разделе General Declarations программного модуля Module. Такие переменные называются глобальными в приложении.
В кратком и в систематизированном виде все изложенное выше приведено в следующей таблице.
Область видимости переменных и их объявление
Область видимости переменной
Место объявления
Глобальная в приложении
В разделе General Declarations программного модуля Module оператором Public
В разделе General Declarations формы оператором Dim или Public
Локальная в процедуре
В процедуре оператором Dim или Static
Классификация
Статическая и динамическая типизация переменных
Статическая типизация — приём, широко используемый в языках программирования, при котором переменная, параметр подпрограммы, возвращаемое значение функции связывается с типом в момент объявления и тип не может быть изменён позже (переменная или параметр будут принимать, а функция — возвращать значения только этого типа). Примеры статически типизированных языков — Ада, С++, D, Java, ML, Паскаль.
Динамическая типизация — приём, широко используемый в языках программирования и языках спецификации, при котором переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной. Таким образом, в различных участках программы одна и та же переменная может принимать значения разных типов. Примеры языков с динамической типизацией — Smalltalk, Python, Objective-C, Ruby, PHP, Perl, JavaScript, Lisp, xBase, Erlang.
В некоторых языках со слабой динамической типизацией стоит проблема сравнения величин, так, например, PHP имеет операции сравнения «==», «!=» и «===», «!==», где вторая пара операций сравнивает и значения, и типы переменных. Операция «===» даёт true только при полном совпадении, в отличие от «==», который считает верным такое выражение: (1==»1″). Стоит отметить, что это проблема не динамической типизации в целом, а конкретных языков программирования.
Если тип данных определяется на этапе компиляции, имеет место статическая типизация, а если на этапе выполнения программы — динамическая. В последнем случае иногда говорят, что переменная не имеет типа, хотя данные, содержащиеся в ней, безусловно, относятся к определённому типу данных, но выясняется это уже во время выполнения программы.
В большинстве случаев статическая типизация позволяет уменьшить затраты ресурсов при выполнении программы, поскольку для динамической типизации требуются затраты ресурсов на выяснение типов данных и их приведение в выражениях со смешанными типами. Статическая типизация позволяет проводить проверку типов на этапе компиляции программы. Это также упрощает обнаружение ошибок ещё на этапе разработки, когда их исправление обходится менее дорого.
Тем не менее, во многих случаях необходимо применение динамической типизации. Например, необходимость поддержания совместимости при переходе на новый формат представления данных (например, старая часть проекта посылает процедуре дату символьной строкой, а новые объекты используют более современный числовой тип).
Статические и динамические переменные
Адрес поименованной ячейки памяти также может определяться как на этапе компиляции, так и во время выполнения программы. По времени создания переменные бывают статическими и динамическими. Первые создаются в момент запуска программы или подпрограммы, а вторые создаются в процессе выполнения программы.
Динамическая адресация нужна только тогда, когда количество поступающих на хранение данных заранее точно не известно. Такие данные размещают в специальных динамических структурах, тип которой выбирается в соответствии со спецификой задачи и с возможностями выбранной системы программирования. Это может быть стек, куча, очередь и т. п. Даже файл, в том смысле, который заложил Н. Вирт в Паскаль, является динамической структурой.
Локальные и глобальные переменные. Области видимости
По зоне видимости различают локальные и глобальные переменные. Первые доступны только конкретной подпрограмме, вторые — всей программе. С распространением модульного и объектного программирования, появились ещё и общие переменные (доступные для определённых уровней иерархии подпрограмм). Область видимости иногда задаётся классом памяти. Ограничение видимости может производиться путём введения пространств имён.
Ограничение зоны видимости придумали как для возможности использовать одинаковые имена переменных (что разумно, когда в разных подпрограммах переменные выполняют похожую функцию), так и для защиты от ошибок, связанных с неправомерным использованием переменных (правда, для этого программист должен владеть и пользоваться соответствующей логикой при структуризации данных).
Простые и сложные переменные
По наличию внутренней структуры, переменные могут быть простыми или сложными (составными).
Простые переменные не имеют внутренней структуры, доступной для адресации. Последняя оговорка важна потому, что для компилятора или процессора переменная может быть сколь угодно сложной, но конкретная система (язык) программирования скрывает от программиста её внутреннюю структуру, позволяя адресоваться только «в целом».
Рассмотрим подробнее простой тип.
Простым типом в информатике называют тип данных, о объектах которого, переменных или постоянных, можно сказать следующее:
Создание переносимого кода (кода, результат компилирования/интерпретации которого разными трансляторами одинаков на разных платформах) возможно, если не пытаться интерпретировать значения простых типов. Например, на разных платформах числа могут отличаться основанием системы счисления, разрядностью, порядком байт, форматом представления. При работе форматами представления чисел код выполняется быстрее, но переносимость теряется.
Как правило, к простым относятся числовые типы:
Введение простых типов преследовало несколько целей:
Большинство языков программирования содержат предопределённые функции для работы с простыми типами:
Некоторые языки (например, C и C++) не ограничивают программиста в выборе способа обработки значений простых типов, даже позволяют определить поля для простого типа.
Сложные переменные программист создаёт для хранения данных, имеющих внутреннюю структуру. Соответственно, есть возможность обратиться напрямую к любому элементу.
Самыми характерными примерами сложных типов являются массив (все элементы однотипные) и запись (элементы могут иметь разный тип).
Следует подчеркнуть относительность такого деления: для разных программ одна и та же переменная может иметь разную структуру.
Например, компилятор различает в переменной вещественного типа 4 поля: знаки мантиссы и порядка, плюс их значения, но для программиста, компилирующего свою программу, вещественная переменная — единая ячейка памяти, хранящая вещественное число.
Рассмотрим подробнее сложный тип.
Сложный (составной) тип — тип данных, объекты (переменные или постоянные) которого имеют внутреннюю структуру, доступную программисту.
В разных языках программирования набор базовых сложных типов может несколько отличаться (чаще по названию и деталям реализации). Есть, однако, объективные критерии — однотипность элементов и способ доступа, позволяющие выделить главные представители сложных типов (названия приводятся на примере Pascal, в котором Н.Вирт наиболее чётко сформулировал эти идеи).
Разумеется, этот список не включает даже всех предопределённых в языках типов, но он отражает большинство моделируемых программистами структур данных.
Очень важной идеей, также родившейся на границе 60-70-х годов XX века, является возможность произвольного конструирования нужных структур из небольшого набора предопределённых типов. Чем адекватнее программист смоделировал обрабатываемые данные в рамках такого «конструктора», тем безошибочнее и долговечнее будет разработанная программа.
Переменные на примере языка Visual Basic
VBA поддерживает несколько ограничений в именовании переменных:
Определение типов данных
Чтобы в тексте программы распознать тип данных переменной или константы можно использовать стандартную приставку (префикс) в нижнем регистре в названии переменной в соответствии с приведенной таблицей.