Caratteristiche del linguaggio mql4, sottigliezze e tecniche - pagina 12

 
Ihor Herasko:

In molte aziende di software, un codice come questo farebbe staccare tutte le dita. La prima cosa che si richiede sempre e ovunque è di evitare le "letture inutili". Per esempio, se usate una condizione quando inserite una funzione:

allora si raccomanda di scrivere:

Questo approccio è di grande aiuto per evitare l'attaccamento di condizioni.

Ancora una volta è una spina nel fianco. Perché nessuno ha controllato cosa restituisce la funzione OrderType(). O forse ha restituito -1 o 6? Questo è un esempio di infilarsi nelle proprietà del compilatore da cui si dovrebbe sempre stare alla larga. Tu stesso citi molti esempi di codice multipiattaforma. Allora perché se ne allontana in questo caso? Uscirà un nuovo compilatore MQ e questo codice non funzionerà più correttamente.

Con continua la stessa situazione. Codice come:

è più difficile da leggere che:

Eppure l'efficienza dell'esecuzione è la stessa in entrambi i casi.

Questo è un vero peccato:

if (!OrderSelect(i, SELECT_BY_POS))
   continue;

if (OrderSymbol() != Symbol())
   continue;

if (OrderMagicNumber() != m_nMagicNumber)
   continue;
 
Vitaly Muzichenko:

È un vero peccato, vero?

Cos'è il tinny? Una linea di una superexpression - questo è ciò che è banale. Gli esseri umani non sono computer, e non devono elaborare il resto della condizione. Un umano, a differenza di un computer, deve calcolare l'intera espressione fino alla fine e poi capire solo che il suo primo componente porta a un risultato falso.

In una voce, dove tutto è decomposto da condizioni semplici, questo calcolo non è necessario: la prima condizione non è soddisfatta - andata.

Dovete risparmiare tempo, non stringhe. Ma lottano solo per la brevità che è in realtà un impacchettamento di operazioni e condizioni l'una nell'altra. Se solo questo imballaggio vi desse un considerevole guadagno di produttività potrei capirlo. Ma non è così. La crescita massima rientra nell'errore di misurazione. La gente si preoccupa di salvare le stringhe, ma non pensa affatto a risparmiare il tempo speso per capire e debuggare il codice.

 
Ihor Herasko:

Cos'è il barattolo? Una linea di super-espressione - è lì che è difficile. Un umano non è un computer, quindi può capire immediatamente che non c'è bisogno di elaborare il resto della condizione. Un umano, a differenza di un computer, deve calcolare l'intera espressione fino alla fine e poi capire solo che il suo primo componente porta a un risultato falso.

In una voce, dove tutto è decomposto da condizioni semplici, questo calcolo non è necessario: la prima condizione non è soddisfatta - andata.

Dovete risparmiare tempo, non stringhe. Ma lottano solo per la brevità che è in realtà un impacchettamento di operazioni e condizioni l'una nell'altra. Se solo questo imballaggio vi desse un considerevole guadagno di produttività potrei capirlo. Ma non è così. La crescita massima rientra nell'errore di misurazione. La gente si preoccupa di salvare le stringhe, ma non pensa affatto a risparmiare il tempo speso per capire e debuggare il codice.

Non la chiamerei una super-espressione difficile da leggere.

if(!OrderSelect(i, SELECT_BY_POS) || OrderSymbol() != Symbol() || OrderMagicNumber() != m_nMagicNumber)
   continue;

Oh, e il "breve ciclo di calcolo" è una cosa fondamentale che viene presa in considerazione "automaticamente" quando si legge una condizione senza richiedere alcuno sforzo mentale per farlo.

Di nuovo, opinione puramente soggettiva.

 
Vladislav Boyko:

Lei stesso ha convenuto che è una questione di abitudine.

E lo dirò di nuovo. Non sto incoraggiando nessuno a cambiare le proprie abitudini e a cercare una differenza di gusto nei pennarelli.

Igor Makanu:

Come hai detto tu - è una questione di gusti, ma come sai: tutti i pennarelli sono diversi ))))

I pennarelli sono diversi solo nel colore, hanno lo stesso sapore.
 
Vladislav Boyko:

Non lo definirei un superlativo difficile da leggere.

E non c'è bisogno di chiamare nulla qui. Finora, i miei oppositori (tu compreso) non hanno fatto un solo argomento sul fatto che questa espressione sia più facile da leggere rispetto alla suddivisione in linee.

