Съдържание

# Използване на променливи

По-долу са описани основите на работата с променливи в LibreOffice Basic.

## Правила за съставяне идентификатори на променливи

Имената на променливи не могат да надхвърлят дължина от 255 знака. Първият знак от името на променлива трябва да бъде латинска буква от A до Z или от a до z. В имената на променливи могат да се използват и цифри, но препинателни и специални знаци не се допускар, с изключение на знака долна черта (_). В LibreOffice Basic идентификаторите на променливи са нечувствителни към регистъра. Имената на променливи могат да съдържат интервали, но в такъв случай трябва да са оградени с квадратни скоби.

Примери за идентификатори на променливи:

        MyNumber=5      'Правилно'
        MyNumber5=15    'Правилно'
        MyNumber_5=20   'Правилно'
        My Number=20    'Неправилно, променлива с интервал трябва да е оградена в квадратни скоби'
        [My Number]=12  'Правилно'
        DéjàVu=25       'Неправилно, не се допускат специални знаци'
        5MyNumber=12    'Неправилно, променлива не може да започва с число'
        Number,Mine=12  'Неправилно, не се допускат пунктуационни знаци'

## Обявяване на променливи

В LibreOffice Basic не е задължително да декларирате изрично променливите. Обявяването на променлива се извършва с оператора Dim. Можете да декларирате няколко променливи наведнъж, като разделите имената им със запетая. За да дефинирате типа на променливата, използвайте или знак за декларация на тип след името, или съответната ключова дума.

Примери за декларации на променливи:

        Dim a$               'Обявява променливата "a" от тип String'
        Dim a As String      'Обявява променливата "a" от тип String'
        Dim a$, b As Integer 'Обявява една променлива от тип String и една от тип Integer'
        Dim c As Boolean     'Обявява c като променлива от тип Boolean с възможни стойности TRUE и FALSE'

След като сте декларирали променлива като принадлежаща на определен тип, не можете да декларирате променлива със същото име от друг тип!

Когато обявите няколко променливи на един ред от кода, трябва да зададете типа на всяка от тях. Ако типът на променлива не е зададен явно, Basic приема, че тя е от тип Variant.

      ' И двете променливи „a“ и „b“ са от тип Integer
      Dim a As Integer, b As Integer
      ' Променливата „c“ е Variant, а „d“ – Integer
      Dim c, d As Integer
      ' Променлива може да бъде и изрично декларирана като Variant
      Dim e As Variant, f As Double

Типът Variant е специален тип данни, който позволява съхранение на произволен вид стойност. За да научите повече, вижте раздела Типът Variant по-долу.

### Форсиране на декларациите на променливи

За да направите обявяването на променливите задължително, използвайте следната команда:

    Option Explicit

Операторът OPTION EXPLICIT трябва да бъде на първия ред от модула, преди първия блок SUB. Обикновено само масивите трябва да се обявяват изрично. Всички останали променливи се декларират според знака за тип или – ако той е пропуснат – като принадлежащи на подразбирания тип Single.

## Типове на променливите

LibreOffice Basic поддържа четири вида променливи:

- Числови променливи, които могат да съдържат числови стойности. Някои променливи служат за съхраняване на много големи или много малки числа, а други – за съхраняване на дробни числа или числа с плаваща запетая.

- Низови променливи, които съдържат знакови низове.

- Булеви променливи, съдържащи стойност TRUE или FALSE.

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

### Целочислени променливи

Целочислените променливи приемат стойности от -32768 до 32767. Ако присвоите стойност с плаваща запетая на целочислена променлива, стойността ще бъде закръглена до най-близкото цяло число. С целочислените променливи се работи бързо и те са подходящи за броячи в цикли. Целочислените променливи заемат само по два байта в паметта. Техният знак за деклариране на тип е „%“.

    Dim Variable%
    Dim Variable As Integer

### Дълги целочислени променливи

Дългите целочислени променливи приемат стойности от -2147483648 до 2147483647. Ако присвоите стойност с плаваща запетая на дълга целочислена променлива, стойността ще бъде закръглена до най-близкото цяло число. С дългите целочислени променливи се работи бързо и те са подходящи за броячи в цикли с големи стойности. Дългите целочислени променливи заемат по четири байта в паметта. Техният знак за деклариране на тип е „&“.

    Dim Variable&
    Dim Variable As Long

### Десетични променливи

Десетичните променливи могат да приемат положителни, отрицателни и нулеви стойности. Точността им е до 29 цифри.

Можете да използвате знаците плюс (+) и минус (-) като префикси за десетични числа (с или без интервал).

Ако присвоите десетично число на целочислена променлива, LibreOffice Basic ще го закръгли нагоре или надолу.

### Променливи с еднична точност

Променливите с единична точност приемат положителни или отрицателни стойности от 3,402823.10^38 до 1,401298.10^-45. Това са променливи с плаваща запетая, в които точността спада с удължаването на цялата част от стойността. Променливите с единична точност са подходящи за средно точни математически пресмятания. С тях се работи по-бавно, отколкото с целочислените, но по-бързо, отколкото с тези с двойна точност. Променливите с единична точност заемат по четири байта в паметта. Техният знак за деклариране на тип е „!“.

    Dim Variable!
    Dim Variable As Single

### Променливи с двойна точност

Променливите с двойна точност приемат положителни или отрицателни стойности от 1,79769313486232.10^308 до 4,94065645841247.10^-324. Това са променливи с плаваща запетая, в които точността спада с удължаването на цялата част от стойността. Променливите с двойна точност са подходящи за точни пресмятания. С тях се работи по-бавно, отколкото с тези с единична точност. Променливите с двойна точност заемат по осем байта в паметта. Техният знак за деклариране на тип е „#“.

    Dim Variable#
    Dim Variable As Double

