Hola. Durante esta clase Te mostraré excepciones,
que son realmente potentes en Pharo. Te daré una descripción general.
¿Qué podemos hacer con las excepciones? Podemos reanudarlos,
reiniciarlos, Señales como nuevas excepciones.
Solo voy a mostrarte cosas que serán útiles de una manera práctica
cuando primero usa excepciones,
pero es importante que sepas que esto no es todo
Hay 2 tipos de excepciones, "Errores", que a menudo son fatales
y "notificaciones" que podemos decir que no necesitamos,
Son solo para referencia.
Entonces, si te interesa leer
una referencia completa sobre las excepciones
hay un capítulo entero en el libro, "Deep Into Pharo",
que está en el sitio web de MOOC y disponible en línea gratis.
Entonces, ¿qué vas a aprender? Para levantar y atrapar excepciones,
y algunos buenos métodos de ayuda Podemos usar todos los días.
Así que básicamente,
todo sobre esta clase esta en esta pagina
Vas a instalar un controlador para atrapar una excepción,
los señalarás,
y tendremos 2 agradables mensajes, que son "asegurar" y "si están restringidos"
Entonces echemos un vistazo.
Imagine que yo quería para atrapar una excepción.
Es el mensaje "on:do".
Hago un bloqueo, si tengo una acción, cuando tengo una acción,
si alguna vez tengo una excepción, ¿qué debo hacer?
"Algo" y aquí está la excepción, que se pasa en argumento.
Si miramos un ejemplo de cero división,
si hago 7 dividido por 0 ...
cuando tengo una división cero, ¿Que tengo que hacer?
Voy a escribir:"Cuidado, hay una división cero ".
Lo que hay que notar aquí es que una instancia de la clase Exception
ha sido pasado como un argumento,
y podré cuestionarlo y enviarle mensajes,
porque las excepciones Son objetos en Pharo.
Enviaré mensajes en mis excepciones.
Hacer algo y me mostrará 0.
Entonces, ¿cómo planteamos una excepción?
Básicamente, creamos una excepción y le enviamos el mensaje de señal.
Entonces aquí, cuando queremos dar una advertencia que hago, "Advertencia nueva".
Yo creo una excepción, la personalizo, Puse el mensaje que quiero dentro,
y envíe el mensaje de señal.
Cuando tengo una excepción para poder preguntar al autor,
escribiendo el método,
entonces tendrás otra API,
porque es "AuthorNameRequest" que define esta API,
así que he pasado "Stef" entonces haré "señal".
Lo que suele pasar es que las clases
proponer atajos para evitar tener que crear, entonces estoy enviando
"OutOfMemory", esa es la clase. Envío el mensaje de señal a la clase.
Normalmente, con advertencias, No lo hago "Advertencia nueva, bla, bla ..."
Hago "señal de advertencia" con el texto, porque es más corto,
pero eso depende de sus excepciones.
Entonces, ya que nos gusta ágil programación con pruebas unitarias,
y la programación basada en pruebas,
¿Cómo podemos probar que una excepción se plantea en SUnit?
Vamos a usar "no debería aumentar" y "debería subir".
Leamos esto juntos.
Quiero decir aquí, "Cuidado, no quiero
"una excepción a ser planteada,
"para que sea un SubscriptOutOfBounds.
"Si creo una fecha en febrero".
Ahora, si quiero probar que debería tener un error
cuando creo una fecha en el mes 13,
algo que no suele obtener, en tu sueldo,
entonces usaré "debería subir",
que significa "cuidado,
"si crea una fecha en un mes 13, Levantaré un error ".
Eso te permite crear la prueba de unidad,
mientras controla las excepciones.
Es una digresión, pero es importante
para saber que hay estos 2 pequeños métodos de ayuda.
Entonces, ¿qué son las excepciones en Pharo?
Hay errores:
"mensaje no entendido" "subíndice", "división por cero",
usted tiene "alto", que veremos cuando llegamos a la depuración.
Puedes poner un punto de quiebre,
que se detendrá Ejecución del sistema.
Tienes notificaciones, todo no fatal,
por lo que una desaprobación, "no use este método, use otro",
advertencias y tiempo de espera.
Una cosa buena es, tienes un mensaje de error
que describe errores no controlados.
Esto es lo que plantea el depurador.
Normalmente no lo usamos, pero es solo para decirte
que errores no controlados También son una clase de error.
Las excepciones son objetos reales.
Si observamos cómo mensaje "doesNotUnderstand"
está definido, puedes verlo en ProtoObject con su navegador Pharo,
lo haces, "messageNotUnderstood new",
Envío un mensaje al destinatario, que es el objeto y dar una señal.
Recibe esta señal cuando envía "punto nuevo strangeAndBizarre".
No se conoce como mensaje, "strangeAndBizarre"
por lo que creará esta excepción.
Tenemos desaprobación, por ejemplo, lo que significa,
si usas una API que evoluciona con el tiempo
y que Pharo ha decidido ya no es válido,
de hecho...
¿Cómo lo hacemos en Pharo? Decimos:"desaprobado:encendido:en"
Aquí, he elegido un claro ejemplo,
"menú, artículo, título" y que dice?
"Usa el método addTitle en lugar de "título".
¿Cómo se implementa?
Se implementa de la siguiente manera:"en desuso",
esto, "crea una excepción",
que se llama "desaprobación"
dentro de la cual lo pasaré "método, explicación, en, en"
que le dará una señal. Entonces es solo para mostrarte que
"desaprobación", "messageNotUnderstood", son excepciones que creamos y aumentamos.
Entonces, esto es solo un detalle, puedes tener conjuntos de excepciones.
Puede decir:"Si tengo ZeroDivide, y tengo advertencia,
o tengo advertencia, vas a poder,
para contener las excepciones con una coma " que creará un conjunto de excepciones,
permitiéndote decir, "Quiero reaccionar ante todas estas excepciones".
Es muy raro que se use, es solo para completar.
Ahora vamos a mirar algunos métodos muy prácticos,
que a menudo usamos.
¿Cómo puedo asegurarme de que una expresión siempre se ejecuta,
incluso si el programa falla de antemano?
Entonces, la idea es "garantizar". ¿Qué hace "asegurar"?
Haces algo,
y te garantizo que el otro bloque será ejecutado.
Es muy poderoso Te permite cerrar archivos automáticamente.
Eso es lo que vemos en SpyOn, para el profiler Pharo.
Hay una clase en eso. Yo digo:"Estoy comenzando a perfilar".
Ejecuto el bloque que quiero perfilar
y me garantizo Dejaré de perfilar,
incluso si me has pasado un bloque con un error
Hay otro ayudante
que es muy lindo que es como puedo asegurarme
una expresión solo se ejecuta si el programa falla?
Lo que voy a hacer es decir, "Haces algo si alguna vez
"sucede algo extraño, Quiero que ejecute este código ".
Aquí he tomado un ejemplo en "espera", que es realmente
muy bajo nivel, lo que te permite para cambiar la programación del procesador.
Yo digo:"Ahí está el sistema, programar un semáforo "
Hago una operación y si alguna vez algo no funciona,
el sistema garantiza
que lo eliminaré del programador.
Estos métodos son realmente prácticos, porque son muy poderosos
Te he dado una diapositiva para explicarte. cómo funciona el método de búsqueda,
Además del libro.
Ahora...
solo para tu información,
las cosas que podemos hacer con excepciones en Pharo,
puedes devolver un resultado alternativo, puedes volver a intentarlo, de hecho.
Puedes cambiar la ejecución del programa y diga:
"Actuar como si la excepción no sucedió ".
Puedo reanudar
Puedo decir:"No, no quiero tratar con esta excepción en este nivel,
"Quiero tratar con él más arriba".
Puedo renunciar a una excepción,
"No, has planteado esta excepción pero es viejo, quiero uno nuevo "
con resignal
Cuando lo necesites significa sabes lo que estás haciendo,
y has leído el capítulo, así que ten en cuenta que existe.
Esto fue solo para mostrarte.
Quiero devolver otro valor De una excepción, hago "return",
y puedes ver que aquí, Tuve mi bloqueo que me dio este valor.
Hice una excepción y, al final,
Es este valor el que se devolvió. Eso es con "retorno".
Ahora, con "curriculum vitae" lo que vas a tener,
"curriculum vitae" es ...
Tengo mi excepción que se plantea aquí,
y lo que veo es que, En mi excepción, cuando hago "resume",
no se devuelve este valor, Es el próximo valor, entonces digo,
"Continuar después del punto de excepción", así que empieza de nuevo desde aquí,
y eso me dará este valor.
Entonces, si miramos lo que deberías saber:
Las excepciones son poderosas en Pharo, Vale genial.
Hay una API muy simple, es "señal" para plantear una excepción,
"on:do" para atraparlos,
y usted tiene que "garantizar" para garantizar que esta expresión siempre se ejecuta,
si tengo un problema aquí o no,
y hay esta expresión, con "ifCurtailed",
que ejecutará "onProblem" Si tengo un problema en "doSomething".
Esto es todo lo que necesitas saber Para comenzar con excepciones.