Разлики во однос на Visual Basic
Иако не постои намера
Gambas да биде клон на Microsoft Visual Basic, тој сепак е BASIC и затоа постојат многу сличности помеѓу двата јазика и многу паралелни карактеристики.
Веројатно постојат повеќе сличности отколку разлики, но сепак не можете едноставно да го прекопирате вашиот VB проект и да очекувате дека ќе се компајлира под
Gambas.
Симболот

што повремено се јавува на страниците од оваа документација укажува дека се работи за забелешки за тоа како особината или функционалноста што се опишува на страницата се разликува од истата во VB и ова служи да им помогне на програмерите кои преминуваат на
Gambas од VB.
Разлики што не се јазично специфични
- VB го приложува изворниот код на класата за секој ../../def/објект што е форма во иста датотека со дефиницијата на формата. Gambas ги држи одвоено, во .form .class] датотеки.
- Датотечни наставки на Gambas:
|
Тип на датотека
|
Visual Basic
|
Gambas
|
|
Датотека со дефиниција на проект
|
.vbp
|
.project (само .project, еден по директориум)
|
|
Модул
|
.bas
|
.module
|
|
Датотека со класа
|
.cls
|
.Класа
|
|
Датотека со дефиниција на форма
|
.frm
|
.form
|
|
Датотека со бинарни ресурси
|
.frx
|
Секоја датотека што се наоѓа во директориумот на проектот.
|
- Gambas се дефинирани како директориуми со кои содржат .project датотека, како и сите останати датотеки во односниот директориум. VB може да има повеќе проектни датотеки во еден и може да има повеќе од една иста датотека со изворен код од различни директориуми во различни проекти, што има свои предности и мани.
- Мерките на екранот во VB се изразуваат во „twips“-ови, т.е. единици од 1/1440 инчи; во Gambas тие се изразуваат во реални пиксели.
- Form контролите во Gambas се предодредени како приватни. Ова можете да го смените преку dijalogot за поставувања на проектот сo чекирање на опцијата Направи ги формите јавни.
- Функциите за конверзија Str$, Val, CStr... се однесуваат поинаку. На пример, Str$ и Val во Gambas користат поставувања за локализација, а во Visual Basic не користат. За повеќе детали, прочитајте ја документацијата. Забележете дека поведението на Gambas има повеќе логика. :-)
Visual Basic може, Gambas не може:
- Во Gambas не можете да го менувате кодот во режимот на прекин (при отстранување бубачки); прво треба да го откажете извршувањето на програмата.
- Во Gambas, основните податочни типови (integer, string итн.) до процедурите и функциите се проследуваат по вредност. За разлика од Visual Basic, не можат да се проследат по референца. Забележете дека VB ги проследува параметрите по референца ако не го користите клучниот збор ByVal, па внимавајте кога префрлувате VB во Gambas. Исто така, содржината на податочните типови што се објекти (низи, колекции, објекти) во обата јазика секогаш се проследуваат по референца!
 |
Во новата развојна верзија на Gambas сега е можно да се проследуваат параметри и по референца.
|
- Во Gambas не постои променлива што е глобална на ниво на проектот. За ова да се заобиколи, можете да направите класа со име Global при што ги декларирате вашите глобални променливи како јавни статички променливи на оваа класа, а потоа достапувате до нив од проектот со механизмот Global.imenapromenliva. Тоа сѐ уште е лоша програмерска пракса, ама барем можете да ги препознаете глобалните променливи кога ги користите. ;)
- Освен доколку во VB модулот не вклучите опција Option Explicit, не морате да ги декларирате променливите пред да ги употребите. Gambas се однесува како секогаш да е декларирано Option Explicit, што дава многу подобар код по цена на малку повеќе труд.
- Во Gambas не постои директен еквивалент на својството Index на VB контролите што се форми. Низи од кодови можете да креирате без проблем, но тоа морате да го направите од код. Моментално нема начин тоа да се прави графички. Затоа, кога ќе копирате контрола и ќе ја вметнете на формата од која сте ја зеле, Gambas, наместо да ве праша дали да направи низа од контроли, автоматски ја преименува копираната контрола со соодветно име.
- Моментално во Gambas не може да се прават транспарентни лабели; заднинската боја секогаш е непроѕирна.
 |
