Gambas – Referenční příručka CS

Gambas Almost Means BASic  ·  Open-source Basic IDE pro Linux  ·  gambas.guru

Úvod & instalace

Gambas je open-source vývojové prostředí pro Linux inspirované Visual Basic 6. Obsahuje vlastní IDE, kompilátor a běhové prostředí. Soubory projektů mají příponu .gambas nebo jsou uloženy v adresáři s příponou .gb.

Instalace (Debian/Ubuntu)

# Instalace Gambas 3
sudo apt install gambas3 gambas3-gb-qt5 gambas3-gb-db-sqlite3

# Spuštění IDE
gambas3

Spuštění skriptu z příkazové řádky

gbs3 muj_skript.gambas

Struktura programu

Každý modul / třída Gambas je samostatný soubor. Vstupní bod aplikace je procedura Main() v modulu MMain nebo ve startovní třídě.

' Soubor: MMain.module

Public Sub Main()
  Print "Ahoj světe!"
End
📌 Gambas rozlišuje moduly (.module) a třídy (.class). Moduly jsou ekvivalentem statických tříd — nelze je instancovat.

Datové typy Types

TypPopisRozsah / poznámka
BooleanLogická hodnotaTrue / False
ByteCelé číslo bez znaménka0 – 255
ShortCelé číslo 16 bit−32 768 – 32 767
IntegerCelé číslo 32 bit±2 147 483 647
LongCelé číslo 64 bit±9,2 × 10¹⁸
SinglePlovoucí 32 bit~7 platných číslic
FloatPlovoucí 64 bit~15 platných číslic
StringŘetězec UTF-8Neomezená délka
DateDatum a časVčetně ms přesnosti
VariantLibovolný typDynamicky typovaný
ObjectOdkaz na objektObecný odkaz
PointerUkazatel (C interop)Nativní adresa

Proměnné & konstanty

Deklarace proměnných

Dim jmeno As String
Dim vek As Integer = 30
Dim cena As Float
Dim aktivni As Boolean = True

Rozsah platnosti

Klíčové slovoPlatnost
DimLokální (uvnitř procedury)
PrivatePrivátní v rámci třídy/modulu
PublicVeřejná (přístupná odjinud)
StaticStatická lokální (zachovává hodnotu)

Konstanty

Const PI As Float = 3.14159265
Const APP_NAME As String = "Moje Aplikace"

Operátory Operators

Aritmetické

a + b    ' sčítání
a - b    ' odčítání
a * b    ' násobení
a / b    ' dělení (Float)
a \ b    ' celočíselné dělení
a Mod b  ' zbytek po dělení
a ^ b    ' umocnění

Porovnávací

=   <>   <   >   <=   >=
Is   ' porovnání objektů
Like ' vzorové porovnání řetězce (* = libovolný počet znaků)

Logické

And   Or   Not   Xor

Řetězcové

s1 & s2   ' zřetězení řetězců
s1 & Chr(10) & s2  ' s odřádkováním

Větvení Branching

If ... Then ... Else

If vek >= 18 Then
  Print "Dospělý"
Else If vek >= 15 Then
  Print "Teenager"
Else
  Print "Dítě"
End If

Select Case

Select Case barva
  Case "červená"
    Print "Stop"
  Case "zelená"
    Print "Volno"
  Case Is > 100     ' pro čísla
    Print "Velké číslo"
  Case 1 To 10      ' rozsah
    Print "1 až 10"
  Default
    Print "Jiná hodnota"
End Select

Cykly Loops

For ... Next

For i = 1 To 10
  Print i
Next

' S krokem
For i = 10 To 1 Step -2
  Print i
Next

For Each

Dim ovoce As String[]
ovoce = ["jablko", "hruška", "švestka"]

For Each s As String In ovoce
  Print s
Next

While ... Wend

Dim n As Integer = 0
While n < 5
  Print n
  n++
Wend

Repeat ... Until

Repeat
  Print n
  n++
Until n >= 5

Break a Continue

For i = 1 To 10
  If i = 5 Then Break   ' ukončí cyklus
  If i = 3 Then Continue ' přeskočí iteraci
  Print i
Next

Procedury & funkce Functions

Sub (procedura bez návratové hodnoty)

