mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-04-27 07:33:57 +00:00
Transalte branching and loop section (6)
This commit is contained in:
parent
107ff5cadf
commit
4a60cef189
@ -580,4 +580,32 @@ modifier checkValue(uint amount) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 6. ISTRUZIONI CONDIZIONALI E CICLI
|
||||||
|
|
||||||
|
// Troviamo tutte le istruzioni condizionali di base - incluse if/else, for,
|
||||||
|
// while, break, continue e return - ma non c'è lo switch
|
||||||
|
|
||||||
|
// La sintassi è la stessa di javascript, ma non esiste la conversione di tipo
|
||||||
|
// in booleano dai non booleani (bisogna usare gli operatori logici per
|
||||||
|
// ottenere il valore boolean)
|
||||||
|
|
||||||
|
// Bisogna stare attenti i loop che iterano in base al comportamento
|
||||||
|
// dell'utente, dato che i contratti hanno un tetto massimo di gas
|
||||||
|
// per blocco di codice e falliranno se lo superano
|
||||||
|
// Ad esempio:
|
||||||
|
for(uint x = 0; x < refundAddressList.length; x++) {
|
||||||
|
refundAddressList[x].transfer(SOME_AMOUNT);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ci sono due errori nel codice precedente:
|
||||||
|
// 1. Un fallimento su una transfer impedisce al loop di completare tutti
|
||||||
|
// i cicli, bloccando dei soldi;
|
||||||
|
// 2. Questo loop potrebbe essere arbitrariamente lungo (si basa sul numero
|
||||||
|
// degli utenti che hanno diritto al rimborso), quindi potrebbe fallire sempre
|
||||||
|
// se supera il tetto massimo di gas per blocco;
|
||||||
|
// Come soluzione, si potrebbe permettere agli utenti di prelevare
|
||||||
|
// individualmente dal loro subaccount e segnare il rimborso come riscosso
|
||||||
|
// Ad es. preferire pull payments ai push payment
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
Loading…
Reference in New Issue
Block a user