Variabili

Dichiarazione delle variabili

Le variabili devono essere dichiarate prima di essere usate. Nomi unici vengono usati per identificare variabili. Per dichiarare una variabile, è necessario specificare il tipo ed il nome univoco. Dichiarazione di variabile non è un operatore.

Tipi semplici sono:

  • char, short, int, long, uchar, ushort, uint, ulong – integers;
  • color - numero intero che rappresenta il colore-RGB;
  • datetime - la data e l'ora, un numero intero senza segno che contiene il numero di secondi dall'ora 0 del 1 gennaio 1970;
  • bool - valori booleani true e false;
  • double - numero in virgola mobile a doppia-precisione;
  • float - numero in virgola mobile a precisione-singola;
  • string - stringhe di caratteri.

Esempi:

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

I tipi complessi o composti:

Le strutture sono tipi di dati composti, costruiti utilizzando altri tipi.

struct MyTime
  {
   int hour;    // 0-23
   int minute;  // 0-59
   int second;  // 0-59
  };
...
MyTime strTime; // Variabile della precedentemente dichiarata struttura MyTime

Non è possibile dichiarare variabili del tipo di struttura fino a che non si dichiarara la struttura.

Arrays

L' Array è la sequenza indicizzata di tipi di dato identici:

int    a[50];       // Array uni-dimensionale di 50 interi.
double m[7][50];    // Array bi-dimensionale di sette array,
                    // ciascuno composto da 50 numeri.
MyTime t[100];      // array contenente elementi come MyTime

Solo un numero intero può essere un indice di array. Non più di quattro dimensioni array sono ammesse. La numerazione degli elementi inizia con 0. L'ultimo elemento di una matrice uni-dimensionale ha il numero che è di 1 inferiore alla grandezza della matrice. Ciò significa che la chiamata per l'ultimo elemento di un array composto da 50 numeri interi apparirà come a[49]. La stessa cosa vale per array multidimensionali: Una dimensione è indicizzata da 0 fino alla grandezza della dimensione -1. L'ultimo elemento di un array bi-dimensionale dall'esempio apparirà come m[6] [49].

Array statici non possono essere rappresentati come timeseries, ad es. la funzione ArraySetAsSeries(), che definisce l'accesso ad elementi dell'array dalla fine all'inizio, non può essere applicata ad essi. Se si desidera fornire l'accesso ad un array così come nelle timeseries, utilizzare l'oggetto array dinamico.

Se vi è un tentativo di accesso di fuori del range dell'array, il sottosistema di esecuzione genererà un errore critico ed il programma verrà interrotto.

Metodi integrati per lavorare con gli array #

Le funzioni della sezione Funzioni con gli Array, così come i metodi integrati possono essere utilizzati per gestire gli array:

Metodo

Analogo

Descrizione

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

ArrayFill, ArrayInitialize

Riempie l'array con il valore specificato

void array.Free();

ArrayFree

Rilascia il buffer dell'array dinamico e imposta la dimensione zero a 0 (zero)

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

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

ArrayResize

Imposta una nuova grandezza nella prima dimensione dell'array

int array.Print();

ArrayPrint

Visualizza i valori di un array di tipo semplice nel journal

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

ArraySize, ArrayRange

Restituisce il numero di elementi dell'intero array (range=-1) o della dimensione dell'array specificata

bool array.IsDynamic();

ArrayIsDynamic

Verifica se l'array è dinamico

bool array.IsIndicatorBuffer();

 

Verifica se l'array è un buffer di un indicatore

bool array.IsSeries();

ArrayIsSeries

Verifica se l'array è una timeseries

bool array.AsSeries();

ArrayGetAsSeries

Controlla la direzione di indicizzazione dell'array

bool array.AsSeries(const bool as_series);

ArraySetAsSeries

Imposta la direzione di indicizzazione nell'array

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

ArrayCopy

Copia i valori dell'array in un altro array

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

ArrayCompare

Restituisce il risultato del confronto di due array di tipo semplice o di strutture personalizzate

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

ArrayInsert

Inserisce il numero specificato di elementi da un array sorgente a uno ricevente partendo da un indice specificato

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

ArrayRemove

Rimuove il numero specificato di elementi dall'array partendo dall'indice specificato

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

ArrayReverse

Inverte il numero specificato di elementi nell'array partendo dall'indice specificato

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

ArraySwap

Scambia il contenuto con un altro array dinamico dello stesso tipo

void array.Sort(sort_function);

ArraySort

Ordina gli array numerici in base alla prima dimensione

int array.Search(scalar value, search_function);

ArrayBsearch

Restituisce l'indice del primo elemento individuato nella prima dimensione dell'array

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

 

Esegue una ricerca nell'array utilizzando la funzione passata e restituisce l'indice del primo elemento rilevato

array array.Select(scalar value, search_function);

 

Esegue una ricerca nell'array utilizzando la funzione passata e restituisce l'array con tutti gli elementi rilevati

 

Specificatori di accesso

Specificatori di accesso definiscono come il compilatore può accedere a variabili, membri di strutture o classi.

Lo specificatore const dichiara una variabile come una costante, e non consente di modificare questa variabile durante l'esecuzione. E' consentita una singola inizializzazione di una variabile quando questa si dichiara.

Esempio:

int OnCalculate (const int rates_total,      // size of the price[] array
                 const int prev_calculated,  // barre gestite in una chiamata precedente
                 const int begin,            // da cui partono i dati significativi
                 const double& price[]       // dall'array per il calcolo
   );

Per accedere ai membri di strutture e classi utilizzare i seguenti qualificatori:

  • public - consente l'accesso illimitato alla variabile o al metodo della classe
  • protected - permette l'accesso da metodi di questa classe, come pure da metodi di classipubblicamente ereditate. Altro accesso è impossibile;
  • private - consente l'accesso a variabili e metodi della classe solo da metodi della classe stessa.
  • virtual - si applica solo ai metodi della classe (ma non ai metodi di strutture) e dice al compilatore che il metodo deve essere inserito nella tabella delle funzioni virtuali della classe.

Classi di memorizzazione

Ci sono tre classi di memorizzazione: static, input ed extern. Questi modificatori di una classe di memorizzazione indicano esplicitamente al compilatore che le variabili corrispondenti sono distribuite in un area di memoria pre-assegnata, che è chiamata il pool globale. Inoltre, questi modificatori indicano il trattamento speciale dei dati delle variabili. Se una variabile dichiarata a livello locale non è una static , la memoria per tale variabile viene assegnata automaticamente allo stack programma. La liberazione della memoria allocata per un array non-statico viene anche eseguita automaticamente quando si va oltre l'area di visibilità del blocco, in cui è dichiarato l'array.

Vedi anche

Tipi di dati, Incapsulamento ed estensibilità dei Tipi,Inizializzazione delle Variabili, Visibilità Campo di Applicazione e Durata delle Variabili, Creazione ed Eliminazione di Oggetti, Membri Statici di una Classe