Discussione sull’articolo "Utilizzo di pseudo-modelli come alternativa ai modelli C++"

 

Il nuovo articolo Utilizzo di pseudo-modelli come alternativa ai modelli C++ è stato pubblicato:

L'articolo descrive un modo per programmare senza usare i modelli, ma mantenendo lo stile di programmazione inerente ad essi. L’articolo parla dell'implementazione dei modelli utilizzando metodi personalizzati e ha uno script già pronto allegato per la creazione di un codice sulla base di modelli specificati.

Prima di tutto, avviamo lo script specificando tutti i parametri richiesti. Nella finestra che appare, specifica il nome del file "Example templat".

Compila i campi dei tipi di dati personalizzati utilizzando il separatore ';'.

Finestra di avvio dello script

Non appena si preme il pulsante "OK", viene creata la directory Templates; contiene il file di pre-modello "Example templat.mqh".

Questo evento viene visualizzato nel journal con il messaggio:

Messaggi nel journal

Autore: Nikolay Demko

 

L'articolo mi è piaciuto, anche se non ho capito nulla.

"Ecco perché il compito principale risolto dai template è ancora quello di ridurre la quantità di codice digitato da un programmatore dalla tastiera."

Perché preoccuparsi dei template quando si può fare a meno del copia-incolla? E la quantità di codice digitato non vi disturba affatto - beh, ci saranno 300 righe di codice invece di 100 - quindi cosa c'è di sbagliato? L'importante è che funzioni e che il debugging non sia troppo stressante.

E il codice sarà più trasparente senza template.

 
Virty:

L'articolo mi è piaciuto, anche se non ho capito nulla.

"Ecco perché il compito principale risolto dai template è ancora quello di ridurre la quantità di codice digitato da un programmatore dalla tastiera."

Perché preoccuparsi dei template quando si può fare a meno del copia-incolla? E la quantità di codice digitato non vi disturba affatto - beh, ci saranno 300 righe di codice invece di 100 - quindi cosa c'è di sbagliato? L'importante è che funzioni e che il debugging non sia troppo stressante.

E il codice sarà più trasparente senza template.

300 :)

Che ne dici di 10-20K (e questo tenendo conto della suddivisione in moduli)...? ?

 
Interesting:

300 :)

E 10-20K che ne pensi (e questo tenendo conto della suddivisione in moduli).... ?

Sono davvero 20.000? Mio Dio, come si fa a scavare lì dentro? Forse l'algoritmo non è stato finalizzato? Dimensioni del genere avrebbero dovuto essere inserite nelle librerie molto tempo fa. Cosa stai programmando? 20.000 righe sono 10 programmatori per sei mesi di lavoro.
 
Virty:
Sono 20.000? Gesù, come si fa a scavare lì dentro? Forse l'algoritmo non è stato completato? Dimensioni del genere avrebbero dovuto essere inserite nelle librerie molto tempo fa. Cosa stai programmando? 20.000 righe, sono 10 programmatori per sei mesi di lavoro.

Per quanto riguarda le librerie, te l'ho detto - tenendo conto della modularità.

Per quanto riguarda le 20.000, ne abbiamo viste di più. Per esempio, i modzli per la 1C 7.7 sono 50K linee (e questo non è il loro codice, ma quello di qualcun altro).

 
Nikolay, ottimo articolo. Lo sperimenterò sicuramente, forse mi piacerà e utilizzerò i "modelli" in MQL5.
 

Perdonatemi se non capisco l'essenza del compito. In C++ c'è il salvataggio dei record del codice sorgente, qui no. I modelli di funzione in C++ mostrano dove si può davvero risparmiare. "Risparmiare codice sorgente" è l'idea chiave.

E generare una quantità ovviamente eccessiva di codice sorgente per rendere difficile il lavoro successivo, beh, no, per favore.

Avete bisogno della stessa funzione per diversi tipi di dati? MQL5 ha l'overloading dei metodi. Non ho dubbi che lo conosciate. Soprattutto perché cambiare il tipo di dati in ingresso spesso richiede di cambiare l'implementazione.

