Errori, bug, domande - pagina 1332

 
Alexey Navoykov:
Il tuo consiglio non ha senso nella pratica. Nessuno dà nomi identici di proposito. Il codice della funzione locale vive la sua vita separata mentre il programma esterno vive la sua vita. E i nomi delle variabili esterne possono cambiare nel tempo e nuove variabili esterne possono essere aggiunte.E se dopo, improvvisamente una delle centinaia di funzioni hauna variabile locale con lo stesso nome, cosa pensi che dovremmo rinominare la variabile globale? Non dovresti cercare scuse per i bug degli sviluppatori.

Non stavo cercando una scusa per i bug degli sviluppatori, ma questo bug è facilmente aggirabile non usando gli stessi nomi di variabili che sono responsabili dei parametri di input quando si lavora in un progetto. Basta cambiare il nome nei parametri di input, dubito che tu abbia centinaia di variabili nei tuoi parametri di input e abbia bisogno di modificare tutto il codice :) la parte principale del codice è di solito scritta al punto di ingresso del software e non è così grande, tutto è fatto da chiamate di funzioni(metodi). E per le funzioni (metodi) non c'è differenza sul nome di una variabile che viene passata nei parametri di input della funzione.

Naturalmente, se scrivete codice in cui le funzioni usano variabili globali, allora, naturalmente, dovrete cambiare un sacco di cose, ma questo codice è scritto senza alcuna visione, è davvero difficile da modernizzare.

Anche se se si guarda lo sviluppatore (MetaQuotes) con un punto di vista di consumatore, naturalmente, si vuole un sacco di tutto in una volta :) Mi piacerebbe lavorare in un terminale che è multipiattaforma, ma la risposta a questa richiesta sarà una - o usi quello che hai o lo passi :)

 
Konstantin Karpov:

Basta cambiare il nome nei parametri di input...

Lei ha un punto di vista un po' troppo superficiale. Basta cambiarlo così... Poi qualche altra funzione sarà aggiunta al codice dove il nome della variabile locale corrisponde, e dovrete cambiarlo di nuovo, giusto? Il nome di una variabile esterna non è solo un mucchio di lettere, ha un significato specifico. A volte devi pensare molto per trovare un nome conciso e succinto per esso, e dici - cambialo. E tutte le impostazioni preimpostate, così come le impostazioni del tester e dell'ottimizzatore saranno perse per questo parametro se il nome viene cambiato.

Supponiamo che abbiate inserito qualche funzione da qualche parte all'esterno, forse non è stata nemmeno scritta da voi, quindi i nomi delle variabili locali possono essere assolutamente qualsiasi.

 
Alexey Navoykov:

Lei ha un punto di vista un po' troppo superficiale. Poi qualche altra funzione viene aggiunta al codice dove la variabile locale ha lo stesso nome, e dovete cambiarla di nuovo, giusto? Il nome di una variabile esterna non è solo un mucchio di lettere, ha un significato specifico. A volte bisogna pensare bene per trovare un nome succinto e sintetico per esso, e tu stai dicendo - cambialo. E tutte le impostazioni preimpostate, così come le impostazioni del tester e dell'ottimizzatore saranno perse per questo parametro se il nome viene cambiato.

Supponiamo che abbiate inserito qualche funzione da qualche parte all'esterno, forse non è stata nemmeno scritta da voi, quindi i nomi delle variabili locali possono essere assolutamente qualsiasi.

Faccia come crede, ma sembra che non abbia scritto nessun grande progetto.

Non ha senso per me guardare le mie definizioni di funzione, perché ho una chiara distinzione nello stile di dichiarazione dei nomi delle variabili globali e locali. Pertanto, non incontro problemi come la coincidenza di nomi di variabili globali e locali. L'importante è che le funzioni elaborino la loro logica senza collisioni. Nel tuo caso c'è un grande MA, se fai coincidere il nome di una variabile globale con il nome di una variabile locale, aspettati delle sorprese, che hai già iniziato a chiarire.

Per esempio, mettete un _ in più nel nome della variabile locale, per esempio _iCount. In questo caso non avrete mai problemi con i nomi delle variabili, perché realizzerete ciò che state cercando di spiegarmi la seconda volta - le variabili vivono in un ambito locale, dove sono state create. E nessuna variabile globale in questo caso non introdurrà ambiguità nei nomi. E chiudiamo la nostra discussione a questo punto.

 

Tornando al mio post precedente. MT4/845, Windows7/64 bit, script:

#property strict

double d1 = 2.009745110811111111111111111;
double d2 = 3.654;
double d3;
//---
void OnStart()
  {
   d3=d1/d2;
   Print("AA: d3 = ",d3);
   Print("BB: d3 = ",DoubleToString(d3));
   Print("CC: d3 = ",DoubleToString(d3,8));
   Print("DD: d3 = ",DoubleToString(d3,9));
   Print("EE: d3 = ",DoubleToString(d3,10));
}

Risultato:


Amministrazione, aggiungete in DoubleToString che questa funzione arrotonda i numeri in virgola mobile alla precisione specificata.

 

È una buona idea non nominare le variabili locali e di input allo stesso modo

 
Комбинатор:

È una buona idea non nominare le variabili locali e di input allo stesso modo

In senso buono, sì, ma a volte quando aggiusti il codice di qualcun altro, ci colleghi le tue librerie e... bam...
 

Prova a continuare la linea in ME nel file allegato senza spazi

File:
comment.mq5  1 kb
 
Quando si discute di un problema, va bene collegarsi a un prodotto sul mercato? O sarebbe considerato pubblicità e proibito?
 
Yousufkhodja Sultonov:
Quando si discute di un problema, va bene collegarsi a un prodotto sul mercato? O questo sarebbe considerato pubblicità e proibito?
Ogni prodotto ha due schede: Discussione (per chi sta pensando di comprare) e Recensioni (per chi ha comprato). È qui che avvengono le discussioni sul prodotto.
 

Risultato di compilazione discutibile dopo l'operatore ? :

int f()
{
        int array[];
        return ( false ? array : array );
}
void OnStart()
{
        Print( f() );
}
// 0 error(s), 0 warning(s)
Risultato: 65618 (come ha fatto a diventare così?), e dovrebbe esserci un errore di compilazione