Un nuovo arrivato chiede! - pagina 26

 
Alexander Bereznyak:

queste sono le tue parole, non ci sono avvertimenti, ma ci sono davvero

In che mondo vivi, cosa fumi, condividi

Quindi lei è così audace da affermare per me sul mio codice che non può vederlo? Avete sbagliato i funghi?
 
Dmitry Fedoseev:
Quindi lei afferma così audacemente per me sul mio codice che non vede? Non vi state sbagliando con i funghi?

Ho capito, non è un pazzo, avete un compilatore speciale senza avvertimenti, specialmente personalmente da MQ

PS: ne voglio uno anch'io, dammelo.

 
Михаил:

Il codice che hai dato non è affatto corretto!

Dovrebbe essere così:

ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));

Sbagliato, perché allora c'è un confronto:

if(type==(long)POSITION_TYPE_BUY


No, non lo è.

Questo non c'entra niente.

Il codificatore ha semplicemente esagerato o ha copiato la conversione del tipo da qualche parte.


in effetti

codice

    long type=PositionGetInteger(POSITION_TYPE);
    if (type==POSITION_TYPE_BUY) return;

non genera alcun errore o avvertimento.

MQL non richiede una conversione esplicita


PS. Verificate le vostre ipotesi prima di iniziare a discutere.

 

un pessimo esempio, si scivola su un confronto e poi si incorre nell'errore:

 
o_O:

PS. Verificate le vostre ipotesi prima di iniziare a discutere.

Pensare alle conseguenze quando si fanno proposte
 
o_O:


No, non lo sei.

Non c'entra niente.

Il codificatore ha semplicemente esagerato o ha copiato da qualche altra parte .


in effetti

codice

non genera alcun errore o avvertimento.

MQL non richiede una conversione esplicita


PS. Verificate le vostre ipotesi prima di iniziare a discutere.

o_o!

Giusto - sbagliato....

Ho l'impressione che lei non legga quello che scrivono gli altri!

Secondo le regole di programmazione:

LA VARIABILE DI FUNZIONE ACCETTANTE DEVE ESSERE DELLO STESSO TIPO DEL VALORE DI RITORNO DI QUESTA FUNZIONE!

QUESTO È QUANTO!

Questa è la fine di questa speculazione.

Perché non l'hai scritto in questo modo?

int type=PositionGetInteger(POSITION_TYPE);

Perché sapete che la funzione restituisce sempre LONG.

E il riferimento dice chiaramente cheil valore restituito per l'argomento POSITION_TYPE della funzionePositionGetInteger() è

è ENUM_POSITION_TYPE, non LONG

E se vuoi fare pratica con il type casting, scrivi in questo modo:

int type = int(PositionGetInteger(POSITION_TYPE));

if (type==POSITION_TYPE_BUY) return;

Il fatto che il compilatore non vi dia un errore non significa che avete scritto correttamente!

Indica il "libero arbitrio" del compilatore e basta! (Permette di confrontare LONG e INTEGER).

Questo è il modo GIUSTO di gestire questa situazione:

 ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));
 
Alexander Bereznyak:

Un pessimo esempio, si è perso il confronto, e poi si ottiene un errore:

Non giustificate le vostre tesi facendo riferimento a un altro argomento della discussione.

Si tratta solo di confronto e solo in questo caso lungo è enum.


Sei già entrato nel boschetto dei pensieri, anche se la domanda era diretta, a cui ha risposto l'integerrimo

Nextor257:

Per favore, consigliatemi, non riesco a capire che tipo di confronto è questo?

if(type==(long)POSITION_TYPE_BUY)

Perché (long) è preceduto da POSITION_TYPE_BUY?


Dmitry Fedoseev:

Questo è un cambiamento del tipo di variabile al volo.

 
Dmitry Fedoseev:

long e lon invece diENUM_POSITION_TYPE eENUM_POSITION_TYPE

8 caratteri (che puoi digitare a occhi chiusi) invece di 36 caratteri (e in maiuscolo)! Oltre a questo c'è ogni sorta di informazione che non ha senso. Questo non è un buon stile di programmazione: scrittura inutile e informazioni ridondanti.

In questo caso, Mikhail ha assolutamente ragione (con tutto il mio disgusto per lo stile di programmazione di Mikhail).

E non si tratta di potenziali avvertimenti e soprattutto del numero di caratteri, ma di una digitazione rigorosa. L'enumerazione ENUM_POSITION_TYPE è un tipo di dati unico. È ENUM_POSITION_TYPE, non long o int. Dovete usarlo come ENUM_POSITION_TYPE e in nessun altro modo. E se si digita a lungo, la funzione di completamento automatico inizierà al terzo carattere, e non c'è alcun problema. E il problema è nell'usare long, perché può essere quasi tutto, mentre ENUM_POSITION_TYPE non lo è.

o_O:

MQL non richiede una conversione esplicita

All'inizio ho scritto che lo fa, ma poi ho visto la parola "confronto". In realtà, nessuna conversione esplicita è necessaria in confronto, perché MQL lo fa implicitamente. E sarebbe meglio non farlo affatto, perché il risultato è spesso indefinito. Ma in altri linguaggi normali strettamente tipizzati è sempre richiesta una conversione di tipo esplicita.

P.S. Per una volta Michael ha dato una risposta competente, ma la gente si è abituata a bestemmiare anche qui. E invano, perché in questo caso ha ragione.