Переменные часть 2

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

Строковые переменные представляют собой последовательную цепочку байт, заканчивающуюся нулем. Каждый байт - это буква , цифра или специальный символ. Конечно же каждому символу соответствует свое числовое значение в соответствующей кодировке. Вы наверняка слышали о таких распространенных кодировках как ASCII и Unicode . Каждая из этих кодировок имеет свои числовые значения.

В FreeBasic можно объявлять строки с помощью трех возможных типов: String , Zstring , Wstring . На самом деле, как мне кажется самый распространенный тип String. Объявляется строка точно таким же способом как и числовые переменные:

Dim ST As String = "Это строковая переменная"

Можно и так:

Dim ST As String
ST = "Привет мир!"


Как вы сумели заметить все так же, с одной разницей, строки заключают в кавычки. Именно так компилятор определяет, что используются строки и обрабатывает их должным образом. Чуточку залезем вперед. Если привести сравнение, то получится следующее:

Строковое представление Hex значение (ASCII)
Привет мир CF F0 E8 E2 E5 F2 20 EC E8 F0 00

Каждый символ, а их 10 в строке имеет свой скан код, состоящий из двух шестнадцатеричных чисел. Так например:
 
П - CF
р -  F0
и -  E8

И последним байтом идет 00 , как раз он и указывает на конец строки!  Есть конечно и тут некоторые правила. К примеру нам понадобилось вывести на экран строку, да не просто строчку, а с кавычками "Label", тут нам придется использовать либо команды CHR (34) "Label" CHR(34) либо записывать примерно так """Label""" Как видите приходится выкручиваться , чтобы выводить специальные символы. Если выводить специальные символы неправильно, то компилятор может просто высветить ошибку и отказать в компилировании.

Другие способы объявления строковых переменных:

Dim ST As String*5="Freebasic" 
? ST : Sleep

Мы объявили строковую переменную, но по особенному. Так объявляется строковая переменная с фиксированной длиной. В данном случае переменная будет состоять из 5 символов. Поскольку в строке больше 5 символов, компилятор попросту отрежет лишние и выведет на экран Freeb. Далее вы увидели новую форму записи:

? ST : Sleep

По сути это есть нечто иное как:

? ST
Sleep

Знак вопроса полностью эквивалентен команде Print. Двоеточие позволяет выводить несколько команд на одной строке! Вы не думайте, что я прыгаю, просто при обучении мне кажется будет не лишним потихонечку добавлять новые команды в своих примерах, так будет укладываться равномерно "поленница знаний".

Теперь примеры объявления с помощью Zstring и Wstring. Переменные объявленные с этими типами отличаются способом объявления от типа String (хотя ее тоже можно так объявлять) , их объявляют так:

Для типа ZString:

Dim A As Zstring * 40="FreeBasic"
Dim B As Zstring Ptr = @"FreeBasic"  (объявляем адрес переменной в памяти)

Для типа WString

Dim A As Wstring * 40="FreeBasic"
Dim B As Wstring Ptr = @"FreeBasic"  (объявляем адрес переменной в памяти)

По своей сути типы String и Zstring работают с ASCII строками. И в FreeBasic тип Zstring добавлен скорее всего из-за того, что язык содержит много библиотек языка Си, для того чтобы удобнее было работать с этими библиотеками. Но в обычных случаях удобнее использовать тип String. Что же касается типа Wstring, то это тип для работы с символами юникода. Вообще забегая вперед, хотелось бы сказать что все команды начинающиеся с W  (Wstr, Wspace, Wchr и еще несколько других) работают с символами юникода.

Выше вы увидели символ @ этот символ показывает , что используется не значение переменной, а ее адрес в памяти. Противоположная ей команда извлекающая значение из адреса *  Но подробнее мы будем рассматривать эти команды в статье про указатели. А теперь примеры:

Dim ST As Zstring Ptr = @ "FreeBasic"
? *ST : Sleep

Здесь мы объявляем строковую переменную ST, но используем ее не напрямую из-за особенностей данного типа, а через указатель к этой переменной. Во второй строчке мы вывели на экран с помощью оператора * то что хранится по адресу этой переменной. Кстати ничто вам не мешает таким же образом использовать тип String!

Dim As Wstring *10 ST="FreeBasic"
? Sizeof (ST)
Sleep

В этом примере во первых вы увидели новый оператор SizeOf он определяет размер структур, переменных или их типов. В данном случает выводится на экран значение 20, поскольку на системе Windows каждый символ юникода занимает 2 байта в отличии от символов ASCII.  Но самое главное вы наверно заметили новый способ записи объявления переменной. Давайте остановимся на этом. Такой способ более удобен, особенно если надо объявить сразу несколько переменных с одним типом. Помните такое объявление можно использовать с любыми типами переменных! Пример:

Dim As String B = "Box", R = "Round", A , C , D
Dim As Single q1,q2,q3,q4
q1=5.354 : q2=46.77 : q4=8
Print B,R
? q1 , q2 , q3 , q4
Sleep


В первой строке мы объявили сразу 5 строковых переменных. И присвоили двум из них значения. Во второй строке мы объявили 4 переменных с плавающей точкой(дробное). А затем трем из них присвоили значения. Далее две строки: 1-вывод строк, 2- вывод чисел на экран. Обратите внимание как мы выводим на экран значения. При таком выводе происходит своеобразная табуляция, то есть значения выводятся через определенный интервал в строчке. Если бы мы использовали символ ; то все печаталось бы слитно. Попробуйте сами заменить запятую на точку с запятой. Кстати, строковые переменные как и числовые можно объявлять с помощью оператора Var.

Var A="Hello"
? A
Sleep

Ничего нового для Вас в коде нет. А теперь давайте поговорим о некоторых манипуляциях с переменными. С числовыми переменными можно проводить любые математические действия. Что касается строковых, то их можно складывать, но конечно же нельзя умножать, вычитать и прочее.... Пример:

Dim As String B= "Hello " , R= "World!"
Dim As Single q1,q2
q1=5.354 : q2=46.77 
Print B+R
Print q1*q2, Sqr(q1+q2), q2+q1 
Sleep

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

Складываем строки и присваиваем результат в переменную B, переменная R не меняется:

Dim As String B= "Hello" , R= "World!"
B=B+R
? B
Sleep

Тоже самое чуть короче:

Dim As String B= "Hello" , R= "World!"
B+=R
? B
Sleep

Здесь уравниваем значения в переменных:

Dim As Integer B=45 , R
R=B
? R
Sleep

 

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

содержание | назад | вперед