Liberty BASIC

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 20:09, 1 июня 2016.
Liberty BASIC
Парадигма процедурный, событийный
Спроектировано Карл Гандел
Разработчики Shoptalk Systems
Первый   появившийся 1992
Стабильная версия 4.04 / 31 июля 2010 г.
OS Microsoft Windows (Mac OS X и Linux в Liberty Basic 5)
Лицензия Коммерческая
Расширение файла .bas, .tkn, .fr3
Портал: http://www.libertybasic.com/
Главная реализация
LB Booster, GLBCC
Диалект
Just BASIC
Под влиянием
QuickBASIC
Влияние
Run BASIC, Leopard

Liberty BASIC — коммерческий язык программирования из семейства BASIC и среда разработки для него. Является интерпретатором и поддерживает 16- и 32-разрядные Windows и OS/2. Liberty BASIC был создан Карлом Ганделом на Smalltalk и выпущен его компанией Shoptalk Systems в 1992 году. Последняя его версия 4.04 вышла 31 июля 2010 года. Версия для OS/2 очень старая, зато бесплатная. В разрабатываемой версии 5 заявлена поддержка Windows, Mac OS X и Linux.

Этот язык рассчитан и создавался преимущественно для обучения программированию.

Среда разработки Liberty BASIC включает в себя редактор кода, отладчик, а также, в последних версиях, обозреватель интерактивных уроков.

Литералы

Значение литералов жестко определены в программе. Даны два литерала, выводимые в mainwin. Первым является число. Вторым – строкой текстовых символов.

print 57
print "Hello World"

produces
  57
  Hello World

Переменные

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

myNumber=3
print myNumber

produces 
  3

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

Имена переменной строки должны заканчиваться $ (знаком доллара). Текст присваивается переменной строки, используя знак равенства (=). Этот пример присваивает "Hello World" в строку переменной hello$, а затем печатает его в mainwin.

hello$ = "Hello World"
print hello$ 

The program above produces this in the mainwin:
  Hello World

Примечание - cтрока может иметь ноль символов - пустая строка. В BASIC, пустая строка может быть выражена в виде строки буквальном виде двух кавычек без каких-либо символов между ними. Например:

let noCharactersHere$ = ""

Глобальные переменные

В общем, переменные, используемые в основном коде программы не видны внутри функций и подпрограмм. Переменные внутри функций и подпрограмм не видны в главной программе. Liberty BASIC 4 вводит GLOBAL, чтобы создавать глобальные переменные. Переменные, объявленные как глобальные можно видеть повсюду в программе. Глобальные переменные определяются и используются так:

global true, false, filename$
true=1
false=0
filaname$ = "readme.txt"

Циклы

Liberty BASIC обеспечивает три конструкции для цикла. Одним из них является FOR/NEXT другой WHILE/WEND и третий DO LOOP.

For/next

FOR . . . NEXT - разновидность циклов, дает возможность выполнять код определенное количество раз. Начальное и конечное значение указываются так:

for var = 1 to 10
  {BASIC code}
next var

В этом случае {BASIC code} выполняется 10 раз. При желании (и обычно) var используется в некоторых вычислениях в {BASIC code}. Например, если в {BASIC code} написать print var ^ 2, то список квадратов для var будет отображаться при исполнении.
Указанный диапазон может быть любым, но так как цикл всегда инкрементируется, то первое число в определении цикла должно быть меньше второго. Обойти это ограничение можно разместив STEP N в конце определения цикла FOR:

for index = 20 to 2 step -1
  {BASIC code}
next index

While/wend

Как было показано выше, Liberty BASIC включает в себя for/next циклы. Он также имеет while/wend циклы. Программа выше, которая переписана с использованием while/wend.

'count to ten
  x = 0
  while x < 10
    x = x + 1
    print x
  wend
end

Одна полезная вещь, которая может быть сделана с while/wend - обертка логического выражения в функцию NOT(), которая эффективно обращает while/wend в конструкцию "while condition is false":

'count to ten
  while not(x = 10)
    x = x + 1
    print x
  wend
end

Do loop

Liberty BASIC также обеспечивает циклы для случаев, когда необходимо, чтобы итерация выполнялась хотя бы один раз, а затем повтор до тех пор, пока условие истино. Вот подпрограмма, которая считает до 10 с помощью DO LOOP с while и DO LOOP с until.