Public Sub Pozdrav(jmeno As String)
  Print "Ahoj, " & jmeno & "!"
End Sub

' Volání:
Pozdrav("Pavel")

Function (s návratovou hodnotou)

Public Function Scitej(a As Integer, b As Integer) As Integer
  Return a + b
End Function

' Volání:
Dim vysledek As Integer = Scitej(3, 7)

Předávání odkazem (ByRef)

Public Sub Zdvoj(ByRef x As Integer)
  x = x * 2
End Sub

Volitelné parametry

Public Sub PisLog(zprava As String, Optional uroven As Integer = 1)
  Print "[" & uroven & "] " & zprava
End Sub

Třídy & objekty OOP

' Soubor: Osoba.class
Private $jmeno As String
Private $vek As Integer

Public Sub _new(jmeno As String, vek As Integer)
  $jmeno = jmeno
  $vek = vek
End Sub

Public Property Jmeno As String
Public Property Read Vek As Integer

Private Function Jmeno_Read() As String
  Return $jmeno
End Function
Private Sub Jmeno_Write(val As String)
  $jmeno = val
End Sub
Private Function Vek_Read() As Integer
  Return $vek
End Function

Public Sub Predstav()
  Print "Jmenuji se " & $jmeno & ", je mi " & $vek & " let."
End Sub
' Použití v Main:
Dim p As New Osoba("Pavel", 42)
p.Predstav()
Print p.Jmeno
💡 Privátní proměnné třídy mají konvencí prefix $ (např. $jmeno). Konstruktor se jmenuje _new.

Dědičnost Inheritance

' Soubor: Zamestnanec.class
Inherits Osoba

Private $plat As Float

Public Sub _new(jmeno As String, vek As Integer, plat As Float)
  Super._new(jmeno, vek)
  $plat = plat
End Sub

Public Sub Predstav()
  Super.Predstav()
  Print "Plat: " & $plat & " Kč"
End Sub

Události (Events) Events

' Deklarace události v třídě:
Event DataChanged(hodnota As Integer)

' Vyvolání události:
Raise DataChanged(42)

' Obsluha ve formuláři (po přiřazení Observer):
Public Sub MujObjekt_DataChanged(hodnota As Integer)
  Print "Hodnota změněna: " & hodnota
End Sub

Pole (Arrays) Arrays

' Statické pole
Dim cisla[5] As Integer
cisla[0] = 10

' Dynamické pole (třída String[])
Dim seznam As New String[]
seznam.Add("první")
seznam.Add("druhý")
Print seznam.Count   ' 2
Print seznam[0]       ' "první"

' Literál pole
Dim barvy As String[] = ["červená", "zelená", "modrá"]

' Řazení
barvy.Sort()

' Kolekce (klíč–hodnota)
Dim mapa As New Collection
mapa["jmeno"] = "Pavel"
mapa["vek"] = 42
Print mapa["jmeno"]

Řetězce Strings

Dim s As String = "Ahoj světe"

Print Len(s)              ' délka: 10
Print Upper(s)            ' AHOJ SVĚTE
Print Lower(s)            ' ahoj světe
Print Trim(s)             ' odstraní mezery na krajích
Print Left(s, 4)          ' "Ahoj"
Print Right(s, 5)         ' "světe"
Print Mid(s, 6, 5)        ' "světe"
Print InStr(s, "světe")   ' pozice: 6
Print Replace(s, "světe", "Gambas")  ' "Ahoj Gambas"
Print Split(s, " ")[0]    ' "Ahoj" (vrací String[])
Print Str(42)              ' číslo na řetězec
Print Val("3.14")         ' řetězec na číslo

Soubory & I/O File I/O

' Zápis do souboru
Dim f As File
f = Open "/tmp/test.txt" For Write Create
Print #f, "Řádek 1"
Print #f, "Řádek 2"
Close #f

' Čtení ze souboru
f = Open "/tmp/test.txt" For Read
Dim radek As String
While Not Eof(f)
  Line Input #f, radek
  Print radek
Wend
Close #f

' Rychlé čtení celého souboru
Dim obsah As String = File.Load("/tmp/test.txt")

' Práce s cestami
Print File.Exist("/tmp/test.txt")   ' True/False
Print File.Dir("/tmp/test.txt")    ' "/tmp"
Print File.Name("/tmp/test.txt")   ' "test.txt"

