Documentation de Gambas - /doc/diffvb

/doc/diffvb
Le page anglaise est plus récente.

# Différences avec Visual Basic

Bien que Gambas n'ait pas été conçu en tant que clone de Visual Basic, il s'agit quand même d'un BASIC et il existe beaucoup de similarités entre ces deux langages et beaucoup de correspondances entre leurs caractéristiques.

Il existe probablement plus de similarités que de différences. Néanmoins vous ne pouvez pas simplement copier vos projets VB en espérant qu'ils compilent sous Gambas.

Le symbole %vb% apparaît parfois sur une page de cette documentation, pour indiquer en quoi l’usage de cette caractéristique diffère de la même tâche en VB, pour aider les programmeurs de ce langage qui peuvent migrer vers Gambas.

## Différences non spécifiques au langage

- VB intègre le code de la classe de chaque objet dans le même fichier que la définition de formulaire. Gambas les garde séparément, dans un fichier `.form` et un fichier `.class`.

- Extensions des fichiers :

Type de fichier | Visual Basic | Gambas
--- | --- | ---
Fichier de Définition de Projet | .vbp | .project (juste .project, un seul par dossier)
Module | .bas | .module
Fichier de Class | .cls | .classe
Fichier définition de formulaire | .frm | .form
Fichiers binaires de ressources | .frx | Tout autre fichier stocké dans le dossier du projet.

- Les projets Gambas sont définis comme un dossier contenant un fichier .projet, ainsi que tous les fichiers de ce répertoire. VB peut avoir plusieurs fichiers projets dans un dossier et employer dans différents projets le même fichier source provenant d'un dossier différent, ce qui a ses avantages et ses inconvénients.

- Les mesures de l'écran en VB sont faites en "twips", unité qui représente 1/1440e me de pouce; Gambas utilise l'unité pixel.

- Les contrôles d'un formulaire en Gambas sont privés par défaut. Vous pouvez changer cela en allant dans la fenêtre dialog Propriétés du Projet pour cocher la case Rendre Les contrôles des formulaires publiques.

- Str$, Val, CStr... Ces fonctions de conversion se comportent différemment. Par exemple, Str$ et Val utilisent les paramètres de localisation de Gambas, alors que ce n'est pas le cas avec Visual Basic. Lisez attentivement la documentation pour plus de détails. Notez que le comportement de Gambas est plus logique :-).

## Fonctionnalités de Visual Basic que Gambas ne possède pas

- Vous ne pouvez pas éditer du code en mode Break avec Gambas; il faut d'abord arrêter l'exécution.

- Dans Gambas, les types de données simples (integer, string, etc.) sont passés aux procédures et fonctions par leur Valeur. Elles ne peuvent pas être passées par Référence comme dans Visual Basic. Notez que VB passe les paramètres par référence si vous n’utilisez pas le mot-clé ByVal, alors soyez prudent lorsque vous portez un projet VB. Par ailleurs, le contenu des types de données objet (tableaux, collections, objets) sont toujours passées par référence dans les deux langages!

Le passage des arguments par référence est maintenant possible dans la version en développement.

- Il n'y a pas de variable globale au niveau du projet en Gambas. Comme solution de rechange, envisagez la création d'une classe nommée Global et déclarez vos variables globales en tant que static public dans cette classe pour y faire ensuite référence dans votre projet avec `Global.NomDeVariable`. C'est une médiocre approche de programmation mais au moins ces variables seront identifiées comme globales chaque fois que vous les utiliserez ;)

- A moins d'inclure `Option Explicit` dans un module VB, il n’y a pas besoin de déclarer une variable pour pouvoir l’utiliser en VB. Gambas se comporte comme si `Option Explicit` était toujours activé, ce qui rend le code bien meilleur au détriment d'un petit peu plus de travail.

- La propriété Index des contrôles de formulaire VB n' a pas d'équivalent en Gambas. Vous pouvez facilement créer un tableau de contrôles, mais vous devez le faire dans le code. Il n'existe aucune façon de le faire de manière graphique. Par conséquent, quand vous copiez un contrôle et le recollez sur le formulaire d'où il provient, il est directement renommé avec un nom approprié plutôt que de vous demander si un groupe de contrôles doit être créé.

- Vous ne pouvez pas, actuellement, créer des étiquettes transparentes en Gambas; le fond est toujours opaque.

C’est maintenant possible dans la version en développement.

