Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Преобразование и совместимость типов




Константы

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

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

Синтаксис объявления константы:

 

[ Public / Private ] Const ИмяКонстанты [ As Тип] = Значение

 

Приведенное определение синтаксиса означает, что объявление константы содержит обязательное слово Const (константа). Перед Const может стоять Private (локальная) илиPublic (общая), то есть одно из слов,задающих область действия константы. Затем должно следовать имя константы. После имени может стоять слово As и наименование типа. Затем должен следовать знак равенства и значение константы.

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

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

Public Const Age As Integer = 54

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

В следующем примере описываются локальные константы Pi и Wg как Single.

Const Pi As Single = 3.14159, Wg As Single = 2.78

Примеры демонстрируют преимущество использования констант: например, при вычислениях с числом π в программе не нужно каждый раз вводить длинное число, а только имя константы Pi:

vCircle = Pi * vRadius ^ 2

Еще одно преимущество констант заключается в том, что если константа используется в нескольких процедурах, то при изменении ее значения оно будет правильно воспринято всеми процедурами.

 

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

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

При преобразовании числа с плавающей точкой в целое происходит округление до ближайшего целого.

При преобразовании целого числа в число с плавающей точкой дробная часть принимается равной нулю.

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

Строковые и числовые типы совместимы. Можно присвоить числовое значение строковой переменной и наоборот. Однако строка символов должна быть такой, чтобы она могла трактоваться как число.

Например, не возникнет ошибки периода выполнения при присвоении свойству Caption некоторой надписи, которое имеет тип String, значения 125 переменной типа Integer. Произойдет преобразование целого числового значения 125 в строку символов “125”.

И наоборот. При присвоении переменной целого типа значения свойства Text некоторого текстового поля, которое имеет тип String (пусть, например, в этом текстовом поле набрано три символа 125) произойдет преобразование строки символов “125” в целое число и целочисленная переменная получит значение 125.

 

Sub A

1: Dim i As Integer

2: i = Label1.Caption

3: Label1.Caption = 250

End Sub

 

В теле этой процедуры в строке 2 происходит преобразование значения свойства Caption из типа String к типу Integer. В строке 3 происходит преобразование значения целой константы 250 к типу String, который имеет свойство Caption.

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

 

Sub B

Dim i As Integer, str As String, _

r As Integer

i = 5

str = “25”

r = i * str ‘Результат: 125. String -> Integer

End Sub

 

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

В операции операнд1 + операнд2 символ (+) VB будет воспринимать как:

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

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

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

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

 

Пример.

 

Dim i As Integer

Dim r As Single

Dim st1 As String, st2 As String

Private Sub Command1_Click ()

i = 2

r = -1.3

st1 = r + i ‘Результат: “0.7”

‘Integer-> Single, Single -> String

End Sub

 

Остановимся подробнее на существенных, но на первый взгляд не заметных, особенностях выполнения инструкций процедуры Command1_Click. При выполнении этих трех инструкций два раза осуществляется преобразование типа.

В инструкции St1 = r + i при выполнении арифметической операции сложения тип Integer операнда i преобразуется к типу Single операнда r, так как арифметическая операция может быть выполнена над однотипными операндами.

Наконец, результат сложения типа Single преобразуется к типу String переменной St1.

 

Пример. Рассмотрим продолжение программного кода предыдущего примера.

 

Private Sub Command2_Click()

st1 = 25 ‘Результат: “25”

st2 = 15 ‘Результат: “15”

st2= st1 + st2 ‘Результат: “2515”

End Sub

 

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

Продолжим программный код, приведенный в двух предыдущих примерах. Введем следующий программный код:

 

Private Sub Command2_Click()

st1 = 2

st2 = 3

st1 = 25 + st1 + st2 ‘Результат: “30”

‘String -> Integer, String -> Integer

‘Integer -> String

End Sub

 

При выполнении вычисления значения выражения 25 + st1 + st2 первой выполняется операция 25 + st1. В этой операции один операнд (константа 25) имеет числовой тип, а другой (строка st1) имеет значение, которое может быть интерпретировано как число. Поэтому здесь символ (+) воспринят как операция сложения. Результат операции сложения (27) тоже имеет числовой тип, поэтому символ (+) в следующей операции 27+3 также воспринят как операция сложения и, в конце концов, получен понятный результат 30.

Изменим порядок следования операндов в инструкции присвоения st1 = 25 + st1 + st2, применив вместо нее инструкцию st1 = st1 + st2 + 25.

Переменная st1 на первый взгляд получит неожиданный результат вычислений “48”. Изменение порядка слагаемых привело к изменению значения результатов вычислений! Почему? Дело в том, что первой теперь выполняется операция st1 + st2, в которой символ (+) воспринимается как операция сцепления, поскольку оба операнда имеют строковый тип. Результат операции соответственно тоже имеет строковый тип и равен “23”. При выполнении следующей операции “23” + 25 символ (+) будет воспринят, как операция сложения, поскольку один операнд (константа 25) имеет числовой тип, а другой операнд (“23”) может быть интерпретирован как число.

Итак, в VB в отличие от математики сумма может зависеть от порядка слагаемых.




Поделиться с друзьями:


Дата добавления: 2014-12-07; Просмотров: 418; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.016 сек.