Понятие «Переменная», «Поле» и «Константа. Преобразование между числовыми типами данных. Преобразование от одного типа переменной к другому

  • 11.05.2019

Классификация

Статическая и динамическая типизация переменных

Ограничение зоны видимости придумали как для возможности использовать одинаковые имена переменных (что разумно, когда в разных подпрограммах переменные выполняют похожую функцию), так и для защиты от ошибок, связанных с неправомерным использованием переменных (правда, для этого программист должен владеть и пользоваться соответствующей логикой при структуризации данных).

Простые и сложные переменные

По наличию внутренней структуры, переменные могут быть простыми или сложными (составными).

Простые переменные не имеют внутренней структуры, доступной для адресации. Последняя оговорка важна потому, что для компилятора или процессора переменная может быть сколь угодно сложной, но конкретная система (язык) программирования скрывает от программиста её внутреннюю структуру, позволяя адресоваться только «в целом».

Сложные переменные программист создаёт для хранения данных, имеющих внутреннюю структуру. Соответственно, есть возможность обратиться напрямую к любому элементу. Самыми характерными примерами сложных типов являются массив (все элементы однотипные) и запись (элементы могут иметь разный тип).

Следует подчеркнуть относительность такого деления: для разных программ одна и та же переменная может иметь разную структуру. Например, компилятор различает в переменной вещественного типа 4 поля: знаки мантиссы и порядка, плюс их значения, но для программиста, компилирующего свою программу, вещественная переменная - единая ячейка памяти, хранящая вещественное число.

Соглашения об именовании переменных

См. также


Wikimedia Foundation . 2010 .

  • Динамическая типизация
  • Строгая типизация

Смотреть что такое "Переменная (программирование)" в других словарях:

    Динамическая переменная (программирование) - У этого термина существуют и другие значения, см. Динамическая переменная. Динамическая переменная переменная в программе, место в оперативной памяти под которую выделяется во время выполнения программы. По сути, она является даже не… … Википедия

    Переменная среды - (англ. environment variable) текстовая переменная операционной системы, хранящая какую либо информацию например, данные о настройках системы. Содержание 1 Переменные среды UNIX 2 Переменные среды Windows … Википедия

    Переменная величина - Переменная атрибут физической или абстрактной системы, который может изменять своё значение. Значение может меняться в зависимости от контекста, в котором рассматривается система, или в случае уточнения, о какой конкретно системе идёт речь … Википедия

    Переменная - Термин переменная может означать: Переменная (программирование) поименованная, либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным. Переменная величина в математике символ,… … Википедия

    ПРОГРАММИРОВАНИЕ ПАРАЛЛЕЛЬНОЕ - раздел программирования, связанный с изучением и разработкой методов и средств для: а) адекватного описания в программах естественного параллелизма моделируемых в ЭВМ и управляемых ЭВМ систем и процессов, б) распараллеливания обработки информации … Математическая энциклопедия

    Глобальная переменная - В программировании глобальной переменной называют переменную, областью видимости которой является вся программа (кроме затенённых (англ.) областей). Механизмы взаимодействия с глобальными переменными называют global state или global… … Википедия

    Динамическая переменная - Динамическая переменная термин. Динамическая переменная (программирование) Динамическая переменная (физика) … Википедия

    Локальная переменная - В программировании локальной переменной называют переменную, объявленную внутри блока кода. Область видимости локальной переменной начинается в точке её объявления и заканчивается в конце этого блока. Эта статья содержит нез … Википедия

    Параметр (программирование) - У этого термина существуют и другие значения, см. Параметр (значения). Параметр в программировании принятый функцией аргумент. Термин «аргумент» подразумевает, что конкретно и какой конкретной функции было передано, а параметр в каком качестве… … Википедия

    SSI (программирование) - У этого термина существуют и другие значения, см. SSI. SSI (Server Side Includes включения на стороне сервера) несложный язык для динамической «сборки» веб страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML… … Википедия

Прежде чем переходить к вопросу о том, что такое переменная в программировании, попробуем разобраться, почему понадобились и константы, и переменные. Алгебра от арифметики существенно отличается тем, что в арифметике мы имеем дело только с числами, а в алгебре вводится понятие переменной величины.

Согласитесь, что выражение
2 + 3 = 5
достаточно серьезно отличается от выражения:
a + b = c

В чем отличие? Не только в том, что в алгебре вместо цифр применяются буквы латинского алфавита, но отличие и в уровне абстракции.

Численные выражения, хоть что с ними делай, дают в итоге только численный результат.

А вот абстрактные буквенные выражения превращаются в формулы, законы и следствия и, двигаясь дальше за пределы алгебры, в леммы, в теоремы, и, вообще, ведут к дифференциальному и интегральному исчислению, к математическому анализу и прочему. Правда, в матанализе (в математическом анализе) уже не хватает латинских букв, в ход идут греческие, всякие «дельты», «сигмы» и прочее. Но это уже не столько от нехватки букв, сколько от постоянного роста уровня абстракции, которая (абстракция) требует новых выразительных средств.

Почему так? Потому что определенный, пусть даже небольшой дополнительный уровень абстракции позволяет мыслить иначе, делать иначе, изучать иначе, и показывать иные результаты, чем при меньшем уровне абстракции.