- Sous Gambas, l'évènement MouseMove n'intervient que lorsqu'un bouton de la souris est relâché. Seule exception: le contrôle DrawingArea , qui comporte une propriété de traçage (propriété Tracking) permettant d'obtenir l'évènement MouseMove même si aucun bouton de la souris n'a été pressé.

- En VB vous pourriez concaténer deux chaînes ensemble avec le symbole `+` . Parce que le signe `+` est utilisé pour l'addition mathématique en Gambas, vous devriez utiliser `&` à la place, quand vous voulez ajouter une chaîne à une autre.

- Le symbole deux points `:` ne marche pas pour séparer plusieurs instructions sur le même ligne de code. Vous devez utiliser une nouvelle ligne à la place.

- La commande Print de VB 3.0 n'insérait pas de nouvelle ligne. Si vous l'utilisiez pour afficher du texte avec printer.print, le texte était perdu. La commande Print en Gambas met tout en une ligne. Rien n'est perdu.

- En VB vous pouvez utiliser Mid$() comme instruction pour couper une sous-chaîne et en mettre une autre. En Gambas, vous ne pouvez pas l'utiliser pour assigner une nouvelle sous-chaîne. Par exemple en VB : `in VB` MyString = "Les chiens sautent" MID(MyString, 5, 6) = "lapins" PRINT MyString ---- Les lapins sautent

Cela ne fonctionne pas dans Gambas. Vous devez penser ainsi :

    'in Gmabas
    MyString = "Les chiens sautent"
    MyString = LEFT(MyString, 4) & "lapins" & MID(MyString, 10)
    PRINT MyString

    Les lapins sautent

Cette syntaxe Mid$() est maintenant possible dans la version en développement.

- Les caractères non-ASCII qui sont utilisables pour les identifiant en VB, ne sont pas acceptables en Gambas.

- En Gambas vous ne pouvez fort heureusement pas utiliser GOTO pour récupérer des erreurs! A la place, utilisez CATCH, FINALLY ou bien TRY.

- ENUM ne peut être utilisé pour énumérer des constantes entières. A la place, vous devez définir chaque élément ENUM comme une constante.

### Exemples

    CONST ADDITION AS Integer = 1
    CONST SOUSTRACTION AS Integer = 2

## Fonctionnalités de Gambas que Visual Basic n'a pas

- Contrairement à VB, vous n'êtes pas forcé de compiler avec le support GUI pour faire une application console. Il suffit de dé-sélectionner le composant gb.qt4 dans la boîte de dialogue des propriétés du projet, et s'assurer d'avoir défini une SUB Main() dans le code.

- Au lieu du mot clef `WITH EVENTS`, vous devez fournir un "nom d'événement" aux objets qui déclenchent des événements. Consultez la documentation sur le mot clef NEW pour de plus amples informations.

- Gambas implémente le concept de groupe de contrôles, qui vous permet de gérer des évènements pour n'importe quel nombre de contrôles différents, en une seule procédure. Ceci évite du code redondant et peut être utilisé pour faire tout ce que les contrôles indexés de VB permettent, en plus de choses que VB ne peut pas.

- Alors que VB interdit de lancer un programme de façon synchrone et de recevoir sa sortie sans apprendre les appels API (le Shell ne fait que lancer le programme en arrière-plan), Gambas vous permet d'utiliser SHELL et EXEC, de contrôler les processus que vous initiez avec la classe Process, et même d'y lire et écrire. Ceci rend extrêmement facile l'écriture d'interfaces Gambas pour pratiquement n'importe quelle application en ligne de commande.

- Vous pouvez faire tout ce qui est décrit ci-dessus avec les périphériques Unix et les descripteurs de fichiers spéciaux également, tels que les ports série ou parallèle. Utilisez le système de fichier `/proc` pour écrire un moniteur RAID, par exemple, ou employer des tubes nommés pour obtenir plusieurs sources d'information simultanées depuis un programme en arrière-plan écrit en n’importe quel autre langage.

- Pour faire une fenêtre de forme biscornue, définissez simplement les propriétés ME.Picture et ME.Mask de la fenêtre courante avec une image qui a des zones transparentes. VB requiert des appels d' APIS et un peu plus de travail.

- Vous pouvez créer des contrôles et des menus dynamiquement, en les instanciant avec l'instruction NEW .

- Vous pouvez intégrer un formulaire Gambas dans un autre : quand vous instanciez le premier, spécifiez le second comme parent.

