Parlare dell'OLP nel salone - pagina 9

 
fxsaber:

Apparentemente static e const (questo non è OOP) non sono necessari.

Per quanto riguarda l'OOP, è molto interessante come la prossima funzione, che ha un'ampia applicazione pratica (per niente astratta), apparirebbe in stile procedurale?

Ovviamente, qualsiasi OOP può essere riscritta in stile procedurale. Ma mi interessa la pratica. Così ho preso il codice minuscolo di cui sopra, dove anche l'OOP è usato al minimo.

Quindi quanto è più bello/meglio comodo/meglio leggibile/meglio corretto lo stile procedurale rispetto all'OOP in questo esempio? Beh, non per parlare per qualche pagina, ma solo per confrontare il codice sorgente breve procedurale vs OOP. Chiedo agli avversari di OOP di mostrare una masterclass. Questo non è il temuto MT5, ma il buon vecchio MT4.

Non sono contro l'OOP. Solo uno di cattiva qualità e codice criptico. (Non sono un oppositore dell'OOP. Solo uno della cattiva qualità e del codice criptico)

#define  MC 200
#define  MYOWNSELECT        OrderSelect     
#define  MYOWNTICKET        OrderTicket
#define  MYOWNOTIPE         OrderType
#define  MYOWNOLOT          OrderLots
// Возвращает true только в случае, если с последнего вызова произошли торговые изменения
bool IsChanged_NoOOP_Cryptic_aka_fxsaber(void)
{
  static int ptot=0,tickets[MC],types[MC];
  static double lots[MC];

  int total;
  bool res=ptot!=(total=::OrdersTotal());

  for(int i=0,j=0; i<total; i++)
     if(MYOWNSELECT(i,SELECT_BY_POS))
     {
       if(res=(res || (tickets[j]!=MYOWNTICKET() || types[j]!=MYOWNOTIPE() || lots[j]!=MYOWNOLOT())))
       {
         tickets[j]=MYOWNTICKET();
         types[j]=MYOWNOTIPE();
         lots[j]=MYOWNOLOT();
       }

       j++;
     }
  ptot=total;

  return(res);
}
 
Dennis Kirichenko:

Mi scusi, nel contesto di quale lingua sta traendo questa conclusione? :-)




Denis, nel contesto del forum ))))))))))

 
Alain Verleyen:

Non sono contro l'OOP. Solo uno di cattiva qualità e codice criptico. (Non sono un oppositore dell'OOP. Solo uno della cattiva qualità e del codice criptico)

Grazie per il codice procedurale! L'ho modificato un po'.

#define  MC 200
#define  MYOWNSELECT        OrderSelect     
#define  MYOWNTICKET        OrderTicket
#define  MYOWNOTIPE         OrderType
#define  MYOWNOLOT          OrderLots
// Возвращает true только в случае, если с последнего вызова произошли торговые изменения
bool IsChanged_NoOOP_Cryptic_aka_fxsaber(void)
{
  static int ptot=0,tickets[MC],types[MC];
  static double lots[MC];

  int total;
  bool res=ptot!=(total=::OrdersTotal());

  int j = 0;
  
  for(int i=0; i<total; i++)
     if(MYOWNSELECT(i,SELECT_BY_POS))
     {
       if(res=(res || (tickets[j]!=MYOWNTICKET() || types[j]!=MYOWNOTIPE() || lots[j]!=MYOWNOLOT())))
       {
         tickets[j]=MYOWNTICKET();
         types[j]=MYOWNOTIPE();
         lots[j]=MYOWNOLOT();
       }

       j++;
     }
  ptot=j;

  return(res);
}


Pro e contro di ciascuna delle soluzioni(OOP-solution) che ora potete vedere con i vostri occhi. Ognuno fa la sua scelta ed è stupido imporre un punto di vista diverso.

 
Dennis Kirichenko:

Mi scusi, nel contesto di quale lingua sta traendo questa conclusione? :-)

Sui professionisti, naturalmente.

 
fxsaber:

Grazie per il codice procedurale! Modificato un po'

Per chiarire che la compattezza è un'altra cosa con cui armeggiare

#define  MC 200
#define  MYOWNSELECT        OrderSelect     

bool IsChanged_NoOOP_Cryptic_aka_fxsaber(void)
{
  static int ptot=0;
  static string History_Unit[MC];

  string Order_Data;
  int total;
  bool res=ptot!=(total=::OrdersTotal());
  int j = 0, i = total;
  
  while(i-- > 0)
     if(MYOWNSELECT(i,SELECT_BY_POS))
     {
       Order_Data = StringFormat("%u|%u|%.2f", OrderTicket(), OrderType(), OrderLots());
       if(res=(res || History_Unit[j]!=Order_Data)) History_Unit[j]=Order_Data;

       j++;
     }
  ptot=j;

  return(res);
}

Si potrebbe, naturalmente, vedere quanto cambierebbero le prestazioni quando si confrontano strutture/array/file. Ma questo è un po' un compito preso fuori contesto, quindi non ha senso

PS E non sono contro l'OOP. A favore della convenienza.

 
Alexander Puzanov:

Per chiarire che anche la compattezza può essere modificata.

Si potrebbe, naturalmente, vedere quanto cambierebbero le prestazioni quando si confrontano strutture/array/file. Ma questo è un po' un compito preso fuori contesto, quindi non ha senso

PS E non sono contro l'OOP. A favore della convenienza.

Crollo!

 
Alexander Puzanov:

Per chiarire che anche la compattezza può essere modificata.

Si potrebbe, naturalmente, vedere quanto cambierebbero le prestazioni quando si confrontano strutture/array/file. Ma questo è un po' un compito preso fuori contesto, quindi non ha senso

PS E non sono contro l'OOP. A favore della convenienza.

Usare DEFINE era uno scherzo ;-) Il suo approccio sarebbe molto lento. (L'uso di DEFINE era uno scherzo ;-) Il vostro approccio sarà molto lento).

 
Alain Verleyen:

L'uso di DEFINE era uno scherzo ;-) Il suo approccio sarà molto lento. (L'uso di DEFINE era uno scherzo ;-) Il vostro approccio sarà molto lento).

Certo. Anche questo è uno scherzo - questa è una parata di abbellimento del codice, vero?

È anche uno scherzo - una torsione a favore della compattezza e della chiarezza

---

È una misura di una particolare implementazione, un caso particolare

 
Alexander Puzanov:

Certo. Anche questo è uno scherzo - questa è una parata di bellezza in codice, vero?

Sì, davvero bello.(non sono ancora in grado di cogliere le battute purtroppo ;-)

Sì, davvero bello. Non sono ancora in grado di fare scherzi purtroppo ;-)

 
fxsaber:

I pro e i contro di ogni soluzione(la soluzione OOP) possono ora essere visti da soli. Ognuno fa la propria scelta ed è sciocco imporre un punto di vista diverso.

Non c'è bisogno di imporre, ma è ovvio che in una forma procedurale la logica del codice è già visibile senza gesti extra, e ogni gesto di un programmatore assunto costa soldi al datore di lavoro. Quindi, se un datore di lavoro è intelligente, non si farà ingannare dall'OOP, ma un programmatore intelligente può torcere una storia sull'OOP progressiva per ottenere più soldi da lui approfittando della sua bassa alfabetizzazione. :)