Так же и в компьютерной грамотности. Можно говорить сначала о самом низком уровне абстракции, например, об арифметике .

Калькуляторы дружат с константами

Например, возьмем калькулятор. Что он может делать? Достаточно много: выполнять ряд арифметических и даже более сложных действий.

  • Вводим на калькуляторе первое число, например, «2»,
  • нажимаем на знак «плюс»,
  • вводим второе число, скажем, «3» (см. рис. 1),
  • и затем нажимаем знак «=».

Что получим? Очевидно, значение «5». Арифметика. Но с использованием компьютерной техники – калькулятора.

Рис. 1. Суммирование констант 2+3 на калькуляторе (Windows 7)

Рис. 2. Некоторые виды калькуляторов, имеющихся в Windows 7

Но даже сложные калькуляторы так и останутся калькуляторами, то есть, будут делать арифметические операции той или иной степени сложности. Потому что это один уровень абстракции, самый низкий, на уровне чисел. Ничем другим, кроме как обработкой числовых выражений, калькуляторы заниматься не могут.

Программы дружат с переменными величинами

И если бы следующий, новый уровень абстракции не вошел в обиход в компьютерной грамотности, то тогда не появилось бы программирование в том виде, как оно существует в наше время. Программирование, которое позволяет делать программное обеспечение, что называется, на все случаи жизни, и с дружественным интерфейсом, то есть, удобным для последующего пользования.

Как это работает? Поясним несколько упрощенно, чтобы не требовалось глубокое погружение в сложную область программирования.

Для начала отметим, что в программировании все выражения пишут как бы наоборот по сравнению с тем, как их пишут в алгебре. Если в алгебре сначала указывают операнды (переменные), над которыми следует произвести действия, а потом после знака равенства указывают результат, как в примере

то в программировании делают все наоборот: сначала указывают результат, а потом действие, то есть:

Здесь не случайно я пишу строчные (заглавные) буквы вместо прописных (маленьких) букв:

во-первых, чтобы отличить алгебру от программирования, а

во-вторых, потому что первоначально в нашей стране в программировании использовали в основном заглавные буквы латинского алфавита.

Так как вместо прописных букв латиницы у нас делали строчную кириллицу, иначе где еще взять ?! Это связано с тем, что многие трансляторы с языков программирования у нас в стране лишь адаптировали с западных аналогов, а не разрабатывали с нуля. А там, откуда все это копировалось, русского языка не было по понятным причинам. Хотя были и примеры .

И пишу я компьютерные выражения не посредине строки, как это принято в алгебре, а пишу в начале строки так, как это принято в программировании. Это уже вопросы синтаксиса языков программирования, правил написания выражения этих языков. В алгебре одни правила, в программировании – другие, хотя буквы и там, и там могут быть одинаковые.

Почему стали в программировании писать наоборот, а именно стали писать C = A + B? Трудно сказать. Так сложилось, что сначала надо было указывать результат, и лишь потом действие.

Что же дает подобное «волшебное» выражение с буквами вместо цифр для программирования? Казалось бы, в чем разница между константами и переменными:

5 = 2 + 3 (напишем наоборот лишь для сравнения) и

Давайте разберемся. Что может быть результатом сложения 2+3? Большинство ответит, конечно, «5». И хоть это почти правильный ответ, пожалуй, мы с этим согласимся.

Почему почти? Да потому что это правильный ответ для . Для четверичной системы исчисления, в которой используются только цифры от 0 до 3, ответ был бы «11», да-да, именно одиннадцать, можете не сомневаться. А в пятеричной системе исчисления, где добавляется еще цифра 4, ответ был бы «10».

Но в любом случае, о какой бы системе исчисления мы не говорили, результатом 2+3 всегда будет одно и то же число (константа). В десятичной системе (вернемся к ней теперь надолго), это «5», и только «пять».

А сколько будет A + B? Ответ очевиден: все зависит от того, чему равны A и B. Значит, результатом 2+3 всегда будет 5, а результатом A+B будут разные значения в зависимости от величин A и B.

Достаточно очевидно. Ну и что, что 5 – константа, а тут переменная? А то, что переменные – это другой уровень абстракции. За счет A+B мы теперь можем получать множество разных значений.

Как могут использоваться выражения с переменными величинами

Допустим, A – это вес одного товара, а B – это вес другого товара. Значит, A+B – это суммарный вес обоих товаров. Значит, используя выражение C=A+B, программист может запрограммировать автоматическое суммирование двух весов.

Как он это сделает?

  • Например, сначала программист попросит ввести с клавиатуры вес первого товара (не описываю, как это можно сделать в языке программирования, поверим, что так можно сделать), и присваивает введенное значение переменной с именем A.
  • Затем он проделывает то же самое с весом второго товара, и присваивает это уже переменной B.
  • А потом пишет в своей программе теперь уже понятное нам выражение:

Что получается в итоге? Конечно, вы сразу догадались, что переменной C будет присвоено значение суммы весов, сохраненных в переменных A и B.

И далее программист напишет в своей программе (тоже прошу поверить, что это можно сделать средствами языка программирования): вывести на экране дисплея значение переменной C. Что мы увидим на экране? Конечно, сумму весов первого и второго товаров!

И теперь эту, один раз написанную программу, можно использовать снова, но уже для суммирования следующей пары весов.