E a proposito di questo:

>>Per il debug, ovviamente, dovrete spostare il file nella directory del file chiamato o nella directory Include. Questo è esattamente l'inconveniente del debug di cui parlavo sopra quando ho menzionato gli svantaggi degli pseudo-template.

Non è necessario spostare nulla manualmente.

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Funzione di inizializzazione dell'esperto|
//+------------------------------------------------------------------+
void gena() 
  {
   string filename="code.mqh";
   int handle=FileOpen(filename,FILE_WRITE|FILE_UNICODE);
//-- generazione di codice arbitrario
   string st=TimeToString(TimeLocal(),TIME_DATE|TIME_MINUTES|TIME_SECONDS);
   string code="MessageBox(\"Hello World! Ora: "+st+"\");\r\n";
//------------------------------
   FileWriteString(handle,code);
   FileClose(handle);
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   gena();
   #include "../Files/code.mqh"; //includere il codice generato
//---
   return(0);
  }

L'esempio è primitivo. Le informazioni possono essere inserite all'interno di funzioni. E tutto il codice del file incluso agisce nell'ambito della visibilità del luogo di inserimento. L'unica cosa è che dovrete creare un file code.mqh vuoto in Files per evitare che il compilatore imprechi. Alla prima esecuzione il codice verrà creato e alla seconda esecuzione includerà il pezzo generato.

 

Nikolai, ecco una domanda. Hai una funzione che valuti una stringa? Ad esempio:

str="double a=1.5;"

void eval(str);
Print(a); // a=1.5

Ho bisogno di una funzione void eval(str), con il risultato a=1,5.

L'articolo è buono, grazie!

 
denkir:

Nikolai, ecco una domanda. Hai una funzione che valuti una stringa? Ad esempio:

Ho bisogno di una funzione void eval(str), con il risultato a=1,5.

L'articolo è buono, grazie!

Ho capito che la domanda non riguarda la valutazione, ma il parsing. Il parsing è molto versatile.

Si possono scrivere regole diverse. Tutto dipende da ciò che si vuole ottenere.

Per esempio: come dovrebbe comportarsi il parser in questi esempi?

"double a=1.5;"
"double a =1.5;"
"double a = 1.5;"
"double a=1.5,b=2.5;"
"double a =1.5,b =2.5;"
"double a = 1.5,b = 2.5;"
"double a = 1.5 , b = 2.5 ;"
lo sai. Posso solo consigliarvi di studiare le funzionalità della sezione funzioni stringa su esempi semplici. Se sarete in grado di utilizzare le funzioni a memoria, potrete pianificare il vostro sviluppo in base alle possibilità della funzionalità. Senza pensare a ciò che si può o non si può fare. Conoscendo le possibilità delle funzioni, avrete un'idea chiara di quale algoritmo sarà il più adatto a risolvere il vostro compito.
 
Urain:

Quindi capisco che la domanda non riguarda la valutazione, ma il parsing. Il parsing è molto versatile.

Si possono avere regole diverse. Tutto dipende da ciò che si vuole ottenere.

Per esempio: come il parser dovrebbe comportarsi in questi esempi.

lo sai. Posso solo consigliarvi di studiare le funzionalità della sezione funzioni stringa su esempi semplici. Se sarete in grado di utilizzare le funzioni a memoria, potrete pianificare il vostro sviluppo in base alle possibilità della funzionalità. Senza pensare a ciò che si può o non si può fare. Conoscendo le capacità della funzionalità, avrete un'idea chiara dell'algoritmo più adatto a risolvere il vostro compito.
Grazie mille per la risposta... Studierò la domanda
 
denkir:
grazie mille per la risposta... Studierò la domanda
A proposito, le operazioni logiche < > > == sono definite per le stringhe.
Документация по MQL5: Основы языка / Операции и выражения / Логические операции
Документация по MQL5: Основы языка / Операции и выражения / Логические операции
  • www.mql5.com
Основы языка / Операции и выражения / Логические операции - Документация по MQL5