Autoapprendimento del linguaggio MQL5 da zero - pagina 44

 
Vladimir Simakov:

Gli oggetti globali sono inizializzati con il costruttore predefinito. Per i tipi primitivi (nel nostro caso, tutti tranne le stringhe), è 0. Ma per la memoria (leggere le variabili) allocate sullo stack, non sono inizializzate. Ecco perché le variabili globali possono non essere inizializzate, ricordate che in questo caso saranno uguali a zero. Ma l'assenza di inizializzazione (allo stesso tempo, abituatevi ad evitare subito gli avvertimenti generati dal compilatore, a meno che non sappiate esattamente cosa state facendo) è un problema serio, perché leggere una variabile non inizializzata porta a un comportamento non definito. Per esempio, questo codice si comporta diversamente nelle build di rilascio e di debug e nessuno può garantire che quando si cambia la versione del compilatore o le impostazioni di ottimizzazione, anche il suo comportamento non cambierà:

Ciao, Vladimir, grazie per il tuo chiarimento.

Sinceramente, Vladimir.

 
MrBrooklin:

Peter, a proposito delle variabili globali, non ho ancora trovato nella letteratura che le variabili globali debbano essere predefinite. Avete un link alla fonte per migliorare la vostra conoscenza in materia? Il riferimento MQL5 non contiene un riferimento esplicito all'inizializzazione:

Il tipo bool è progettato per memorizzare i valori booleani true o false, la cui rappresentazione numerica è rispettivamente 1 o 0 .

Esempi:

bool a =true;
bool b =false;
bool c =1;

La rappresentazione interna è un numero intero a 1 byte. Va notato che nelle espressioni booleane, è accettabile usare altri tipi interi o reali o espressioni di questi tipi al posto di bool, e il compilatore non genererà un errore. In questo caso, zero sarà interpretato come falso e tutti gli altri valori come vero.

Saluti, Vladimir.
È auspicabile inizializzare esplicitamente le variabili globali, almeno per abituarsi a farlo. Di nuovo, in mql4 non si possono inizializzare affatto le variabili e gli array nelle funzioni, ma in mql5 bisogna farlo, altrimenti le variabili avranno "spazzatura".
 

L'ho aggiunto al codice dello script:

//--- Зададим глобальные переменные:
//переменная enough_time (достаточно времени), где bool - логическое значение: истина (true) или ложь (false)
bool enough_time=false;
//переменная enough_patience (достаточно терпения), где bool - логическое значение: истина (true) или ложь (false)
bool enough_patience=false;

Ora, nei commenti dello script, in qualche modo è stato chiaramente spiegato a uno studente di scuola di programmazione di primo grado perché il valore predefinito per il tipo di dati bool dovrebbe essere esattamente falso e non vero.

Saluti, Vladimir.

 
MrBrooklin:

L'ho aggiunto al codice dello script:

Con rispetto, Vladimir.

Non ho altro di cui lamentarmi. :)
 
MrBrooklin:

Continuo a studiare il linguaggio di programmazione MQL5 e sto pubblicando il codice di uno script, che è la continuazione di un compito dei partecipanti a questo thread. Lo script è stato testato in tutte le modalità. Non sono stati rilevati problemi. Applicato il numero minimo di parametri di input con cui iniziare. Il codice dello script è scritto in inglese, i commenti al codice sono in russo, per facilitare il processo di apprendimento. Come ho promesso prima, ho cercato di descrivere lo script in un modo comprensibile per un allievo della 1a forma di scuola di programmazione.

Cordiali saluti, Vladimir.

Vladimir, non dovresti scrivere così. Non cortocircuitare il lavoro delle funzioni su variabili esterne. L'unica eccezione per voi finora è prendere valori da variabili di input.
 
Vasiliy Sokolov:
Vladimir, non dovresti scrivere così. Non bloccare le funzioni nelle variabili esterne. L 'unica eccezione per voi finora è prendere valori da variabili di input.

Ciao Vasily! Ad essere onesti, non ho capito bene il significato di ciò che è in grassetto. Per favore, spieghi cosa intendeva dire.

Sinceramente, Vladimir.

 
MrBrooklin:

Ciao Vasily! Onestamente, non ho capito bene il significato di ciò che era scritto in grassetto. Per favore, spieghi cosa intendeva dire.

Sinceramente, Vladimir.

Non usate variabili globali. Scriverò in seguito perché non dovrebbero essere usati.
 
Vasiliy Sokolov:
Non usate variabili globali. Il motivo per cui non dovreste usarli lo scriverò più tardi.

C'è un buon aneddoto su questo:

- Domanda: qual è il tipo migliore per una variabile globale in c++?

- Risposta: //

 
Vasiliy Sokolov:
Non usate variabili globali. Scriverò più tardi perché non dovrebbero essere usati.

Ora capisco. Grazie, aspetto di sapere perché non si possono usare le variabili globali.

Saluti, Vladimir.

 
In questa fase, fino al passaggio alla programmazione OOP, l'uso delle variabili globali è pienamente giustificato e non c'è motivo di abbandonarle. Sono convenienti e facili da usare in qualsiasi punto del programma. Perché non dovrebbero essere usati? Imho.
Motivazione: