Diferències amb Visual Basic

Tot i que Gambas no vol ser un clon de Microsoft Visual Basic, segueix sent BASIC i hi han moltes similituds entre tots dos llenguatges, i moltes relacions en les característiques.

Probablement hi ha més similituds que diferències, però no podeu copiar els vostres projectes VB i compilar-los dins de Gambas.

El símbol %vb% apareixerà algunes vegades en pàgines d'aquesta documentació per indicar que hi ha notes disponibles de com s'ha d'usar una característica i que al VB la mateixa tasca es fa d'una manera diferent, per ajudar als programadors que migrin a Gambas des d'aquest llenguatge.

Diferències no específiques del llenguatge

  • VB incrusta el codi de per cada un dels del formulari dins el mateix fitxer de definició del formulari. Gambas els manté separats en un fitxer .form i un de ..

  • Extensions de fitxer:

Tipus de fitxer Visual Basic Gambas
Fitxer de definició de projecte .vbp .project (només .project, un per directori)
Mòdul .bas .module
Fitxer de classe .cls .
Fitxer de definició de formulari .frm .form
Fitxers binaris de recursos .frx Qualsevol altre fitxer desat al directori del projecte.

  • Els projectes de Gambas es defineixen com un directori amb un fitxer .project a dins, i tots els fitxers continguts en el directori. VB pot tenir varis fitxers de projecte en el mateix directori i pot fer servir el mateix fitxer de codi font des d'un altre directori en altres projectes, cosa que té les seves avantatges i desavantatges.

  • El mesurament de la pantalla a VB es fa amb «twips», unitats d'1/1440 de polzada; a Gambas es fa en píxels.

  • Els controls de formulari en els programes de Gambas per defecte són privats. Podeu canviar això anant al diàleg de propietats del projecte i marcant el quadre de verificació Els controls de formulari són públics.

  • Les funcions de conversió Str$, Val, CStr... tenen un comportament diferent. Per exemple, Str$ i Val usen els paràmetres de localització a Gambas, mentre que no ho fan a Visual Basic. Llegiu atentament la documentació per a més detalls. Noteu que el comportament de Gambas és més lògic :-).

Visual Basic ho té, Gambas no.

  • A Gambas no podeu editar el codi en mode depuració; primer heu d'aturar el programa.

  • A Gambas, els tipus de dades simples (enters, cadenes, etc.) són passats per valor als procediments i funcions. No poden ser passats per referència com a Visual Basic. Noteu que VB passa els paràmetres per referència si no feu servir la paraula clau ByVal, així que aneu amb compte al portar un projecte de VB. També, el contingut de tipus de dades d' (matrius, coŀleccions, objectes) són passats sempre per referència en els dos llenguatges!

Els paràmetres ja es poden passar per referència en la nova versió en desenvolupament.

  • No hi ha res semblant a una global per a tot el projecte a Gambas. Com a solució considereu la possibilitat de crear una anomenada Global i declarar les variables globals com a variables static public dins d'aquesta , i després referint-se a elles com a Global.nomdelavariable dincs el vostre projecte. No és una pràctica de programació molt acurada però almenys seran identificades com a variables globals cada cop que les feu servir ;-)

  • Si no s'inclou Option Explicit en un mòdul de VB, no necessiteu declarar les variables abans de fer-les servir. Gambas es comporta com si l'Option Explicit fos sempre activat, cosa que fa un millor codi font a expenses d'una mica més de feina.

  • No hi ha un equivalent directe a Gambas de la índex dels controls de formulari de VB. Podeu crear fàcilment matrius de controls, però ho heu de fer des del codi. Actualment no es pot fer gràficament. Així doncs, quan copieu i el torneu a enganxar en el mateix formulari, en comptes de preguntar-vos si voleu crear una matriu de controls, automàticament canvia el nom del control copiat per un d'apropiat.

  • De moment no es poden crear etiquetes transparent a Gambas; el fons és sempre opac.

