Язык программирования FreeBASIC

Добро пожаловать. Снова.

Это неофициальный сайт, посвящённый языку программирования FreeBASIC.

Что такое FreeBASIC?

FreeBASIC:
язык программирования с бейсик‐совместимым синтаксисом на основе языка QuickBASIC;
компилятор этого языка.

Почему FreeBASIC?

Причины обратить внимание на этот язык.

Простой

Язык программирования BASIC всегда славится простотой в освоении и лёгкостью в программировании.

FreeBASIC позволяет решать сложные задачи с помощью понятного кода. В исходном коде на бейсике разбираются новички, профессионалы и непрограммисты.

Открытый

FreeBASIC — это проект с открытым исходным кодом по лицензии GNU GPL.

Кроссплатформенный

Компилятор fbc создаёт приложения для i386‐подобной архитектуры процессора под DOS, Linux и Windows. При использовании ручной компиляции можно создать приложения и для других платформ.

В поставку входит набор инструментов для разработки: компилятор, GNU‐ассемблер, компоновщик, профилировщик, архиватор, отладчик и библиотеки времени выполнения, включая графическую библиотеку.

Создаёт быстрые программы

Скорость работы создаваемых программ близка к скорости работы программ от мэйнстримовых стредств типа GCC.

Создаёт много типов приложений

Благодаря использованию утилит GNU, на фрибейсике пишут:

Поддерживает библиотеки

В пакете с компилятором идут заголовочные файлы для популярных библиотек, например, библиотек времени выполнения Си, Allegro, SDL, OpenGL, GTK+, Windows API. С примерами.

Совместим с QuickBASIC

FreeBASIC задуман как совместимая бесплатная альтернатива Microsoft QuickBASIC.

Режим компиляции QB позволит компилировать QuickBASIC‐код в исполняемые файлы почти без изменений в коде.

Однако для компиляции в режиме «по умолчанию» в большинство программ придётся внести изменения.

Совместим с Си

Компилятор полностью поддерживает библиотеки языка Си и частично C++. Это позволяет создавать библиотеки для Си и других языков.

Язык FreeBASIC поддерживает препроцессор в стиле Си, например, многострочные макросы, условную компиляцию, включение файлов.

Не ограничивает в методологии разработки

Язык поддерживает несколько парадигм программирования:

Как выглядит FreeBASIC?

Примеры кода.

Процедурное программирование

' Функция сложения двух чисел
Function AddNumbers(a As Integer, b As Integer)As Integer
	Return a + b
End Function

' Процедура, выводящая на консоль строку
Sub Hello()
	Print "Привет"
End Sub

' Предварительное объявление процедуры
Declare Sub MyPrint(num As Integer)

' Код вне любых функций и процедур считается главной точкой входа в программу
Hello()
Print AddNumbers(1, 1)
MyPrint 5

Sub MyPrint(num As Integer)
	Print num
End Sub

Объектно-ориентированное программирование

Type Vector
	W As Integer
	H As Integer
	Declare Constructor(nW As Integer, nH As Integer)
End Type

Constructor Vector(nW As Integer, nH As Integer)
	W = nW
	H = nH
End Constructor

' Класс для создания объекта
Type AObject
	Private:
		X As Integer
		Y As Integer
		Movement As Vector Pointer
	Public:
		' Видимые извне методы, включая конструктор и деструктор
		Declare Constructor(nX As Integer, nY As Integer)
		Declare Destructor()
		Declare Sub SetMotion(Motion As Vector Pointer)
		Declare Sub Move()
		Declare Property GetX As Integer
End Type

Constructor AObject(nX As Integer, nY As Integer)
	X = nX
	Y = nY
End Constructor

Destructor AObject()
	Delete Movement
End Destructor

Sub AObject.SetMotion(Motion As Vector Pointer)
	Movement = Motion
End Sub

Sub AObject.Move()
	X += Movement->W
	Y += Movement->H
End Sub

Property AObject.GetX As Integer
	Return X
End Property

' Фактическое начало программы 

' Создание экземпляра класса с координатами (100, 100)
Dim Player As AObject = Type<AObject>(100, 100)

' Создание вектора с начальными значениями (-10, 5) и перемещение позиции объекта
Player.SetMotion(New Vector(-10, 5))

' Перемещение объекта
Player.Move()

' Получаем координату X и выводим на консоль
Print Player.GetX

' Деструктор объекта «Player» вызывается тогда, когда объект покидает зону видимости
' Так как «Player» является локальной переменной, деструктор вызывается автоматически