Переменные часть 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
Все переменные, которые мы сегодня объявляли, являются простыми, то есть видимыми для основного кода, но в дальнейшем мы увидим, что есть участки кода, в которых эти переменные "чужие" . Изучим понятие глобальных и статических переменных, здесь же я просто упоминаю, для полноты картинки. Всего доброго!
содержание | назад | вперед