Variables

Déclarer des Variables

Les variables doivent être déclarées avec d'être utilisées. Les noms uniques sont utiliser pour identifier les variables. Pour déclarer une variable, vous devez spécifier son type et un nom unique. La déclaratio d'une variable n'est pas une opération.

Les types simples sont :

  • char, short, int, long, uchar, ushort, uint, ulong — entiers ;
  • color — entier représentant une couleur RGB ;
  • datetime — date et heure, un entier non signé contenant le nombre de secondes depuis le 1er janvier 1970, 00h00 ;
  • bool — les valeurs booléennes true et false ;
  • double — nombres à virgule flottante à double précision ;
  • float — nombres à virgule flottante à simple précision ;
  • string — chaînes de caractères.

Exemples :

string szInfoBox;
int    nOrders;
double dSymbolPrice;
bool   bLog;
datetime tBegin_Data   = D'2004.01.01 00:00';
color    cModify_Color = C'0x44,0xB9,0xE6';

Types complexes ou composés :

Les structures sont des types de données composés, construits en utilisant d'autres types.

struct MyTime
  {
   int hour;    // 0-23
   int minute;  // 0-59
   int second;  // 0-59
  };
...
MyTime strTime; // Variable du type de la structure MyTime déclarée précédemment

Vous ne pouvez pas déclarer de variables du type de la structure tant que vous n'avez pas déclaré la structure.

Tableaux

Un tableau est une suite indexée de données de même type :

int    a[50];       // Tableau à 1 dimension de 50 entiers.
double m[7][50];    // Tableau à 2 dimensions de 7 tableaux,
                    // chacun d'eux ayant 50 nombres.
MyTime t[100];      // Tableau content 100 éléments de type MyTime

L'indice d'un tableau ne peut être qu'un entier. Il n'est pas possible d'avoir plus de 4 dimensions dans un tableau. L'indexation des éléments d'un tableau commence à 0. Le dernier élément d'un tableau à 1 dimension est à l'indice (taille du tableau)-1. Cela signifie que l'appel au dernier élément d'un tableau t fait de 50 entiers sera t[49]. C'est identique pour les tableaux à plusieurs dimensions : une dimension est indexée de 0 à la taille de la dimension -1. Le dernier élément d'un tableau à 2 dimension de l'exemple appraîtra sous la forme m[6][49].

Les tableaux statiques ne peuvent pas être représentés comme des séries temporelles (timeseries), c'est à dire que la fonction ArraySetAsSeries(), qui définit l'accès aux éléments du tableau de la fin vers le début, ne peut pas être appliquée. Si vous souhaitez donner accès à un tableau de la même façon que dans les timeseries, utilisez l'objet tableau dynamique.

Si une tentative d'accéder en dehors du tableau est faite, le système génèrera une erreur critique et le programme sera stoppé.

Méthodes intégrées pour travailler avec des tableaux #

Les fonctions de la section Fonctions sur les Tableaux peuvent être utilisées pour manipuler les tableaux, tout comme les fonctions intégrées :

Méthode

Analogue à

Description

void array.Fill(const scalar value, const int start_pos=0, const int count=-1);

ArrayFill, ArrayInitialize

Remplit le tableau avec la valeur spécifiée

void array.Free();

ArrayFree

Libère le buffer du tableau et définit la taille de la dimension zéro sur 0 (zéro)

int array.Resize(const int range0_size, const int reserve);

int array.Resize(const int range_sizes[], const int reserve);

ArrayResize

Définit la nouvelle taille de la première dimension du tableau

int array.Print();

ArrayPrint

Ecrit les valeurs du tableau de type simple dans le journal

int array.Size(const int range=-1);

ArraySize, ArrayRange

Renvoie le nombre d'éléments dans le tableau entier (range=-1) ou dans la dimension de tableau spécifiée

bool array.IsDynamic();

ArrayIsDynamic

Vérifie si le tableau est dynamique

bool array.IsIndicatorBuffer();

 