Если еще убрать ручной ввод веса товара, и сразу автоматически ввести вес, скажем, с электронных весов (которые сейчас широко применяются в тех же супермаркетах), то на экран дисплея будет автоматически выводиться сумма весов 2-х товаров: положил одни товар, затем положил второй, и видишь сразу результат.

А если пойти дальше, и не выводить на экран сумму весов 2-х товаров, а записать это куда-то в базу данных?! А если не ограничиваться 2-я товарами, а, скажем, говорить о миллионе разных видов товаров, подлежащих взвешиванию? Почему бы и нет! Все это можно описать в виде выражений, подобных C = A + B.

И в итоге мы получим, можно без стеснения сказать, серьезную автоматизированную систему для супермаркета, где учитываются и веса всех товаров, и количество, и стоимость, а также все покупки, сделанные покупателями и прочее, и прочее и прочее. Но это стало возможным, когда появилось программирование с использованием переменных величин, тех самых A, B, C и тому подобное! Без этого уровня абстракции, без переменных не было бы программирования.

Переменные и константы – вместе навсегда

Справедливости ради, надо сказать, что цифры (простые и не очень простые числа) остались в программировании. Они тоже нужны. Их назвали иностранным словом «константы».

Константы – это величины, которые никогда и ни при каких обстоятельствах не меняют свои значения.

Переменные, в отличие от констант, то и дело меняют свои значения, постоянно их меняют, оттого они и называются переменными величинами.

Так что наряду с выражением C = A + B, в программировании возможно как выражение C = A + 3, так и C = 2 + B.

Однако в левой части программного выражения (до знака равенства «=») константа не может употребляться. Там может быть только переменная, поскольку значение выражения, которое присваивается переменной в левой части выражения, может меняться в зависимости от значений переменных в правой части выражения. А значит, слева может быть только переменная величина.

Благодаря латинским буквам, которые используются вместо цифр, арифметика превратилась в алгебру. Так и программирование от калькуляторов перешло к вычислительным машинам благодаря переменным величинам.

Чего стоило разработчикам языков программирования реализовать возможности для применения переменных величин? Это уже отдельная тема. Одно могу сказать, стоило дорого, само собой, не только в деньгах. Дорого в расходовании (применении) интеллекта для изобретения подобных вещей.

Другой уровень абстракции требует принципиально иных решений, новой конфигурации «железа», новых команд для нового «железа». Но это уже, что называется, другая история…

Другие материалы:

Получайте актуальные статьи по компьютерной грамотности прямо на ваш почтовый ящик .
Уже более 3.000 подписчиков

.

Переменная есть некоторое свойство реального события, которое было измерено. Переменные, в отличие от теории, относятся к реальности.

Предположим, что, согласно теории, усиление тревожности приводит к росту мотивации субъектов к вступлению в члены какой-либо группы. Для того, чтобы оценить данное теоретическое предположение, необходимо найти взаимосвязь между тревогой и мотивацией к вступлению в члены какой-либо группы, с одной стороны, и реальными переменными, с другой.

Итак, можно измерить тревогу по шкале , тенденцию к вступлению в члены группы оценить с помощью расстояния , на котором субъекты исследования расположены один относительно другого. Эти два измерения являются переменными в эксперименте. Вычисление корреляции между двумя переменными позволит проверить гипотезу. Наличие или отсутствие корреляции между переменными считается проверкой теории, которая привела к эксперименту.

Типы переменных

1. Независимые переменные . Среди них выделяются экспериментальные и дифференциальные переменные.

Экспериментальные переменные – это те переменные, которые экспериментатор изменяет по своему желанию и наблюдает их влияние на зависимые переменные. Например, экспериментатор варьирует сложность задания или интенсивность стимула.

Дифференциальные переменные – это переменные, которые экспериментатор не может изменять по своему желанию, но может принять их как данность . Например, пол, возраст, уровень образования, психологические характеристики испытуемого, его интеллект.

2. Зависимые переменные . Ответ или реакции испытуемых, полученные в ходе эксперимента. В некоторых исследованиях мы не знаем, какие переменные являются зависимыми, а какие независимыми. Например, мы можем думать, что существует связь между насилием и телевидением. Однако трудно выяснить, является ли просмотр определенных телепрограмм причиной насилия или человек, который смотрит эти программы, уже был предрасположен к насилию. В данном случае идентификация независимой переменной является целью исследования.

3. Переменные помех (нарушения ). Это переменные, которые не контролируются в ходе эксперимента и которые могут оказывать влияние на зависимые переменные. Помехи ошибочно могут быть отнесены к экспериментальным переменным. Например, неприятный (надоедливый, навязчивый) шум в комнате, в которой субъекты проходят тест на интеллект.

4. Переменные вмешательства (случайные переменные). Это переменные, которые состоят из некоторых характеристик субъектов, которые могут влиять на результаты эксперимента. Например, усталость, низкая мотивация и т. д.

Понятие «Переменная», «Поле» и «Константа»

Понятие «Переменная»

Синтаксис объявления переменных в С# выглядит следующим образом:

<тип данных> <имя идентификатора>

Например:

Объявить можно переменную любого действительного типа . Важно подчеркнуть, что возможности переменной определяются её типом. Например, переменную типа bool нельзя использовать для хранения числовых значений с плавающей точкой. Кроме того, тип переменной нельзя изменять в течение срока её существования. В частности, переменную типа int нельзя преобразовать в переменную типа char .

