Logica di apprendimento - pagina 9

 

Sì :) Ho esagerato un po'.

Ecco un altro esempio :) ma dubito che funzionerà in MQL, funzionerà in C++:

for (int i = OrdersTotal(); i--;)
{
   if (!OrderSelect(i - 1, SELECT_BY_POS)) continue;

   //...
}
 
Mathemat:

In vendita dopo tutto?

Bene, bene. Abbiamo un operando logico all'interno, e l'ho letto male. Si scopre che è vero quando

- È così?

Bene, allora è una stronzata al quadrato. Il codice è illeggibile :)


Il codice è abbastanza leggibile. Non dovresti esserlo.
 

Per evitare di dover decifrare ciò che si intende (qualsiasi ordine di vendita), avrebbe più senso scrivere gli identificatori dei tipi di ordine. Sarebbe più breve, ma molto più chiaro.

In termini di brevità, sì, è una soluzione, ma non molto affidabile. Lo sviluppatore non garantisce che i valori numerici di queste costanti non cambieranno mai.

 
Mathemat:

Per evitare di dover decifrare ciò che si intende (qualsiasi ordine di vendita), avrebbe più senso scrivere gli identificatori dei tipi di ordine. Sarebbe più breve, ma molto più chiaro.

In termini di brevità - sì, questa è una soluzione, ma non molto affidabile. Lo sviluppatore non garantisce che i valori numerici di queste costanti non cambieranno mai.


Questo è il problema. È possibile fare un codice elegante che improvvisamente smette di funzionare.
 
TheXpert:

Ecco un altro esempio :) ma è improbabile che funzioni correttamente in MQL, funzionerà in C++:

for (int i = OrdersTotal(); i--;)
{
   if (!OrderSelect(i - 1, SELECT_BY_POS)) continue;

   //...
}
Non ho controllato, ma io stesso non lo scriverei così.
 
TheXpert:

Sì :) Ho esagerato un po'.

Ecco un altro esempio :) ma è improbabile che funzioni correttamente in MQL, funzionerà in C++:


Questa non è ottimizzazione ma perversione... Mi perdoni, è una perversione...

Mi è venuto in mente un bel compito: come scambiare valori tra due variabili numeriche senza usare la terza. ))

 
Vinin:
Si può fare un codice elegante che improvvisamente smette di funzionare.

Questo è il punto - questo codice non è elegante. Questo è più elegante:

bool IsActiveType(int orderType)
{
   return (type == OP_BUY || type == OP_SELL);
}

bool IsAnySellType(int orderType)
{
   return (type == OP_SELL || type == OP_SELLLIMIT || type == OP_SELLSTOP);
}

{
   if (IsActiveType(OrderType()))
   {
      //...
   }

   if (IsAnySellType(OrderType()))
   {
      //...
   }
}

denis_orlov:

Questa non è ottimizzazione, è perversa... Mi scusi...

Ricordo un bel compito come scambiare valori tra due variabili numeriche senza usare la terza. ))

Sì :) più o meno.
 
TheXpert:

Questo è il punto - questo codice non è elegante. Questo è più elegante:

Sì, proprio così. Le funzioni del corpo a una riga non sono mai state cancellate, sono davvero molto utili.
 
TheXpert:

Questo è il punto - questo codice non è elegante. Questo è più elegante:


Mi piace. Sembra bello.
 
TheXpert:

Questo è il punto - questo codice non è elegante. Questo è più elegante:



Basta rimuovere i parametri della funzione per renderla più intricata. Se il parametro non è impostato, allora determina da OrderType() dell'ordine, se è impostato, allora dal parametro.

Mi annoio qui :)))