Això ja és possible en la nova versió en desenvolupament.

  • L' MouseMove només succeeix quan hi ha un botó del ratolí premut a Gambas. L'excepció és el control DrawingArea, que té una Tracking la qual us permet rebre els esdeveniments de moviment del ratolí, fins i tot amb les tecles del ratolí sense prémer.

  • A VB podeu ajuntar dues cadenes amb el símbol + . Com que el signe + només s'usa per a sumes matemàtiques a Gambas, en comptes heu de fer servir & quan vulgueu afegir una cadena en una altra.

  • Els dos punts : no funciona per a separar el codi. En comptes d'això, heu de crear una nova línia.

  • L'ordre print a VB 3.0 no afegia un salt de línia. Si imprimíeu text amb printer.print, llavors el text es perdia. L'ordre print a Gambas ho posa tot en una sola línia. Res no es perd.

  • A VB podeu usar Mid$() com a instrucció per extreure una subcadena i posar-n'hi una altra. A Gambas no podeu fer-la servir per assignar-l'hi una de nova. Per exemple, a VB: LaMevaCadena = "El gos salta": Mid$(LaMevaCadena, 4, 3) = "gat" resulta en LaMevaCadena = "El gat salta". Això no funciona a Gambas. Heu de fer una cosa com aquesta: LaMevaCadena = Left$(LaMevaCadena, 3) & "gat" & Mid$(LaMevaCadena, 7).

Aquesta sintaxi de Mid$() ja es pot usar en la nova versió en desenvolupament.

  • Els caràcters no que es poden fer servir als inteficadors al codi de VB, no són acceptats a Gambas.

  • Afortunadament, a Gambas no es pot usar GOTO per capturar errors! En el seu lloc feu servir CATCH, FINALLY o TRY.

  • No es pot fer servir ENUM per enumerar les constants d'enter. En comptes d'això, heu de definir cada element ENUM com una constant.

Examples

 CONST ADDITION AS Integer = 1
 CONST SUBSTRACTION AS Integer = 2

Gambas ho té, Visual Basic no

  • Al contrari que a VB, no necessiteu el suport gràfic si voleu escriure una aplicació de línia d'ordres a Gambas. Només desmarqueu el gb.qt4 a les propietats del projecte i assegureu-vos de definir un SUB Main().

  • En comptes de la paraula clau WITH EVENTS, heu de donar un «nom d'» als objectes que utilitzin esdeveniments. Per a més informació, mireu la documentació de NEW.

  • Gambas té el concepte de grups de control, cosa que permet gestionar els esdeveniments de qualsevol nombre de controls amb només una subrutina gestora. Això redueix el codi redundant i us permet fer moltes de les coses que els índex de control de VB poden fer, i algunes de VB no pot.

  • Mentre que VB fa impossible executar un programa de manera síncrona i rebre la seva sortida sense aprendre a fer les trucades a les API's (l'interpret d'ordres simplement executa el programa en segon terme), Gambas us ho permet fer amb SHELL i EXEC, controlar els processos que inicieu tot fent servir la Process, i fins i tot llegir i escriure-hi, permeten-vos afegir fàcilment funcionalitats amb aplicacions d'ajuda. Això fa increïblement fàcil d'escriure interfícies a Gambas per a gairebé qualsevol procediment de la línia d'ordres.

  • Podeu fer tot el descrit més amunt amb dispositius Unix així com amb fitxers especials, com els ports sèrie i paraŀlel. Useu el sistema de fitxers /proc per excriure un monitor RAID, per exemple, o usar conductes amb noms per obtenir mútiples canals d'informació des d'un programa de suport en qualsevol altra llengua.

  • Per crear una finestra irregular només heu d'ajustar les ME.Picture i ME.Mask de l'actual finestra a una imatge que tingui àrees transparents. VB requereix trucades a l'API i una mica més de feina.

  • Podeu crear menús dinàmicament, simplement heu d'instanciar-lo amb la instrucció NEW.

  • Podeu incrustar un formulari de Gambas dins d'un altra: quan instancieu el primer, especifiqueu el segon com a pare.

  • Els controls tenen els esdeveniments Enter i Leave, que us permeten conèixer quan el punter del ratolí entra en un control i quan en surt. El podeu fer servir per implementar fàcilment efectes amb el moviment del ratolí.

  • Podeu llegir dades de fitxers binaris i gestionar automàticament l'Endianness del seu format, tot fent servir la ByteOrder de la Stream.

  • Gambas usa internament la codificació , i per tant els projectes poden ser internacionalitzats fàcilment.

  • Gambas és programari lliure, és el llenguatge en que s'ha escrit el propi entorn de programació, i que permet un alt grau de personalització amb només les vostres habilitats de BASIC.