Da parte mia, però, sono stati fatti ben tre argomenti:

  1. Una linea lunga non entra nel campo visivo. Richiede almeno una rotazione minima della testa (aumenta il tempo di elaborazione). Una linea breve e quella che la segue non richiedono tanto sforzo.
  2. In una lunga fila è più facile fare un errore e non notarlo. La divisione in linee diminuisce la probabilità di questo tipo di errore.
  3. Una linea lunga è impossibile da debuggare. Dividerlo in stringhe va bene.
Nessuna preferenza soggettiva. Tutto è giustificato dal senso pratico e niente di più. Sì, alcune persone possono trovare più conveniente grattarsi l'orecchio sinistro con il tallone destro, ma ciò non significa che questo approccio sia pratico. In natura, tutto è soggetto alla praticità e chi è più pratico sopravvive.
 
Ihor Herasko:

E non c'è bisogno di nominare nulla qui. Finora, i miei oppositori (tu compreso) non hanno fatto un solo argomento sul fatto che questa espressione sia più facile da leggere rispetto alla suddivisione in linee.

Da parte mia, tuttavia, sono stati fatti ben tre argomenti:

  1. Una linea lunga non entra nel campo visivo. Richiede almeno una rotazione minima della testa (aumenta il tempo di elaborazione). Una linea breve e quella che la segue non richiedono tanto sforzo.
  2. In una lunga fila è più facile fare un errore e non notarlo. La divisione in linee diminuisce la probabilità di questo tipo di errore.
  3. Una linea lunga è impossibile da debuggare. Dividerlo in stringhe va bene.
Nessuna preferenza soggettiva. Tutto è giustificato dal senso pratico e niente di più. Sì, alcune persone possono trovare più conveniente grattarsi l'orecchio sinistro con il tallone destro, ma ciò non significa che questo approccio sia pratico. E in natura, tutto è soggetto alla praticità e chi è più pratico sopravvive.

Igor, se gli occhi non si muovono nelle orbite e devi girare la testa, puoi scrivere così:

if(OrderSelect(i, SELECT_BY_POS)
&& OrderSymbol() == _Symbol
&& OrderMagicNumber() == m_nMagicNumber)
 {
  // Делаем что надо...
 }

E quante righe brevi ho incontrato con gli errori........... Apparentemente il numero e la probabilità di errori non dipendono dalla lunghezza della linea.

Si può essere d'accordo solo con il debugging. Ma l'abitudine è stata sviluppata prima che il debugger apparisse in mql4 e non tutti sono in grado di cambiare le abitudini.

 
Alexey Viktorov:

Igor, se gli occhi non si muovono nelle orbite e devi girare la testa, puoi scrivere così:

E quante righe brevi ho incontrato con gli errori........... Apparentemente il numero e la probabilità di errori non dipendono dalla lunghezza della linea.

Non si può che essere d'accordo con il debugging. Ma l'abitudine è stata sviluppata prima del debugger in mql4 e non tutti sono in grado di cambiare le abitudini.

Puoi farlo in questo modo, ma con questo stile per vedere un blocco di programma devi scorrere lo schermo 2 volte e questo è peggio che vedere tutto il codice in una sola schermata. (Non ti riguarda, è solo un esempio).

 
fxsaber:

Purtroppo, questo mito non trova alcun sostegno nella storia del forum. Inoltre, gli sviluppatori hanno costantemente chiarito la loro posizione che tali cambiamenti non possono essere fatti per principio.

Esisteva una cosa del genere. L'ordinamento ha avuto un impatto.

La discussione si teneva probabilmente sul vecchio forum metatrader4.com (ancora aperto recentemente, ora reindirizza a mql5.com).

 
Andrey Khatimlianskii:

Era così. L'ordinamento è stato influenzato.

La discussione deve essere stata sul vecchio forum metatrader4.com (ancora aperto di recente, ora reindirizzato a mql5.com).

Lo era, lo era. Proprio come ora con il numero di ordini storici, se si imposta "Oggi", allora OrdersHistoryTotal() restituirà il numero di ordini chiusi oggi. Se la scheda "Storia" non mostra nessun vecchio ordine, allora non è disponibile nemmeno per biglietto.

 
Alexey Viktorov:

Lo era, lo era. Proprio come ora con il numero di ordini storici, se si imposta "Oggi", OrdersHistoryTotal() restituirà il numero di ordini chiusi oggi. Se la scheda "Storia" non mostra nessun vecchio ordine, allora non è disponibile, nemmeno per biglietto.

Si tratta di ordinare. Allora, se non erano ordinati per tempo, non potevi trovare l'ultimo per indice - era l'ultimo di quelli ordinati.

E ora la profondità della storia non dipende dalla scheda selezionata? Secondo me, lo fa ancora.