Diferenças do Visual Basic

Mesmo que Gambas não pretenda ser um clone do Microsoft Visual Basic, ainda é BASIC e existem muitas similaridades entre as duas linguagens, e muitas relações um-para-um entre características.

Provavelmente existem mais similaridades que diferenças, mas você não pode simplesmente copiar seus projetos VB e esperar que eles compilar sobre o Gambas.

O símbolo %vb% vai aparecer algumas vezes nas páginas desta documentação para indicar que existem notas disponíveis sobre como usar a característica descrita na página difere de executar a mesma tarefa em VB, para ajudar os programadores que podem estar migrando desta linguagem para o Gambas.

Diferenças não específicas da linguagem

  • O VB embute o código da classe para cada objeto do form em um mesmo arquivo como definição de form. O Gambas os mantém separados, em um arquivo .form e um arquivo .file.

  • Extensões de arquivo:

Tipo de arquivo Visual Basic Gambas
Arquivo de definição de projeto .vbp .project (somente .project, um por diretório)
Módulo .bas .module
Arquivo Class .cls .class
Arquivo de definição de Form .frm .form
Arquivo binário de recursos .frx Qualquer outro arquivo armazenado no diretório do projeto.

  • Projetos Gambas são definidos como diretório com um arquivo .project dentro, e todos os arquivos neste diretório. O VB pode ter múltiplos arquivos de projetos em cada diretório e pode "puxar" o mesmo arquivo fonte de um diretório diferente em diversos projetos, o que tem seus benefícios e suas desvantagens.

  • No VB, as medidas da tela são feitas em "twips", unidade de 1/1440 de uma polegada; no Gambas, elas são em pixels reais.

  • Controles Form nos programas Gambas são privados por padrão. Você pode mudar isso indo para a janela de Propriedades de Projeto e checando o checkbox Make form controls public (Tornar controles form públicos).

  • Conversões Str$, Val, CStr... funcionam de forma diferente. Por exemplo, Str$ e Val usam as configurações de localização no Gambas, enquanto que elas não são assim no Visual Basic. Leia a documentação cuidadosamente para mais detalhes. Note que o comportamento do Gambas é mais lógico :-).

O Visual Basic tem, o Gambas não

  • Você não pode editar o código no modo Break no Gambas; você precisa terminar a execução do programa antes.

  • No Gambas, tipos simples de dados (integer, string, etc.) são passados por valor para procedimentos e funções. Eles não podem ser passados por referência como no Visual Basic. Note que o VB passa parâmetros por referência se você não usar a palavra-chave ByVal, então seja cuidadoso quando tentar portar um projeto VB. Além disso, o conteúdo dos tipos de dados objeto (tipos array, coleções, objetos) são sempre passados por referência em ambas as linguagens!

  • Não existe algo como uma variável de escopo global do projeto no Gambas. Como forma de contornar isso, considere criar uma classe chamada Global e declarar suas variáveis globais como variáveis static public nesta classe, e então referenciando-as como Global.nomedavariavel no seu projeto. Ainda é uma prática ruim de programação mas ao menos elas estarão identificadas como variáveis globais onde quer que você as utilize.

  • A não ser que você inclua Option Explicit em um módulo VB, você não precisa declarar variáveis antes de usá-las. O Gambas comporta-se como se Option Explicit sempre estivesse presente, o que gera um código muito melhor com o custo de um pouco mais de trabalho.

  • Não há equivalente direto no Gambas à propriedade index dos controles de form do VB. Você pode facilmente criar arrays de controles, mas você tem que fazer isso via código. Atualmente não tem como fazer isso graficamente. Assim, quando você copia um controle e cola ele de volta no form de onde ele vem, ao invés de perguntar se você quer criar um array do controle ele automaticamente renomeia o controle copiado com um nome apropriado.

  • Atualmente você não pode criar labels transparentes no Gambas; o fundo é sempre opaco.

  • O evento MouseMove só ocorre quando um botão do mouse é "despressionado" no Gambas. A exceção é o controle DrawingArea, que tem a propriedade Tracking que permite obter eventos do mouse mesmo se nenhum botão do mouse é pressionado.

  • No VB você pode unir duas strings com o símbolo +. Como o sinal + já é usado com adição matemática no Gambas, ao invés disso você deve usar o &, quando quiser unir uma string a outra.

  • O dois-pontos não funciona para separar seu código. Ao invés disso, você deve usar uma nova linha.

  • O comando print no VB 3.0 não gera um Linefeed. Se você usa ele para imprimir algum texto com printer.print, então o texto fica perdido. O comando Print no Gambas coloca tudo em uma linha. Nada é perdido.

  • No VB você pode usar Mid$() como uma instrução para cortar uma substring e colocar outra. No Gambas, você não pode usá-la para atribuir uma nova substring à ela. Por exemplo, no VB: MyString = "The dog jumps": Mid$(MyString, 5, 3) = "fox" resulta em Mystring = "The fox jumps". Isso não funciona no Gambas. Você deve fazer algo como: Mystring = Left$(MyString, 4) & "fox" & Mid$(MyString, 8).

  • Caracteres não-ASCII que podem ser legais para usar em identificadores no código VB, não são aceitos no Gambas.

  • Felizmente, no Gambas você não pode usar GOTO para emboscar erros! Ao invés disso, use CATCH, FINALLY ou TRY.

  • O ENUM não pode ser usado para enumerar constantes inteiras. Ao invés disso você deve definir cada elemento ENUM como uma constante.

Examples

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