Vérifie si le tableau est un buffer d'indicateur

bool array.IsSeries();

ArrayIsSeries

Vérifie si le tableau est une timeserie (série temporelle)

bool array.AsSeries();

ArrayGetAsSeries

Vérifie la direction d'indexation du tableau

bool array.AsSeries(const bool as_series);

ArraySetAsSeries

Définit le sens d'indexation dans le tableau

int array.Copy(const src_array[], const int dst_start, const int src_start, const int cnt);

ArrayCopy

Copie les valeurs du tableau dans un autre tableau

int array.Compare(const src_array[], const int dst_start, const int src_start, const int cnt);

ArrayCompare

Renvoie le résultat de la comparaison de deux tableaux de types simples ou de structures personnalisées

int array.Insert(const src_array[], const int dst_start, const int src_start, const int cnt);

ArrayInsert

Insère le nombre spécifié d'éléments du tableau source dans le tableau destination à partir de l'index spécifié

int array.Remove(const int start_pos, const int count);

ArrayRemove

Supprime le nombre spécifié d'éléments du tableau en commençant à l'index spécifié

int array.Reverse(const int start_pos, const int count);

ArrayReverse

Inverse le nombre spécifié d'éléments dans le tableau en commençant à l'index spécifié

bool array.Swap(array& arr[]);

ArraySwap

Echange le contenu du tableau avec le contenu d'un autre tableau dynamique de même type

void array.Sort(sort_function);

ArraySort

Trie les tableaux numériques par la première dimension

int array.Search(scalar value, search_function);

ArrayBsearch

Renvoie l'indice du premier élément détecté dans la première dimension du tableau

int array.Find((scalar value, search_function);

 

Effectue une recherche dans le tableau à l'aide de la fonction passée et renvoie l'index du premier élément détecté

array array.Select(scalar value, search_function);

 

Performs a search in the array using the passed function and returns the array with all detected elements

 

Spécificateurs d'Accès

Les spécificateurs d'accès définissent comment le compilateur peut accéder aux variables, aux membres des structures ou des classes.

Le spécificateur const déclare une variable comme constante et ne permet pas de changer cette pendant l'exécution. Une initialisation simple d'une variable est autorisée lors de sa déclaration.

Exemple :

int OnCalculate (const int rates_total,      // taille du tableau price[]
                 const int prev_calculated,  // nombre de barres gérées lors de l'appel précédent
                 const int begin,            // indice de début des données significatives
                 const double& price[]       // tableau à calculer
   );

Pour accéder aux membres des structures et des classes, utilisez les qualificateurs suivants :

  • public — permet un accès non restreint à la variable ou à la méthode de la classe
  • protected — permet l'accès depuis les méthodes de cette classe ainsi que depuis les méthodes des classes héritées publiquement. Tout autre accès est impossible ;
  • private — permet l'accès aux variables et aux méthodes de la classe seulement depuis les méthodes de la même classe.
  • virtual — ne s'applique qu'aux méthodes de classe (mais pas aux méthodes de structure) et indique au compilateur que cette méthode doit être placée dans la table des fonctions virtuelles de la classe.

Classes de Stockage

Il existe 3 types de classes de sotckage : static, input et extern. Ces modificateurs d'une classe de stockage indiquent explicitement au compilateur que les variables correspondantes sont distribuées dans une zone mémoire pré-allouée, qui est appelée la zone globale. En outre, ces modificateurs indiquent un traitement spécial aux données de la variable. Si une variable déclarée à un niveau global n'est pas statique, la mémoire de cette variable est allouée automatiquement sur la pile du programme. La libération de la mémoire allouée à un tableau non statique est également effectuée automatiquement lors de la sortie de la portée du bloc dans lequel le tableau est déclaré.

Voir aussi

Types de Données, Encapsulation et Extension des Types,Initialisation des Variables, Portée de Visibilité et Cycle de Vie des Variables, Créer et Supprimer des Objets, Membres Statiques d'une Class