Ho letto alcune introduzioni per principianti a smalltalk e manca un argomento. È la gestione degli errori. Com'è fatto? Gli oggetti lanciano qualche tipo di eccezione? Invia alcuni messaggi di errore a qualcuno?gestione errori smalltalk
risposta
Per sollevare un'eccezione:
MyException signal.
MyException signal: 'With an error message'.
Per gestire un'eccezione:
[ 1/0 ] on: ZeroDivide do: [ Transcript showln: 'Oops! Zero divide!'].
Per gestire un'eccezione e utilizzare alcune delle informazioni del eccezione:
[ 1/0 ] on: Error do:
[:e | Transcript showln: 'Oops! ' , e className , '!'].
Per garantire qualcosa sempre succede (a la try finally
):
[ 1/0 ] ensure: [ Transcript showln: 'This will always run' ]
Voglio solo far notare che accanto alla frase @Frank Shearar c'è un'altra possibilità. Intendo per design. Qualche volta è più utile lasciare al chiamante ora quale problema sta andando.
Il #on:do:
è perfettamente accettabile, ma la maggior parte delle volte non si sa cosa mettere in primo piano. block on: ?? do: something
.
Lasciatemi fare un esempio. In realtà c'è un esempio dalla libreria Collection. Soprattutto per quanto riguarda il dizionario.
aDict at: 4
Ecco che cosa succederebbe se 4
non è presente nel dizionario. Hai solo un semplice errore che devi prendere in un #on:do:
.
Ma c'è un modo migliore per gestire questa situazione:
aDict at: 4 ifAbsent: [^#noSuchThingAs4]
Sei gestire l'errore lo stesso del #on:do:
ma ora sapete perché. Quindi potresti farlo in un altro modo per gestire correttamente il tuo errore.
aConnection connectIfFailed: [ ^#maybeRetryHere ]
Essere consapevoli del fatto che è necessario mettere il codice di eccezione in un blocco in modo che non sarà valutare fino a che l'errore accade.
aDict at: 4 ifAbsentPut: self default
può funzionare ma è sbagliato. Spero che ti aiuti.
Leggi il 2 capitolo Pharo By Example: https://gforge.inria.fr/frs/download.php/26600/PBE2-Exceptions-2010-03-02.pdf
- 1. Gestione errori area MVC
- 2. Gestione degli errori ActiveResource
- 3. Ignora gestione errori CXF
- 4. Refit.ApiException Gestione degli errori
- 5. Gestione errori Socket.io
- 6. Gestione errori MySQLi
- 7. Gestione errori js Express
- 8. Best practice Gestione degli errori
- 9. Gestione degli errori in SQLAlchemy
- 10. Gestione degli errori in jQuery.getScript
- 11. Gestione degli errori da HttpWebRequest.GetResponse
- 12. Gestione errori STL senza eccezioni
- 13. Gestione degli errori in mutazioni
- 14. Gestione degli errori in SwingWorker
- 15. Gestione errori all'interno di Sexpr
- 16. Gestione degli errori con PHPMailer
- 17. Gestione errori di multithreading Java
- 18. Gestione degli errori in addPersistentStoreWithType
- 19. PhantomJS la gestione degli errori
- 20. Gestione degli errori in MVC
- 21. Gestione errori sconosciuti nel goniometro
- 22. Gestione errori Ajax in CakePHP
- 23. Gestione errori multipli in go
- 24. pgp_sym_encrypt/pgp_sym_decrypt gestione degli errori
- 25. gestione errori con NSURLConnection sendSynchronousRequest
- 26. Gestione errori nelle transazioni ActiveRecord?
- 27. Metodologia di gestione degli errori
- 28. Gestione errori vba in loop
- 29. Gestione degli errori con Mongoose
- 30. Gestione degli errori in EventSource
Buon punto: la gestione degli errori di spesso cotto in API in modo ifAbsent. –