Ciao a tutti,
oggi mi sono imbattuto in una nuova (almeno per me) direttiva del Pascal (implementata sia in FPC che in Delphi).
Si usa così:
procedure Non(t: integer); experimental;
var Prova: integer experimental;
Questa direttiva"experimental" fà si che venga emesso un Warning in fase di compilazione, riportando l'attenzione sul fatto che quei metodo / variabile sono "sperimentali" ossia non stabili.
E' interessante, perchè io ora usavo solo commenti nel codice (quindi per cercare qualcosa di simile dovevo andare a cercare una stringa standardizzata nel codice ...) mentre così vieni avvertito ad ogni compilazione che c'è qualcosa da sistemare.
Come riferimento, premete F1 dal vostro IDE sulla parola "experimental" ... non sono riuscito a trovare in rete un riferimento.
E' incredibile come non si finisca mai di imparare.
Nella documentazione di FPC si trova qualcosa ma non ho approfondito
E' esattamente ciò che propone l'help di Lazarus premendo F1.
Inoltre si possono osservare anche altre direttive, alcune note (come "deprecated", "platform") altre altrettanto sconosciute ("unimplemented").
Visto che siamo a livello di direttive, consiglio di inserire nel Vs. codice questa direttiva:
//Per Delphi
{$WARN BOUNDS_ERROR ERROR}
//Per Lazarus
{$WARN 4110 ERROR}
Ciò consente di trattare le operazioni miste tra UINT e INT come errori a livello di compilazione.
Qualcuno dirà che ci si và a complicare la vita ... non è così in realtà.
Provate a usare Int($8000_0000) e DWord($8000_0000) e vedrete la differenza.
Fate girare questo codice, e vedrete il risultato ... i matematici inorridiranno per ciò (e non solo loro):
const
A = Integer($80000000);
B = DWORD($80000000);
C = $80000000;
//D = MINLONG;
procedure HandleInteger(Value:Integer);
begin
Writeln(Value);
end;
procedure HandleDWORD(Value:DWORD);
begin
Writeln(Value);
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
HandleInteger(A);
HandleInteger(B);
HandleInteger(C);
//HandleInteger(D);
HandleDWORD(A);
HandleDWORD(B);
HandleDWORD(C);
//HandleDWORD(D);
end;
P.S. questo è il risultato:
-2147483648
-2147483648
-2147483648
2147483648
2147483648
2147483648
Come vedete, lasciando al compilatore la scelta accade che un numero negativo diventa positivo .... e non dico altro.
Certo, il compilatore avverte che stà facendo di testa sua, ma sia in Lazarus che in Delphi molte volte gli avvisi e i suggerimenti sono MOLTEPLICI (anche a causa dei pacchetti di terze parti) e non si ha la pazienza di verificarli tutti sempre.
Inserendo il $WARN sopra indicato evitiamo che il compilatore faccia di testa sua in questi casi.
Ciao