O Gambas tem, o Visual Basic não

  • Diferente do VB, você não precisa compilar no suporte GUI se você quiser escrever uma aplicação Gambas de linha de comando. Basta des-selecionar o componente gb.qt4 nas Propriedades do Projeto e estar certo de definir uma sub Main().

  • Ao invés da palavra-chave WITH EVENTS, você deve providenciar um "nome de evento" aos objetos que elevam eventos. Veja a documentação de NEW para mais informações.

  • O Gambas tem o conceito de grupos de controles, o que permite que você trate eventos com qualquer número de diferentes controles com uma única subrotina de tratamento. Isso reduz códigos redundantes e pode ser usado para muitas coisas que os controles index VB podem fazer, e algumas outras coisa que o VB não consegue.

  • Enquanto que o VB faz com que seja impossível rodar um programa de forma síncrona e receber sua saída sem conhecer como fazer chamadas API (o Shell meramente lança o programa em background), o Gambas permite que você faça isso usando SHELL e EXEC, controla os processos que você inicia usando a classe Process, e até mesmo lê e escreve neles, permitindo que você adicione facilmente funcionalidades com aplicações auxiliares. Isso torna incrivelmente fácil se escrever front-ends Gambas para quase qualquer procedimento de linha de comando.

  • Você pode fazer tudo daquilo citado acima com dispositivos Unix e arquivos especiais também, como as portas serial e paralela. Use o sistema de arquivos /proc para escrever um monitor RAID, por exemplo, ou use pipes nomeados para conseguir múltiplos canais de informação de um programa back-end em qualquer outra linguagem.

  • Para criar uma janela com formato diferente basta setar as propriedades ME.Picture e ME.Mask da janela atual para uma figura que tenha áreas tranparentes. O VB requer chamadas API e muito mais trabalho.

  • Você pode criar controles e menus dinamicamente, basta instanciá-los com a instrução new.

  • Você pode embutir um form Gambas dentro de outro: quando você instancia o primeiro, especifique o segundo como pai.

  • Controles possuem eventos Enter e Leave, o que permite que você saiba quanto o ponteiro do mouse entra em um controle e quando ele sai. Você pode usá-los para implementar facilmente efeitos mouse-over.

  • Você pode ler dados em arquivos binários e automaticamente gerenciar o "endianness" de seu formato, usando a propriedade ByteOrder da classe Stream.

  • O Gambas usa conjunto de caracteres UTF-8 internamente, então projetos são completamente e facimlente internacionalizados.

  • O Gambas é software livre cujo ambiente de desenvolvimento é escrito nele mesmo, permitindo que você o customize a um alto grau usando somente seu conjunto de habilidades BASIC.

E muitas outras coisas... Basta adicioná-las como quiser! :-)

Mesma Funcionalidade, Terminologia Diferente

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

  • Exit Sub=/=Exit Function: veja RETURN. Além disso, ao invés de setar uma variável com o mesmo nome da função e aí então sair da função, você pode simplesmente incluir o valor desejado de retorno como um parâmetro para RETURN.

  • End (finaliza programa): veja QUIT.

  • Arrays usam colchetes ao invés de parênteses. Então use DIM x[9] AS ao invés de DIM x(9) AS Float

  • Arrays não têm o elemento extra para indexar como 1..n, o índice deve ser sempre 0..(n-1)

  • On Error Goto: veja TRY, CATCH e FINALLY.

  • Msgbox: veja Message. Normalmente voê vai querer Message.info.

  • A função padrão do VB InputBox (abre uma janela pedindo um valor que é retornado ao programa) não tem equivalente no Gambas ainda, mas veja a página do InputBox para uma classe que você pode baixar e incluir nos seus projetos para servir o mesmo propósito (e mais.)

  • DoEvents: veja WAIT. WAIT também substitui a função API "sleep" do Windows.

  • Inserindo Aspas Duplas em Strings: Ao invés de usar duas aspas duplas consecutivas como no VB, use a barra invertida como um caracter de escape como no C ou Perl (").

  • VScrollBar, HScrollBar: O ScrollBar do Gambas substitui as duas. Ele automaticamente entende se você quer barra de rolagem vertical ou horizontal baseado nas dimensões do controle: faça-o largo, e terá uma barra de rolagem horizontal; faça-o alto, e terá uma vertical.

  • Caixas se diálogo de Abrir e Salvar: Você pode usar tanto o qt ou caixas de diálogo aprimorados do KDE no lugar do common dialog do windows. Algumas das propriedades têm nome diferente e filtros são especificados com um array string, como este: [ "Filter 1 (*.foo)" , "Filter 2 (*.bar)" ]

  • Validando entrada de texto: No VB, certos eventos têm um parâmetro Cancel que você pode setar para previnir o evento de ser tratado normalmente após seu tratador terminar, como por exemplo se você quer permitir que somente letras ou números sejam digitadas, executar validação de campos, ou forçar a entrada de somente maiúsculas ou minúsculas. No Gambas, isso é feito usando a instrução STOP EVENT.

  • Tratadores de evento de teclado e mouse não usam parâmetros. Ao inves disso eles usam membros static public as classes Mouse e Key. Por exemplo:
    • Mouse.X e Mouse.Y para as coordenadas do mouse.

    • Mouse.Left para saber se o botão esquerdo está pressionado.

    • Key.Code para pegar o código da chave.

    • Key.Shift para saber se a tecla SHIFT está pressionada.

    • ...e assim por diante.

  • NO Gambas, a rotina Timer() retorna o número de segundos passados desde o início do programa. No VB, ele retorna o número de segundos desde a meia-noite.

  • Não use o método Form.Load. Ele é um método completamente diferente da isntrução Load do Visual Basic. No Gambas, é somente um método estático que cria a instância implícita do form.