'count to 10 using "loop while" and "loop until"
do
  print a
  a = a + 1
loop while a < 11

do
  print b
  b = b + 1
loop until b = 11

Массивы

Liberty BASIC поддерживает одномерные и двумерные массивы. Они могут быть определены в виде строки или числовых массивов. Размер может достигать свыше 2 млн элементов, если есть достаточно свободной оперативной памяти.
Массивы, которые содержат более 10 элементов должен быть инициализированы с указанным размером, прежде чем они могут быть использованы. Например:

DIM students$(20)
DIM ages(100)

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

REDIM students$(30)

Двойные массивы всегда должен быть инициализированы DIM перед использованием.

DIM scores$(20, 10)

Знак равенства (=) используется для присвоения значения элементу в массиве. К элементу обращение по номеру индекса. Индекс может быть выражен числом или числовой переменной. Элемент с индексом 2 в следующем примере заполняется "Иоанна". Элемент с индексом 7 заполняется номером 12.

students$(2) = "John"
ages(7) = 12

Подпрограммы

sub subName zero or more comma separated parameter variable names
  'code for the sub goes in here
end sub

Описание:
Это описание определяет подпрограмму. Ноль или несколько параметров могут быть переданы в подпрограмму. Подпрограмма не может содержать другое определение подпрограммы или определение функции.
Командa CALL используется для доступа к подпрограмме и передаем значения в ней. Значения должны быть того же типа, как SUB. В следующем примере показан вызов подпрограммы:

sub mySubName string$, number, string2$

is called like this:
call mySubName "string value", 123, str$("321")

Функции

function functionName(zero or more parameter variable names)
  'code for the function goes in here
  functionName = returnValueExpression
end function

Описание:
Это описание определяет функцию. Функция может возвращать значение строки, или числовое значение. Функция, которая возвращает строковое значение, должна иметь имя, которое заканчивается символом "$". Функция, которая возвращает числовое значение не должно включать "$" в имя. Ноль или несколько параметров могут быть переданы в функцию. Функция не может содержать другое определение функции или определение подпрограммы.
Обратите внимание, что открытая скобка фактически является частью имени функции. Не включайте пустое пространство между именем и открывающейся скобкой или будет ошибка.

Right:
  function functionName(var1, var2)

Wrong:
  function functionName (var1, var2)

Возвращаемые значения

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

functionName = returnValueExpression

Рекурсия

Liberty BASIC поддерживает рекурсивные вызовы подпрограмм и функций. Это означает, что функция может называть себя. Когда она делает это, ты создает копию себя, повторно используя имена своих переменных. Значения не будут перезаписаны. Важно, чтобы выйти из рекурсии надо внутри рекурсивной функции поставить условие выхода, которое приведет к окончанию рекурсии и возвращения в основной код программы. Выход должен быть приняты, чтобы избежать создания бесконечно зацикливания рекурсивной функции. В двух примерах ниже используется "IF...THEN", чтобы остановить рекурсивный вызов функции и вернуть управление основной программе.
Ниже приведен пример подпрограммы, которые уменьшают число.

'countdown
  print "Let's count down from three."
  call countDown 3
end

sub countDown number
  print number
  if number > 1 then call countDown number-1
end sub

Теперь рассмотрим пример рекурсивной функции, которая возвращает факториал числа. Факториал получается, принимая число и умножения в свою очередь, каждого целого меньше, чем он сам. Факториал 5 является 5x4x3x2x1 = 120. Факториал 7 - 7x6x5x4x3x2x1 = 5040. Результат уже становится большим после факториала для 10. Например, факториал 15 является 1307674368000 !!

'factorial
  input "Compute factorial for?"; n
  print factorial(n)
end

function factorial(a)
  factorial = 1
  if a > 1 then factorial = a*factorial(a-1)
end function

Примеры кодов

Программа «Hello world»

print "hello world"
end

Программа, открывающая окно с сообщением «Hello World!»

nomainwin
notice "Hello world!"
end


nomainwin
notice "Example program" + chr$(13) + "Hello world!"
end

Программа, открывающая окно для ввода

nomainwin
prompt "Enter your name:";response$
notice "Response:"+ chr$(13) +response$
end

Запуск стороннего приложения

nomainwin
run "notepad.exe"
end

Ссылки