Ú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
| Typ | Popis | Rozsah / poznámka |
|---|---|---|
Boolean | Logická hodnota | True / False |
Byte | Celé číslo bez znaménka | 0 – 255 |
Short | Celé číslo 16 bit | −32 768 – 32 767 |
Integer | Celé číslo 32 bit | ±2 147 483 647 |
Long | Celé číslo 64 bit | ±9,2 × 10¹⁸ |
Single | Plovoucí 32 bit | ~7 platných číslic |
Float | Plovoucí 64 bit | ~15 platných číslic |
String | Řetězec UTF-8 | Neomezená délka |
Date | Datum a čas | Včetně ms přesnosti |
Variant | Libovolný typ | Dynamicky typovaný |
Object | Odkaz na objekt | Obecný odkaz |
Pointer | Ukazatel (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é slovo | Platnost |
|---|---|
Dim | Lokální (uvnitř procedury) |
Private | Privátní v rámci třídy/modulu |
Public | Veřejná (přístupná odjinud) |
Static | Statická 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řída | Popis |
|---|---|
TextBox | Textové pole |
Button | Tlačítko |
Label | Popisek |
CheckBox | Zaškrtávací pole |
ComboBox | Rozbalovací seznam |
ListBox | Seznam |
TreeView | Stromový pohled |
GridView | Tabulka / mřížka |
TabStrip | Zá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
| Vlastnost | VB6 | Gambas |
|---|---|---|
| Platforma | Windows only | Linux (primárně) |
| Indexování polí | 0 nebo 1 | vždy 0 |
| Aktuální objekt | Me | Me (formuláře) / Self |
| Null objekt | Nothing | Null |
| Kontrola null | Is Nothing | Is Null |
| Ukončení programu | End | Application.Quit() |
| Typ řetězce | BSTR (UTF-16) | UTF-8 |
| Přírůstek | i = i + 1 | i++ nebo Inc i |
| OOP | Částečné | Plné OOP + rozhraní |
| Konstruktor | Class_Initialize | _new() |
| Destruktor | Class_Terminate | _free() |
| Dělení celých čísel | \ | \ (stejné) |
| Logické AND/OR | And / Or | And / Or (stejné) |
| Komentář | ' nebo Rem | ' (Rem nepodporován) |
| GoTo | Podporováno | Podporová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:
| Komponenta | Popis |
|---|---|
gb | Základní knihovna (vždy zahrnuta) |
gb.qt5 | GUI – Qt5 ovládací prvky |
gb.gtk | GUI – GTK ovládací prvky |
gb.db | Databázová vrstva (abstraktní) |
gb.db.sqlite3 | SQLite3 driver |
gb.db.mysql | MySQL driver |
gb.db.postgresql | PostgreSQL driver |
gb.net | Síťové programování (TCP/UDP) |
gb.web | Webové aplikace (CGI/FastCGI) |
gb.xml | Parsování XML / HTML |
gb.json | Práce s JSON |
gb.image | Manipulace s obrázky |
gb.draw | Kreslení / 2D grafika |
gb.crypt | Kryptografie (MD5, SHA, AES) |
gb.form | Rozšířené formulářové prvky |
gb.report | Tisk a sestavy |
gb.signal | Unix signály |
✅ Úplnou dokumentaci včetně API referenčních stránek najdeš na gambaswiki.org