Все переменные в С# должны быть объявлены до их применения. Это нужно для того, чтобы уведомить компилятор о типе данных, хранящихся в переменной, прежде чем он попытается правильно скомпилировать любой оператор, в котором используется переменная. Это позволяет также осуществлять строгий контроль типов в С#.

Инициализация переменной

Задать значение переменной можно, в частности, с помощью оператора присваивания . Кроме того, задать начальное значение переменной можно при её объявлении. Для этого после имени переменной указывается знак равенства «=» и присваиваемое значение. Если две или более переменные одного и того же типа объявляются списком, разделяемым запятыми, то этим переменным можно задать, например, начальное значение. Ниже приведена общая форма инициализации переменной:

int i = 10; // Задаём целочисленной переменной i значение 10

char symbol = "Z"; // Инициализируем переменную symbol буквенным значением Z

float f = 15.7F; // Переменная f инициализируется числовым значением 15.7

int x = 5, y = 10, z = 12; // Инициализируем несколько переменных одного типа

Инициализация переменных демонстрирует пример обеспечения безопасности С#. Коротко говоря, компилятор С# требует, чтобы любая переменная была инициализирована некоторым начальным значением, прежде чем можно было обратиться к ней в какой-то операции. В большинстве современных компиляторов нарушение этого правила определяется и выдается соответствующее предупреждение, но «всевидящий» компилятор С# трактует такие нарушения как ошибки. Это предохраняет от нечаянного получения значений «мусора» из памяти, оставшегося там от других программ.

В С# используются два метода для обеспечения инициализации переменных перед пользованием:

  • Переменные, являющиеся полями класса или структуры , если не инициализированы явно, по умолчанию обнуляются в момент создания.
  • Переменные, локальные по отношению к методу , должны быть явно инициализированы в коде до появления любого оператора, в котором используются их значения. В данном случае при объявлении переменной её инициализация не происходит автоматически, но компилятор проверит все возможные пути потока управления в методе и сообщит об ошибке, если обнаружит любую возможность использования значения этой локальной переменной до ее инициализации.

Например, в С# поступить следующим образом нельзя:

public static int Main()

Console.WriteLine(d); // Так нельзя!

// Необходимо инициализировать d перед использованием

Динамическая инициализация

В приведённых выше примерах в качестве инициализаторов переменных использовались только константы, но в С# допускается также динамическая инициализация переменных с помощью любого выражения, действительного на момент объявления переменной:

int i1 = 3, i2 = 4;

// Инициализируем динамически переменную result

double result = Math.Sqrt(i1*i1 + i2*i2);

В данном примере объявляются три локальные переменные i1 , i2 , result , первые две из которых инициализируются константами, а переменная result инициализируется динамически с использованием метода Math.Sqrt , возвращающего квадратный корень выражения. Следует особо подчеркнуть, что в выражении для инициализации можно использовать любой элемент, действительный на момент самой инициализации переменной, в том числе вызовы методов, другие переменные или литералы .

Неявно типизированные переменные

Как пояснялось выше, все переменные в С# должны быть объявлены. Как правило, при объявлении переменной сначала указывается тип, например int или bool , а затем имя переменной. Но начиная с версии С# 3.0, компилятору предоставляется возможность самому определить тип локальной переменной, исходя из значения, которым она инициализируется. Такая переменная называется неявно типизированной .

Неявно типизированная переменная объявляется с помощью ключевого слова var и должна быть непременно инициализирована. Для определения типа этой переменной компилятору служит тип ее инициализатора, т.е. значения, которым она инициализируется:

var i = 12; // Переменная i инициализируется целочисленным литералом

var d = 12.3; // Переменная d инициализируется литералом с плавающей точкой,

// имеющему тип double

var f = 0.34F; // Переменная f теперь имеет тип float

Единственное отличие неявно типизированной переменной от обычной, явно типизированной переменной, - в способе определения её типа. Как только этот тип будет определён, он закрепляется за переменной до конца ее существования.

Неявно типизированные переменные внедрены в С# не для того, чтобы заменить собой обычные объявления переменных. Напротив, неявно типизированные переменные предназначены для особых случаев, и самый примечательный из них имеет отношение к языку интегрированных запросов (LINQ ). Таким образом, большинство объявлений переменных должно и впредь оставаться явно типизированными, поскольку они облегчают чтение и понимание исходного текста программы.

Рассмотрим пример, где в консоль будем выводить типы неявно типизированных переменных:

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LC_Console

static void Main(string args)

var name = "John A.";

var isProgrammer = true;

// Определяем тип переменных

Type nameType = name.GetType();

Type ageType = age.GetType();

Type isProgrammerType = isProgrammer.GetType();

// Выводим в консоль результаты

Console.WriteLine("Тип name: {0}", nameType);

Console.WriteLine("Тип age: {0}", ageType);

Console.WriteLine("Тип isProgrammer: {0}", isProgrammerType);

Console.WriteLine("Для продолжения нажмите любую клавишу. . . ");

Console.ReadKey();

