Funzione che restituisce 2 risultati? - pagina 3

 
gordon:
Ecco una spiegazione semplificata -> https://www.mql5.com/en/forum/117210. Gli array sono sempre passati per riferimento in MQL4.

Sì, grazie. Ma come ho chiesto, questo implica che su altri linguaggi non lo sia? Se fosse l'unico modo per portarlo su usando MQ/MT4 o altri costrutti di linguaggio, allora presumo che non dovrebbero preoccuparsi di dichiararlo.

Credo che sto chiedendo i 'dettagli tecnici' come hai detto tu in quel post. Solo per curiosità, non per necessità.

Per quanto riguarda la sintassi, IL linguaggio MQL5 per la programmazione delle strategie di trading è molto simile al linguaggio di programmazione C++, tranne che per alcune caratteristiche:

  • niente aritmetica degli indirizzi;
  • nessun operatore goto;
  • non si può dichiarare un'enumerazione anonima
  • i costruttori di classi e strutture non possono avere parametri;
  • nessuna ereditarietà multipla.

In questo modo, posso insinuare che in C++ sarà vero il contrario... Grazie comunque, Gordon.

 
Matutin:

Mi dispiace, ma non è una risposta "tecnica" :) Potresti dire perché è meglio passare una variabile per riferimento invece di una variabile globale?

Molte ragioni che preferisco non ripetere, invece ti rimando a qui -> https://en.wikipedia.org/wiki/Global_variable e qui -> http://www.c2.com/cgi/wiki?GlobalVariablesAreBad (puoi cercare su Google per saperne di più... È un concetto ampiamente accettato e ci sono molte informazioni in rete).

 
cameofx:

[...] questo implica che su altre lingue non lo sia? [...]

Non implica nulla, ma nello specifico sia in C che in C++ anche gli array vengono passati per riferimento (tecnicamente viene passato un puntatore al primo elemento dell'array, quel puntatore viene passato per valore).
 
gordon:

Molte ragioni che preferisco non ripetere, invece ti rimando a qui -> https://en.wikipedia.org/wiki/Global_variable e qui -> https://www.mql5.com/go?link=http://www.c2.com/cgi/wiki?GlobalVariablesAreBad (puoi cercare su Google per saperne di più... È un concetto ampiamente accettato e ci sono molte informazioni in rete).


Molto interessante! Sfortunatamente, gli EA hanno bisogno di parametri, e a volte molti, quindi non possiamo evitarli e dobbiamo fare attenzione per tutte le ragioni menzionate in https://www.mql5.com/go?link=http://www.c2.com/cgi/wiki?GlobalVariablesAreBad

Sto usando le regole di denominazione per GlobalVariable: molto più facile da gestire ed evitare alcuni bug.

Grazie Gordon.

 
Matutin:

Molto interessante! Sfortunatamente, gli EA hanno bisogno di parametri, e a volte molto, quindi non possiamo evitarli [...]

Gli esterni sono effettivamente inevitabili. Anche se sono globali nell'ambito, non sono la stessa cosa delle variabili globali (da non confondere con le GV); in particolare - non è raccomandato cambiare il loro valore tramite il codice, quindi non dovrebbero essere usati per passare informazioni tra le funzioni comunque (vedi qui -> https://www.mql5.com/en/forum/123535).


Sto usando regole di denominazione per GlobalVariable: molto più facile da gestire ed evitare alcuni bug.

Questa discussione riguarda le variabili definite nell'ambito globale (dichiarate al di fuori della funzione speciale start(), init(), deinit()) e non le GV... Non mischiate le due cose.
 

Sono curioso: ci sono linguaggi di programmazione che hanno funzioni che restituiscono più risultati?

 

forse potreste ingannare una funzione nel restituire due valori combinandoli in modo da poterli disaccoppiare di nuovo nella funzione chiamante

qualcosa del genere

a = 10;

b = 20;

a = a*1000

c = a+b // 10020

return(c);

poi nella funzione chiamante

b = c%1000 // 20

a = c-b/1000 // 10

 
SDC:

forse potreste ingannare una funzione nel restituire due valori combinandoli in modo da poterli disaccoppiare di nuovo nella funzione chiamante

qualcosa del genere

[...]
Forse no.
 

Perché no?

 
SDC:

Perché no?

Perché risolvere un problema che non esiste? Perché reinventare la ruota? Perché inventare un codice poco chiaro che funzionerebbe solo in casi limitati?