Structuren

Controle StructuurHerhalingslus
BREAK Verlaat de herhaling onmiddellijk.
CONTINUE Springt naar de volgende herhaling.
DOLOOP Oneindige herhalingslus (dus zonder test - meestal met exit).
FORNEXT Herhalingslus met teller.
FOR EACHNEXT Herhalingslus met opsomming.
REPEATUNTIL

Herhalingslus met test aan einde.
WHILEWEND Herhalingslus met test aan het begin.

Andere Controle Structuren
GOTO Onvoorwaardelijke sprong.
Typisch kenmerk van BASIC en algemeen verwerpelijk geacht.
QUIT Quits the program.
RETURN Terug naar hoofdprogramma.
STOP Markering, onderbrekingspunt.
WITHEND WITH Default object selector.

.module Module is extra file, bv “getdata.module” in de projectdirectory.
modulename.function Aanroep door modulenaam met punt, gevolgd door procedure- of functienaam in die module
Parameter passing PUBLIC FUNCTION SetColorName(iVal AS Integer) AS String
geeft naam van een kleur terug (string) voor de waarde die gegeven werd (getal)
Test Control Structures & Functions
Choose Choose a value from a list.
IIf Immediate test function
IFTHENELSEENDIF Conditional structure.
SELECT CASEEND SELECT Choice structure.
IF
Syntax
IF Expression [ { AND IF | OR IF } Expression … ] THEN
  …
[ ELSE IF Expression [ { AND IF | OR IF } Expression … ] THEN
  … ]
[ ELSE
  … ]
ENDIF

Hergebruik:

Modules

' Module modNaam
PUBLIC publiekeVarNaam AS Type
PRIVATE variabeleNaam AS Type

PUBLIC FUNCTION SetSomeValue (iVal AS Integer) AS Boolean
   ... instructies ....
END

PROCEDURE ProcedureNaam
  DIM variabelenaam AS Type
  ... instructies ...
END

Je kan dan in het programma modNaam.publiekeVarNaam en modNaam.ProcedureNaam gebruiken.

Forms

PRIVATE $hConn AS Connection
PUBLIC SUB Bewerking()
  DIM variabele AS Type
  TRY $hConn.Close
  ... verdere instructies ...
  WITH $hConn
    .Type="mysql"
    ...
  END WITH
  ... verdere instructies ...
END

TRY en Error

TRY ietsuitvoeren
IF ERROR THEN
  foutafhandeling

Classes

In de classe definieer je de eigenschappen:

PUBLIC : kan van buitenaf ingevuld, gewijzigd enz worden, zonder controle.
PRIVATE : kan van buitenaf niet benaderd worden
PRIVATE $naam : kan van binnen heel de klasse benaderd worden
PROPERTY READ : kan alleen opgevraagd worden (alleen _Read)
PROPERTY : kan van buitenaf waarde toegekend en opgevraagd worden
De property_naam zal altijd (meestal) een interne PRIVATE tegenhanger hebben die gemanipuleerd wordt binnen de klasse met de standaard functie / procedures:

  • PRIVATE FUNCTION propertyNaam_Read() AS …
  • PRIVATE SUB propertyNaam_Write(Value AS …)

Deze functies worden in de IDE automatisch gemaakt (leeg) bij creatie van een PROPERTY.
In de _Write code kan je dan bv controles opnemen, in de _Read bv een teller bijhouden.

De PROPERTY READ is extern zichtbaar als een alleen-lezen variabele. Ze zal in de class ergens ook een waarde moeten krijgen, dus altijd een interne “SET…” hebben?
Eigenlijk wordt de waarde ervan geleverd door de functie _Read; in die functie wordt een waarde teruggegeven.
Dat kan zijn:

  • de waarde van een interne variabele (met een $overalindeclassbereikbaar)
  • het resultaat van een bewerking.

De PROPERTY READ is dus eigenlijk een truukje om een intern schrijfbare variabele extern enkel leesbaar te maken. Omdat de waarde geleverd wordt door een functie moet er geen interne tegehanger van de variabele zijn.

Voorbeeld: database met id’s die van het type integer zijn. Je kan extern die id wel zichtbaar maken, bv door ze in de _Read functie terug te geven als een tot string omgezette integer waarde. Van buitenuit moet de id nooit “gezet” worden, intern wordt ze van de database opgehaald en bestaat ze als integer.

Objects
DIM hParent AS OBJECT

SetProperty ( Object AS Object, Property AS String, Value AS Variant )

Static methods :

  • Attach
  • Call
  • Class
  • Count
  • Detach
  • GetProperty
  • Is
  • IsLocked
  • IsValid
  • Lock
  • New
  • Parent
  • SetProperty
  • Type
  • Unlock

Voorbeeld (uit de IDE source FForm.class):

'FForm.class
PUBLIC Name AS String
...
PUBLIC Master AS CControl
PUBLIC Selection AS NEW Collection
PUBLIC Control AS NEW Collection(gb.Text)
PUBLIC Menus AS NEW Object[]
PUBLIC Container AS NEW Container

PROPERTY READ  ReadOnly AS Boolean

PRIVATE CONST MODE_NOTHING AS Integer=0
PRIVATE CONST MODE_CREATE AS Integer=1

Zie ook Gambas Index