/* Выведет:

* Тип name: System.String

* Тип age: System.Int32

* Тип isProgrammer: System.Boolean

* Для продолжения нажмите любую клавишу. . .

Понятие «Поле»

Поле имеет любой тип, непосредственно объявленный в классе или структуре. Поля являются членами содержащихся в них типов.

Класс или структура могут иметь поля экземпляра или статические поля , либо поля обоих типов. Поля экземпляра определяются экземпляром типа. Если имеется класс T и поле экземпляра F , можно создать два объекта типа T и изменить значение поля F в каждом объекте, не изменяя значение в другом объекте. В противоположность этому, статическое поле относится к самому классу, и является общим для всех экземпляров этого класса. Изменения, выполненные из экземпляра А , будут немедленно видны экземплярам В и С , если они обращаются к полю.

Как правило, используются поля только для переменных, имеющих модификаторы доступа : private или protected . Данные, которые класс представляют клиентскому коду, должны обеспечиваться методами , свойствами и индексаторами . Используя эти конструкции для косвенного доступа к внутренним полям, можно защититься от недопустимых входных значений. Закрытое поле, которое хранит данные, представленные открытым свойством, называется резервным хранилищем или резервным полем .

Поля обычно хранят данные, которые должны быть доступными нескольким методам класса и должны храниться дольше, чем время существования любого отдельного метода. Например, в классе, представляющем календарную дату, может быть три целочисленных поля: одно для месяца, одно для числа, одно для года. Переменные, не используемые вне области одного метода, должны быть объявлены как локальные переменные внутри самого тела метода.

Поля объявляются в блоке класса путём указания уровня доступа поля, за которым следует тип поля и имя поля . Пример:

public class CalendarEntry

// private поле

private DateTime date;

public string day;

// public свойство, безопасно предоставляет переменную даты

public DateTime Date

if (value.Year > 1900 && value.Year <= DateTime.Today.Year)

// public метод, также безопасно предоставляет переменную даты

// Вызов: birthday.SetDate("2012, 12, 21");

public void SetDate(string dateString)

// Устанавливаем некоторые разумные границы вероятной даты рождения

if (dt.Year > 1900 && dt.Year <= DateTime.Today.Year)

throw new ArgumentOutOfRangeException();

public TimeSpan GetTimeSpan(string dateString)

DateTime dt = Convert.ToDateTime(dateString);

if (dt != null && dt.Ticks < date.Ticks)

return date - dt;

throw new ArgumentOutOfRangeException();

Для доступа к члену объекта нужно добавить точку после имени объекта и указать имя поля: objectname.fieldname . Пример:

CalendarEntry birthday = new CalendarEntry();

birthday.day = "Пятница";

Полю можно назначить первоначальное значение, используя оператор присвоения при объявлении поля. Например, чтобы автоматически присвоить полю day значение «Понедельник», можно объявить поле day как указано в следующем примере:

public class CalendarDateWithInitialization

public string day = "Понедельник";

Поля инициализируются непосредственно перед вызовом конструктора для экземпляра объекта. Если конструктор присваивает полю значение, оно заменит значения, присвоенные при объявлении поля. Инициализатор поля не может ссылаться на другие поля экземпляров.

Поля могут быть отмечены модификаторами public , private , protected , internal или protected internal . Эти модификаторы доступа определяют порядок доступа к полю для пользователей класса.

static . При этом поле становится доступным для вызова в любое время, даже экземпляр класса отсутствует.

Также при необходимости поле может быть объявлено с модификатором readonly . Полю с этим модификатором (то есть полю, доступному только для чтения) значения могут быть присвоены только при инициализации или в конструкторе. Поле с модификаторами staticreadonly (статическое, доступное только для чтения) очень похоже на константу , за исключением того, что компилятор C# не имеет доступа к значению такого поля при компиляции: доступ возможен только во время выполнения.

Понятие «Константа»

Константы представляют собой неизменные значения, известные во время компиляции и неизменяемые на протяжении времени существования программы. Константы объявляются с модификатором const . Только встроенные типы C# (за исключением System.Object ) могут быть объявлены как const . Определяемые пользователем типы, включая классы, структуры и массивы, не могут быть const . Для создания класса, структуры или массива, которые инициализируются один раз во время выполнения (например, в конструкторе) и после этого не могут быть изменены, используется модификатор readonly .

Язык C# не поддерживает методы, свойства и события с ключевым словом const .

Тип перечисления позволяет определять именованные константы для целочисленных встроенных типов (например, int , uint , long и т. д.).

Константы нужно инициализировать сразу после объявления. Пример:

public const int months = 12;

В этом примере константа months всегда имеет значение 12, и её значение не может быть изменено даже самим классом. Когда компилятор встречает идентификатор константы в исходном коде C# (например, months ), он подставляет литеральное значение непосредственно в его создающий код IL (Intermediate Language ). Поскольку адрес переменной, связанный с константой во время выполнения, отсутствует, поля const не могут быть переданы по ссылке и отображены как значение в выражении.

При ссылке на значения констант, определенных в другом коде, например DLL , следует соблюдать осторожность. Если новое значение константы определяется в новой версии DLL, программа по-прежнему будет хранить старое литеральное значение вплоть до перекомпиляции в новую версию.

Несколько констант одного типа можно объявить одновременно, например:

const int months = 12, weeks = 52, days = 365;

Используемое для инициализации константы выражение может ссылаться на другую константу, если при этом не создается циклическая ссылка. Пример:

const int months = 12;

const int weeks = 52;

const int days = 365;

const double daysPerWeek = (double)days / (double)weeks;

const double daysPerMonth = (double)days / (double)months;

Константы могут быть отмечены модификаторами public , private , protected , internal или protected internal . Эти модификаторы доступа определяют порядок доступа к константе для пользователей класса.

Доступ к константам осуществляется так, как если бы они были статическими полями, поскольку значение константы одинаково для всех экземпляров типа. Для их объявления не нужно использовать ключевое слово static . В выражениях, которые не входят в класс, в котором определена константа, для доступа к ней необходимо использовать имя класса, точку и имя этой константы. Пример:

int birthstones = Calendar.months;

Урок 11

Понятие переменной

Переменные – это объекты, предназначенные для хранения данных. Переменной могут последовательно присваиваться различные значения. После присвоения значения переменная хранит его до следующего присвоения ей нового значения. В различные моменты времени переменные могут хранить различные значения.

Переменную можно представить как простейший объект программы потому что:

· имя переменной связывает переменную с некоторой областью памяти,

· имена переменных позволяют их различать в программе, осуществлять доступ к различным участкам памяти для записи данных и их извлечения,

· переменные в программе перед их использованием нужно объявлять (декларировать),

· при объявлении переменной надо указать, что объявляется переменная, задать имя переменной и указать ее тип,

· тип указывает способ представления переменной.

Для эффективного использования памяти необходимо правильно выбирать тип переменной.

Переменная может хранить значения заданного типа. Разрешено использовать

– семь простых типов (число, валюта, строка, болевое, дата, время и дата-время),

– шесть типов диапазонов (диапазон чисел, диапазон валют, диапазон строк, диапазон дат, диапазон времени, диапазон дат и времени) и

– переменные, которые могут хранить указанные типы.

Всего переменная может хранить значения 26 различных типов.

Для использования переменной необходимо выполнить три действия:

1. Объявить переменную. Сообщить программе имя и тип переменной, которую требуется использовать.

2. Присвоить переменной значение. Передать переменной значение для хранения.

3. Непосредственно использовать переменную. Извлечь значение, содержащееся в переменной, и использовать его в программе.

Объявление переменных

Объявление переменных ускоряет компиляцию программы и делает ее выполнение более эффективным, а также предотвращает неправильное написание имен переменных в коде программы. Можно объявлять любое количество переменных.

Объявление переменных может быть явной или неявной. Явное объявление означает указание имени и типа переменной перед ее использованием. Оно осуществляется операторами Dim, Private, Static, Public, которые имеют следующий синтаксис:

Dim имяПеременной

Private имяПеременной Dim ИмяПеременной1[ As Тип1]

где Dim (Размер) - ключевое слово, которое сообщает Visual Basic, что декларируется переменная и резервируется область памяти для ее хранения;

ИмяПеременной - имя переменной (идентификатор, не входящий в перечень ключевых слов Visual Basic);

As (Как) - ключевое слово, которое сообщает Visual Basic, что определяется тип данных для переменной;

Тип - тип данных для объявляемой переменной;

Private (Частный), Public (Общий)- ключевые слова, определяющие область видимости переменной;

Static (Статический)- ключевое слово, которое определяет, сохраняет ли переменная свое значение при завершении блока программы (процедуры, функции) и выходе из него.

Примечание:

При подготовке кода программы среда программирования оказывает помощь пользователю: после набора ключевого слова As раскрывается список, в котором наряду с другими типами объектов, указаны и базовые типы переменных. Тип переменной можно установить, дважды щелкнув на имени типа в этом списке или нажав клавишу .

Переменная, объявленная при помощи оператора Dim, доступна из любого места программы (или блока программы) в пределах области видимости, содержащей оператор Dim. Например, если она объявлена внутри модуля вне любой процедуры, то такая переменная доступна из любого места этого модуля. Если переменная объявлена внутри процедуры, то она доступна только в пределах этой процедуры. Такая переменная называется локальной. Чтобы определить доступность переменной более детально, применяются операторы Private и Public.

Использование оператора Public означает, что переменная имеет общий доступ, т. е. доступ без каких-либо ограничений. Public-переменная не может быть объявлена внутри процедуры.

Переменная, объявленная с ключевым словом Private, доступна только в пределах контекста, в котором объявлена, включая процедуры. Private-переменная может быть объявлена внутри модуля, класса или структуры, но не внутри процедуры.

Если переменная при объявлении указана как Static, то она остается существовать в памяти и сохраняет свое последнее значение после завершения работы процедуры, в которой была объявлена, static-переменная не может быть объявлена вне процедуры.

С помощью одного оператора можно объявлять несколько переменных, разделяя их запятыми. Примеры объявления переменных приведены ниже:

Private bSuccess As Boolean

Dim lastName, firstName As String, dblSum As Double

· Вторым способом явного объявления переменных является указание типа с помощью суффикса.

Часть объявления переменной является необязательной, однако если тип данных не указан, Visual Basic назначит переменной тип значения, которое присваивается ей при объявлении. Если не указан тип данных и переменная не инициируется никаким начальным значением, Visual Basic назначит ей тип данных object. Это может стать причиной более медленной работы программы, поскольку для переменной типа Object выделяется больше памяти, чем, возможно, нужно. Кроме того, программе придется тратить дополнительное время на определение, к какому типу данных относится значение переменной в данный момент времени.

Неявное объявление означает, что объявление переменной происходит при первом ее использовании в программном коде.

Предпочтительным является явное объявление переменных с указанием типа данных, поскольку это снижает вероятность возникновения ошибок написания или конфликта имен. По умолчанию компилятор Visual Basic устанавливает режим явного объявления переменных.

При объявлении переменной необходимо указать ее имя. Имена переменных обозначают посредством идентификаторов.

При объявлении переменной необходимо решить, как она будет называться, и какой тип данных будет ей присвоен. Имя переменной может быть любым, но если используется имя, описывающее содержащееся в переменной значение, то код будет легче читать. Существует несколько правил задания имен переменных:

· имя переменной должно содержать не более 255 символов;

· имя переменной может содержать любые буквы, цифры и символ подчеркивания;

· первым символом в имени переменной должен быть символ или знак подчеркивания;

· в имени переменной должны отсутствовать пробелы и знаки пунктуации ;

· имя должно быть уникальным внутри области видимости;

· имя не должно являться ключевым словом.

Обычно объявляют переменную, при помощи ключевых слов Dim и As:

Dim aNumber As Integer

Эта строка кода сообщает программе, что требуется использовать переменную с именем aNumber, и что она должна хранить целые числа (тип данных Integer).

Поскольку aNumber является переменной типа Integer, она может хранить только целые числа. Если бы нужно было хранить, например, число 42.5, то использовался бы тип данных Double. А для хранения слов используется тип данных с именем String. Еще одним типом данных, который следует упомянуть здесь, является тип Boolean, который может хранить значения True или False.

Ниже приведены дополнительные примеры объявления переменных.

Dim aDouble As Double

Dim aName As String

Dim YesOrNo As Boolean

Имя переменной не может совпадать с именем какой-либо функции, оператора или ключевым словом, зарезервированным в синтаксисе Basic. Например, переменная не может иметь имя Sin, Mod или If, поскольку Sin является именем встроенной функции, Mod является встроенным оператором, а If представляет собой встроенное ключевое слово. При вводе формул в редакторе формул имена встроенных функций, операторов и других ключевых слов подсвечиваются другим цветом. Это позволяет визуально определить, что имя переменной вызывает конфликт имен.

После объявления переменная может использоваться в формуле.

Область действия переменной

Область действия переменной служит для определения возможности использования переменных. Существует три уровня области действия:

· Local (локальная),

· Global (глобальная),

· Shared (общая).

Каждая переменная имеет область действия, которая определяется при объявлении переменной.

При выполнении программы принципиальное значение имеет область видимости используемых переменных. Попытка использования переменных, которые не действуют в данном месте программы, приводит к ошибке программирования или к неоднозначности результатов. В Visual Basic могут применяться глобальные и локальные переменные.

Переменная, которая используется программой или каким блоком (модулем, формой, обработчиком событий, процедурой), должна быть объявлена вначале кода данного блока или программы после его заголовка, перед всеми другими операторами.

Глобальные переменные доступны из любой части программы. Для создания переменной, которую вы хотите определить в качестве глобальной, в начале главного модуля приложения поместите оператор Public. Например:

Public gdtmFinish As Date

Значение глобальных переменных сохраняются до тех пор, пока работает программа или блок, в которой они объявлены. Их значения могут считывать или изменять все операторы программы или любого блока (обработчика события) программы.

Для объявления переменной как локальной внутри модуля, формы, обработчика событий, используйте операторы Private, Local или Dim. В этом случае объявленная переменная будет доступна для всех входящих в форму, модуль или обработчик событий процедур, но в то же время окажется недоступной в процедурах других модулей, форм или обработчиков событий. Значение локальной переменной сохраняют только до момента действия формы, модуля или обработчика событий, в которых она объявлена. После их выполнения значения локальных переменных теряются. Приведенные ниже выражения являются эквивалентными:

Local x As Number

Чаще всего локальные переменные используются в обработчиках событий. В разных обработчиках событий, формах или модулях можно создавать локальные переменные с одинаковым именем и при этом они не будут конфликтовать.

Если нет никаких особых требований,

то есть смысл всегда выбирать область видимости Dim .

Присваивание переменным значений

Значение переменной присваивается при помощи знака =, иногда называемого оператором присваивания, как показано в следующем примере.

Эта строка кода берет значение 42 и сохраняет его в ранее объявленной переменной с именем aNumber.

При необходимости можно также добавить ключевое слово Let.

Объявление и присваивание значений для переменных со значениями по умолчанию

Как показано выше, можно объявить переменную в одной строке кода и присвоить ей значение позже, в другой строке. Это может вызвать ошибку при попытке использовать переменную до присвоения ей значения.

По этой причине рекомендуется объявлять переменные и присваивать им значения в одной и той же строке. Даже если будущее значение переменной пока не известно, ей можно присвоить значение по умолчанию. В этом случае код для объявления и присвоения значений тем же самым переменным будет выглядеть так, как показано ниже.

Dim aDouble As Double = 0

Dim aName As String = "default string"

Dim YesOrNo As Boolean = True

Объявление переменных и присвоение им значений по умолчанию в одной строке поможет предотвратить возможные ошибки. При этом далее в коде по-прежнему можно присваивать переменным другие значения.

Строковые переменные

Различают строки переменной и фиксированной длины. Строки переменной длины могут содержать до двух миллиардов символов. Когда такой переменной присваивается значение, то размер переменной изменяется так, чтобы он соответствовал длине присвоенного строкового значения.

Строка фиксированной длины - это строка постоянного размера, указанного при объявлении переменной. Если такой строке присваивается значение более длинное, то лишние символы отбрасываются. Если значение, которое присваивается, короче, то остающееся место заполняется пробелами. Строковые переменные фиксированной длины должны декларироваться явно. Синтаксис декларации следующий:

Dim VarName As String* ДлинаСтроки

где ДлинаСтроки - целочисленная переменная или константа, содержащая число, которое указывает длину строковой переменной.

Например:

Dim strMyName As String*20 ′ Объявляется строковая переменная фиксированной длины в 20 символов

Использование строковых переменных для организации слов

String (строка) представляет собой любой набор символов текста, таких как буквы, цифры, специальные знаки и пробелы. Строки могут быть легко читаемыми пользователем фразами или предложениями, такими как "Выпей же ещё чаю и съешь этих мягких французских булок", или совершенно нечитаемыми сочетаниями, такими как "@#fTWRE^3 35Gert".

Переменные String создаются так, как и другие переменные: путем первого объявления переменной и присвоения ей значения, как показано ниже.

При назначении фактического текста (также называемого строка литералов) переменной типа String текст должен быть заключен в кавычки (""). Можно также использовать символ = при присвоении одной переменной типа String другой переменной типа String, как показано в этом примере.

Dim aString As String = "Это строка"

Dim bString As String = ""

bString = aString

Можно использовать знак амперсанда (& или знак «+») для последовательного объединения двух или более строк в новую строку, как показано ниже. Эта процедура также называется объединение.

Dim cString As String = ""

cString = aString & bString

В предыдущем примере объявляются три переменные String, первым двум присваиваются значения "using string" и "variables" соответственно, а затем объединенные значения первых двух переменных присваиваются третьей переменной. Каким будет значение переменной cString? Возможно, это удивительно, но значением этой переменной станет строка using stringvariables из-за отсутствия пробела в конце aString или в начале bString. Две строки просто соединены вместе. Если требуется добавить пробелы или что-либо еще между двумя строками, следует сделать это с помощью строкового литерала, например, " ", как показано ниже.

Dim aString As String = "using string"

Dim bString As String = "variables"

Dim cString As String = ""

cString = aString & " " & bString

Преобразование от одного типа переменной к другому

Существуют разные типы переменных. Тип определяет, какого рода данные может содержать переменная. Переменная типа Integer может содержать только числовые данные без десятичных разделителей. Переменная типа String может содержать только текст.

Что происходит, когда требуется отобразить данные типа Integer в элементе управления TextBox, для которого требуется тип данных String? В этом случае данные должны быть преобразованы из одного типа в другой. В этом разделе будет показано, как преобразовывать данные из одного типа в другой, рассказаны некоторые методы, используемые для преобразования данных, а также некоторые связанные с ними сложности.

Некоторые функции преобразования в Visual Basic

Используется для преобразования строк, содержащих числа, в число. Аргумент (что заключено в скобки) являющийся любым допустимым строковым выражением.

Возвращает строковое представление числа. Аргумент (что заключено в скобки) типа Long и может быть любым допустимым числовым выражением.

Преобразует число в символ Unicode.

Преобразует выражение (любое числовое выражение или строка, представляющая число число от -32768 до 32767) к типу Integer с округлением.

Преобразует выражение (Любое числовое выражение или строка, представляющая число от - до) к типу Long с округлением.

Преобразует выражение (любое числовое выражение или строка, представляющая число) к типу Single (число от -3.402823E8 до -1.401298E-45 для отрицательных значений и от 1.401298E-45 до 3.402823E8 для положительных значений).

Преобразует выражение (любое числовое выражение или строка, представляющая число) к типу Double (число в диапазоне значений от -1.E308 до -4.E-324 для отрицательных значений, и от 4.E-324 до 1.E308 для положительных значений.)

Преобразует выражение (любое допустимое выражение или число) к типу String:

· Строки переменной длины, которые могут содержать до приблизительно 2 миллиардов (2^31) символов.

· Строки постоянной длины, которые могут содержать от 1 до приблизительно 64K (2^16) символов.

Преобразование переменных в текст

Каждая переменная в Visual Basic может быть преобразована в текст с помощью специальной функции CStr (сокращение от Convert to String). Эта функция, как следует из ее названия, возвращает данные, представленные в переменной, в виде данных типа String (т. е. преобразует любое число в набор символов). В следующей процедуре демонстрируется простой пример преобразования данных типа Integer в текст.

Помимо преобразования переменных типа Integer в текст, функция CStr может использоваться для преобразования любого числового типа данных, например, Double или Long. Также она может использоваться для преобразования в текст данных типа Date и типа Boolean.

Преобразование между числовыми типами данных

Иногда результат арифметической операции не может быть представлен в виде Integer. Помимо функции преобразования чисел в текст, в Visual Basic также предусмотрены функции для преобразования переменных из одного числового типа данных в другой. Например, можно использовать функцию CDbl (Convert to Double) в арифметической операции для возврата дробных чисел при работе с переменными типа Integer. В следующей процедуре показано использование функции CDbl при делении двух целых чисел.