Databáze (gb.db) Database

' Komponenta: gb.db, gb.db.sqlite3
Dim db As New Connection
db.Type = "sqlite3"
db.Host = "/tmp/moje.db"
db.Open()

' SQL dotaz
Dim rs As Result = db.Exec("SELECT * FROM uzivatele")
While rs.Available
  Print rs["jmeno"]
  rs.MoveNext()
Wend

' Parametrizovaný dotaz (prevence SQL injection)
db.Exec("INSERT INTO uzivatele (jmeno, vek) VALUES (&1, &2)", "Pavel", 42)

db.Close()

Formuláře & ovládací prvky GUI

' Soubor: FHlavni.class (formulář)
Public Sub Form_Open()
  Me.Text = "Moje aplikace"
  txtJmeno.Text = "Pavel"
End Sub

Public Sub btnOK_Click()
  lblVysledek.Text = "Ahoj, " & txtJmeno.Text
End Sub

Public Sub btnZavrit_Click()
  Me.Close()
End Sub

Běžné ovládací prvky

TřídaPopis
TextBoxTextové pole
ButtonTlačítko
LabelPopisek
CheckBoxZaškrtávací pole
ComboBoxRozbalovací seznam
ListBoxSeznam
TreeViewStromový pohled
GridViewTabulka / mřížka
TabStripZáložky
TimerČasovač

Dialogy Dialogs

' Zpráva
Message.Info("Hotovo!")
Message.Warning("Pozor!")
Message.Error("Chyba!")

' Dotaz (Ano/Ne)
If Message.Question("Opravdu smazat?") = 1 Then
  Print "Smazáno"
End If

' Vstupní dialog
Dim odpoved As String = InputBox("Zadej své jméno:")

' Otevřít soubor
If Dialog.OpenFile() = False Then Return
Print Dialog.Path

' Uložit soubor
If Dialog.SaveFile() = False Then Return
Print Dialog.Path

Ošetření chyb Error Handling

Try
  Dim f As File = Open "/neexistujici.txt" For Read
Catch
  Print "Chyba: " & Error.Text
End Try

' Nebo starší styl:
On Error GoTo ChybaHandler
  ' ... kód ...
  Return
ChybaHandler:
  Print "Nastala chyba!"

Srovnání s VB6 vs VB6

VlastnostVB6Gambas
PlatformaWindows onlyLinux (primárně)
Indexování polí0 nebo 1vždy 0
Aktuální objektMeMe (formuláře) / Self
Null objektNothingNull
Kontrola nullIs NothingIs Null
Ukončení programuEndApplication.Quit()
Typ řetězceBSTR (UTF-16)UTF-8
Přírůsteki = i + 1i++ nebo Inc i
OOPČástečnéPlné OOP + rozhraní
KonstruktorClass_Initialize_new()
DestruktorClass_Terminate_free()
Dělení celých čísel\\ (stejné)
Logické AND/ORAnd / OrAnd / Or (stejné)
Komentář' nebo Rem' (Rem nepodporován)
GoToPodporovánoPodporováno (nedoporučeno)
⚠️ Gambas neobsahuje plnou kompatibilitu s VB6. Nelze přímo importovat .vbp projekty — kód je třeba přepsat.

Komponenty Components

Gambas používá modulární systém komponent, které se přidají v nastavení projektu:

KomponentaPopis
gbZákladní knihovna (vždy zahrnuta)
gb.qt5GUI – Qt5 ovládací prvky
gb.gtkGUI – GTK ovládací prvky
gb.dbDatabázová vrstva (abstraktní)
gb.db.sqlite3SQLite3 driver
gb.db.mysqlMySQL driver
gb.db.postgresqlPostgreSQL driver
gb.netSíťové programování (TCP/UDP)
gb.webWebové aplikace (CGI/FastCGI)
gb.xmlParsování XML / HTML
gb.jsonPráce s JSON
gb.imageManipulace s obrázky
gb.drawKreslení / 2D grafika
gb.cryptKryptografie (MD5, SHA, AES)
gb.formRozšířené formulářové prvky
gb.reportTisk a sestavy
gb.signalUnix signály
✅ Úplnou dokumentaci včetně API referenčních stránek najdeš na gambaswiki.org