### Променливи за парични суми

Променливите за парични суми се съхраняват вътрешно като 64-битови числа (8 байта) и се изобразяват като десетични числа с фиксирана запетая, с 15-цифрена цяла и 4-цифрена дробна част. Стойностите им варират от -922337203685477,5808 до +922337203685477,5807. Тези променливи се използват за валутни изчисления с висока точност. Съответният знак за деклариране на тип е „@“.

    Dim Variable@
    Dim Variable As Currency

### Литерали за цели числа

Числата могат да се кодират в осмична и в шестнадесетична бройна система.

      xi = &o13 '    8 + 3
      ci = &h65 ' 6*16 + 5
      MAX_Integer =  &o77777 '  32767 = &h7FFF
      MIN_Integer = &o100000 ' -32768 = &h8000
      MAX_Long = &h7fffffff '  2147483647 = &o17777777777
      MIN_Long = &h80000000 ' -2147483648 = &o20000000000

### Низови променливи

Низовите променливи могат да съдържат знакови низове с дължина до 2 147 483 648 знака. Всеки знак се съхранява като съответната стойност от Уникод. Низовите променливи са подходящи за обработка на текст в програми и за временно съхраняване на непечатни знаци с дължина до 2 ГБ. Необходимата памет за съхранение на низова променлива зависи от броя знаци в нея. Знакът за деклариране на тип е „$“.

Във функциите на BASIC за низове първият знак на низа има индекс 1.

    Dim Variable$
    Dim Variable As String

### Булеви променливи

Булевите променливи могат да съдържат само две стойности: TRUE (истина) или FALSE (лъжа). Числото 0 има стойност FALSE, а всички останали числа се считат за TRUE.

    Dim Variable As Boolean

### Променливи за дати

Променливите за дати могат да съдържат само дати и часове, съхранявани във вътрешен формат. Стойностите, присвоявани на променливите за дати с функциите Dateserial, Datevalue, Timeserial и Timevalue, автоматично се преобразуват във вътрешния формат. Променливите за дати се преобразуват в обикновени числа чрез функциите Day, Month, Year или Hour, Minute, Second. Вътрешният формат позволява сравняване на дати и часове чрез изчисляване на разликата между две числа. Тези променливи могат да се декларират само с ключовата дума Date.

    Dim Variable As Date

### Литерали за дати

Литералите за дати позволяват задаване на еднозначни променливи за дати, независими от текущия език. Литералите са оградени със знак диез #. Възможните формати са:

- #yyyy-mm-dd#

- #mm/dd/yyyy#

      start_date = #12/30/1899# ' = 1
      dob = #2010-09-28#

## Типът Variant

Променливите, декларирани като Variant, могат да съдържат данни от всякакъв тип. Това означава, че действителният тип данни се определя по време на изпълнение, когато на променливата се присвои стойност.

Има три основни начина да се създаде променлива от тип Variant, както е показано по-долу:

      Dim varA            ' Типът не е зададен, следователно променливата е от тип Variant
      Dim varB as Variant ' Променливата е изрично декларирана като Variant
      varC = "abc"        ' Недекларираните променливи се смятат за Variant

В примера по-долу е използвана функцията TypeName, за да се покаже как типът на променлива, декларирана като Variant, се променя при присвояване.

      Dim myVar As Variant
      MsgBox TypeName(myVar) ' Empty
      myVar = "Hello!"
      MsgBox TypeName(myVar) ' String
      myVar = 10
      MsgBox TypeName(myVar) ' Integer

Променливите, декларирани като Variant, се инициализират със специалния тип данни Empty. С функцията IsEmpty можете да проверите дали дадена променлива е Empty Variant.

Ключовата дума Any също може да се използва за деклариране на променлива като Variant. Any обаче е отхвърлена и се поддържа само заради обратна съвместимост.

Аргументите с тип Variant или Any, предадени при обръщение към функция, не се проверяват по тип.

      Dim myVar As Any ' Променливата "myVar" е Variant

## Начални стойности на променливите

Още при декларирането на променливата автоматично й се присвоява стойността „Null“. Обърнете внимание на следните правила:

Числовите променливи автоматично получават стойност 0 при обявяването си.

На променливите за дати се присвоява вътрешно стойност 0. Това е еквивалентно на преобразуването на стойността до „0“ с функциите Day, Month, Year или Hour, Minute, Second.

На низовите променливи при обявяването им се присвоява празен низ ("").

## Масиви

LibreOffice Basic поддържа едномерни и многомерни масиви, дефинирани със специален вид променлива. Масивите са подходящи за редактиране на списъци и таблици в програмите. Отделните елементи на масив могат да се адресират чрез числов индекс.

Масивите трябва да бъдат обявени с оператора Dim. Има няколко начина за дефиниране на диапазона от индекси на масив:

        Dim Text$(20)       '21 елемента, номерирани от 0 до 20'
        Dim Text$(5,4)      '30 елемента (матрица от 6 x 5 елемента)'
        Dim Text$(5 To 25)  '21 елемента, номерирани от 5 до 25'
        Dim Text$(-15 To 5) '21 елемента (включително 0), номерирани от -15 до 5'

Диапазонът от индекси може да включва както положителни, така и отрицателни числа.

## Константи

Константите имат фиксирана стойност. Те се задават само веднъж в програмата и след това не могат да се предефинират:

    Const ConstName=Expression

Теми, свързани с показаната

Константи на Basic

Оператор Dim