- Les contrôles ont des évènements Entrer et Sortir, qui vous permettent de savoir quand le curseur de la souris entre dans un contrôle et quand il en sort. Vous pouvez les utiliser pour créer facilement des effets visuels lorsque le curseur de la souris traverse un contrôle.

- Vous pouvez lire des données dans un fichier binaire et gérer automatiquement l'ordre des octets (grand indien et petit indien) en utilisant la propriété ByteOrder de la classe Stream.

- Gambas utilise en interne le jeu de caractères UTF-8. Par conséquent vos projets sont intégralement ‘internationalisables’.

- Gambas est un logiciel libre dont l’environnement de développement est écrit lui-même en Gambas, ce qui vous permet de l'adapter à vos besoins dans une large mesure, en employant juste vos compétences en BASIC.

Gambas possède encore beaucoup de spécificités. N'hésitez-pas à en ajouter à votre guise! :-)

## Fonctionnalités identiques, mais terminologie différente

- `End Sub=/=End Function` : voir END.

- `Exit Sub=/=Exit Function` : voir RETURN. Plutôt que de définir une variable avec le même nom que la fonction et ensuite sortir de la fonction, vous spécifiez la valeur de retour voulue en tant que paramètre de RETURN.

- `End` (Terminer le programme): voir QUIT.

- Les tableaux utilisent des crochets au lieu des parenthèses. Alors employez `DIM x[9] AS` au lieu de `DIM x(9) AS Float`

- Les tableaux n’ont pas d’élément d’indexation supplémentaires, ils commencent toujours à zéro, jamais à un.

- `On Error Goto` : voir TRY, CATCH et FINALLY.

- `Msgbox` : voir Message. Normalement vous voudriez Message.info.

- La fonction par défaut de VB `InputBox` (affiche une fenêtre demandant de saisir une valeur qui est retournée au programme appelant) n'a pas encore d'équivalent direct en Gambas, mais regardez dans la page InputBox une classe que vous pouvez télécharger et inclure dans vos programmes dans le même dessein (et plus). La version en développement possède une Méthode InputBox.

- `DoEvents`: voir WAIT. Cette fonction remplace aussi la fonction fréquemment utilisée de l' API Windows "sleep".

- Insérer des guillemets dans des chaînes de caractères: plutôt que deux guillemets consécutifs comme en VB, utilisez le backslash comme en C ou en Perl (\").

- VScrollBar, HScrollBar: Le contrôle ScrollBar de Gambas remplace ces deux là. Il reconnaît automatiquement qu'une barre de défilement est verticale ou horizontale, selon les dimensions du contrôle: faites-le plus large que haut, vous obtenez une barre de défilement horizontale; faites-le plus haut que large, et vous en obtenez une verticale.

- Fenêtres Ouvrir et Enregistrer: Vous pouvez utiliser les fenêtres améliorées de qt ou KDE. Quelques propriétés sont nommées différemment et les filtres sont spécifiés avec un tableau de String, comme ceci: `[ "Filter 1 (*.foo)" , "Filter 2 (*.bar)" ]`. La syntaxe a changé dans la version en développement

- Valider une saisie de texte : en VB, certains évènements ont un paramètre Cancel qui permet d' éviter le traitement de l'évènement, pour saisir, par exemple, seulement des lettres ou des chiffres, valider un champ, ou alors forcer la saisie en majuscules ou en minuscules. Dans Gambas, ceci se fait avec l'instruction STOP EVENT.

- Les évènements du clavier et de la souris (Mouse) ne prennent aucun argument. A la place ils utilisent des membres publics statiques des classes Mouse et Key. Par exemple:

  - Mouse.X et Mouse.Y pour les coordonnées de la souris.

  - Mouse.Left pour savoir si le bouton gauche est pressé.

  - Key.Code pour obtenir le code d'une touche appuyée.

  - Key.Shift pour savoir si la touche SHIFT est pressée.

  - ...et ainsi de suite.

- En Gambas, la routine Timer() retourne le nombre de secondes écoulées depuis que le programme a démarré. En VB, elle retourne le nombre de secondes écoulées depuis minuit.

- N'utilisez pas la méthode Form. C'est une méthode totalement différente par rapport à l'instruction Load de Visual Basic. Dans Gambas, c'est seulement une méthode statique qui crée une instance implicite du formulaire.