Во развојната верзија ова е можно.
|
- Настанот MouseMove во Gambas се објавува само ако има притиснато копче на глувчето. Исклучок е контролата DrawingArea, што има својство Tracking и овозможува добивање настани за поместување на глувчето, иако не е притиснато копче.
- Во VB можете да надоврзувате стрингови со операторот +. Бидејќи знакот + во Gambas се користи само за математичко собирање, за надоврзување стрингови треба да го користите знакот &.
- Двете точки : не дејствуваат како сепаратор на програмската линија. Наместо тоа, морате да почнете нова линија.
- Командата print во VB 3.0 не дава Linefeed (нова линија). Ако ја користите за печатење на некој текст со printer.print, текстот ќе се изгуби. Print командата во Gambas работи како што треба. Текстот не се губи.
- Во VB можете да користите Mid$() како инструкција за да отсечете потстринг и да додадете некој друг. Во Gambas не можете да ја користите за замена на потстринг. На пример, во VB: MyString = „The dog jumps“: Mid$(MyString, 5, 3) = „fox“ results in MyString = „The fox jumps“. Ова, но Gambas нема да помине. Морате да постапите вака: MyString = Left$(MyString, 4) & „fox“ & Mid$(MyString, 8).
 |
Во развојната верзија Mid$() овозможува и вакво поведение.
|
- Не-ASCII карактерите што можат да се користат во идентификаторите на VB нема да бидат прифатени во Gambas.
- За среќа, во Gambas не можете да користите GOTO за пресретнување грешки! Наместо тоа, користете CATCH, FINALLY или TRY.
- ENUM не може да се користи за набројување на целобројни константи. Наместо тоа, секој елемент на ENUM морате да го дефинирате како константа.
Example
CONST ADDITION AS Integer = 1
CONST SUBSTRACTION AS Integer = 2
Gambas може, Visual Basic не може
- За разлика од VB, не е потребно да се компајлира и поддршка за графички кориснички интерфејс (GUI), ако сакате да пишувате апликација што работи само од командната линија. Само деселектирајте ја gb.qt компонентата во поставувањата на проектот и задолжително дефинирајте процедура Main().
- Наместо клучниот збор WITH EVENTS, морате да дадете „настанско име“ на објектите што објавуваат настани. Видете ја документацијата на NEW за повеќе информации.
- Gambas има концепт на контролни групи, што ви овозможуваат да ракувате со настани од различни контроли во една потпрограма-ракувач со настан. Ова ја намалува редундантноста на кодот и може да се користи за многу цели за кои се користат индексите на контролите на VB, како и за некои работи што VB не ги може.
- Додека VB практично оневозможува синхронизирано извршување на програмата и примање на неговиот излез без познавање на API повивите (командната лушпа само ја активира програмата во заднина), Gambas со помош на SHELL и EXEC, ви овозможува да ги контролирате процесите што ги стартувате со помош на класата Process, а дури можете и да читате и пишувате во процесите, со што лесно ја надополнувате функционалноста со помошни апликации. Ова во огромна мерка го олеснува пишувањето на Gambas визуелните интерфејси за контрола на апликации што работат од командната линија.
- Сето споменато може да се прави и со Unix уредите и со специјалните датотеки, како што се сериските и паралелните портови. На пример, со помош на =/proc датотечниот систем може да се напише RAID монитор, а со употреба на именуваните цевки можат да се собираат информации од повеќекратни канали и заднински програми пишувани во други програмски јазици.
- За да направите прозорец со неправилна форма, доволно е во својствата ME.Picture и ME.Mask Својство на тековниот прозорец да се референцира слика со проѕирни површини. VB бара повици до API и повеќе работа.
- Контролите и менијата можат да се создаваат динамички, преку инстанцирање со инструкцијата NEW.
- Gambas формите можат да вгнездуваат една во друга: кога ќе ја инстанцирате формата што ќе се вгнездува, наведете ја другата форма како родител.
- Контролите имаат настани за влез и излез (Enter и Leave), што дава информации за влегувањето и излегувањето на глувчето од формата. Нив можете лесно да ги користите за имплементација на настани поврзани со поминувањето на глувчето.
- Можете да читате податоци од бинарни датотеки и автоматски да управувате со подреденоста („крајништвото“) на нивниот формат, преку својството ByteOrder на класата Stream.
- Gambas интерно користи UTF-8 карактер сет, што овозможува целосна интернационализација на проектите.
- Gambas е слободен софтвер чија работна околина е напишана во самиот Gambas, што ви овозможува да ја приспособувате во голема мера, употребувајќи го вашето познавање на програмскиот јазик BASIC.
И уште многу други работи... Слободно допишете ги ако сакате! :-)
Иста функционалност, различна терминологија
- End Sub/End Function: види END.
- Exit Sub/Exit Function: види RETURN. Исто така, наместо доделување вредност на променлива со исто име, како и функцијата и излегување од функцијата, саканата вредност што ја враќа функцијата можете едноставно да ја додадете како параметар на наредбата RETURN.
- End (end program): види QUIT.
- Низите користат средни наместо мали загради. Затоа, користете DIM x[9] AS Float наместо DIM x(9) AS Float.
- Низите немаат дополнителен елемент за индексирање како 1..n, индексот секогаш мора да биде во опсегот 0..(n-1).
- On Error Goto: види TRY, CATCH и FINALLY.
- Msgbox: види Message. Обично би употребиле Message.Info.
- Стандардната InputBox функција на VB (исфрлува дијалог што прашува за вредност што се враќа на програмата што ја повикал функцијата) сѐ уште нема директен еквивалент во Gambas, но видете ја InputBox страницата за класата што можете да ја преземете и да ја вклучите во вашите проекти за истата функција (и повеќе). Развојната верзија има InputBox метод.
- DoEvents: види WAIT. WAIT, исто така, ја заменува често користената функција „sleep“ од Windows API.
- Вметнување на двојни наводници во стрингови: Наместо два последователни двојни наводници како во VB, користете ја обратната коса црта како заштитен карактер како во C или Perl (").
- VScrollBar, HScrollBar: Gambas' ScrollBar ги заменува обете контроли. Тој автоматски открива дали сакате вертикален или хоризонтален лизгач за поместување врз основа на димензиите на контролата: направете ја широка и имате хоризонтален лизгач, направете ја висока и ќе добиете вертикален лизгач.
- Дијалози за отворање и зачувување: Можете да ги користите Qt или подобрените KDE дијалозите наместо обичните дијалози на Windows. Некои од својствата се нарекуваат со подруги имиња, а филтрите се специфицирани со низа од стрингови, на пример: [ „Filter 1 (*.foo)“ , „Filter 2 (*.bar)“ ]. Синтаксата е сменета во развојната верзија.
- Валидација на внесениот текст: Во VB, некои настани имаат параметар за откажување Cancel што можете да го поставите за да ја спречите нормалната обработка на настанот по завршувањето на ракувачот со настанот, така што можете да дозволите внесување само на букви и бројки, валидација на полињата за внес на податоци или да дозволите внесување само на големи букви. Во Gambas, ова се прави со помош на наредбата STOP EVENT.
- Ракувачите со настаните од тастатурата и глувчето не бараат параметри. Наместо тоа, тие ги користат јавните статички членови на класите Mouse и Key. На пример:
- Mouse.X и Mouse.Y за координатите на глувчето.
- Mouse.Left за испитување дали е притиснато левото копче.
- Key.Code за испитување на кодот на тастерот.
- Key.Shift за испитување дали е притиснат тастерот SHIFT.
- ...и така натаму.
- Во Gambas, рутината Timer го дава бројот на изминати секунди од почетокот на програмата. Во VB, таа го дава бројот на изминати секунди од полноќта.
- Немојте да го користите методот Form.Load. Тоа е целосно различен метод од инструкцијата Load на Visual Basic. Во Gambas, тоа е само статички метод што создава имплицитна инстанца на форма.