I moltes moltes més coses... Afegiu-les com més us agradin! :-)

Mateixa funcionalitat, Terminologia diferent

  • End Sub=/=End Function: veieu END.

  • Exit Sub=/=Exit Function: veieu RETURN. També, més que configurar una amb el mateix nom que la funció i després sortir de la funció, podeu simplement incloure el valor de retorn com un paràmetre a RETURN.

  • End (finalitza el programa): veieu QUIT.

  • Les matrius usen claudàtors en lloc de parèntesis. Així que feu servir DIM x[9] AS en comptes de DIM x(9) AS Float

  • Les matrius no tenen l'element extra per indexar-los com a 1..n, l'índex sempre és 0..(n-1)

  • On Error Goto: veieu TRY, CATCH i FINALLY.

  • Msgbox: veieu Message. Probablement preferireu Message.info.

  • La funció InputBox per defecte de VB (mostra un diàleg per introduir un valor que es retornat al programa que l'ha cridat) no té encara un equivalent directe a Gambas, però a la pàgina de l'InputBox hi ha una que podeu descarregar i incloure en el vostre projecte que serveix per a fer el mateix (i més). La versió en desenvolupament té un InputBox.

  • DoEvents: veieu WAIT. WAIT també reemplaça la funció "sleep" de l'API de Windows freqüentment utilitzada.

  • Inserint cometes dobles en una cadena: En comptes de dues cometes dobles consecutives com a VB, useu la barra inversa com a caràcter d'escapada igual que a C o Perl (\").

  • VScrollBar, HScrollBar: l'ScrollBar de Gambas els reemplaça tots dos. Es mostra com una barra de desplaçament vertical o horitzontal de forma automàtica basant-se en les dimensions del control: feu-lo ample, i tindreu una barra de de desplaçament horitzontal; feu-lo alt, i en tindreu una de vertical.

  • Diàlegs Obrir i Desar: Podeu fer servir tant qt com els diàlegs millorats del KDE en lloc dels diàlegs comuns de Windows. Algunes de les propietats tenen un altre nom i els filtres s'especifiquen amb una matriu de cadenes, com aquesta: [ "Filter 1 (*.foo)" , "Filter 2 (*.bar)" ]. La sintaxi ha canviat a la versió en desenvolupament

  • Validant entrada de text: A VB, alguns esdeveniments tenen el paràmetre Cancel que podeu ajustar per prevenir la gestió del vostre després de que la vostra gestió estigui feta, o sigui que podeu permetre que només s'escriguin lletres o números, realitzar una validació del camp, o forçar l'entrada com a minúscules o majúscules. A Gambas, això es fa amb la instrucció STOP EVENT.

  • Els gestors d'esdeveniments del teclat i el ratolí no admet paràmetres. En el seu lloc usen membres static public de les classes del ratolí i del teclat. Per exemple:
    • Mouse.X i Mouse.Y per les coordenades del ratolí.

    • Mouse.Left per saber si el botó esquerre està premut.

    • Key.Code per obtenir el codi d'una tecla.

    • Key.Shift per saber si la tecla SHIFT està premuda.

    • ...i així anar fent.

  • A Gambas, la rutina Timer() retorna el nombre de segons transcorreguts des de que s'ha iniciat el programa. A VB, retorna el nombre de segons transcorreguts des de la mitjanit.

  • No feu servir el Form.Load. És un completament diferent de la instrucció Load de Visual Basic. A Gambas, és només un estàtic que crea la instància del formulari implícit.