En este artículo se describe Delphi de intentar construir .. finalmente, cuando al uso, y la forma en Castalia hace que sea más fácil de usar.

(Originalmente publicado en Delphi-expert.com el 16 de marzo de 2004)

En una línea de negocio que me ha de examinar una gran cantidad de código fuente, a veces me aviso común hábitos y tendencias en las personas del código. A veces, estos hábitos son buenos, como la utilización de afirmaciones. A veces las costumbres son malas, como la utilización de etiquetas y gotos. A veces, el código es simplemente faltan algunos elementos muy importantes, ya sea debido a la pereza o la falta de comprensión por parte del programador que escribió el código. Una de estas construcciones que es muy poderosa, pero a menudo descuidado y, a veces abusiva, del Delphi es "intentar" construir. Durante las próximas dos semanas, vamos a ver lo que estas construcciones hacen y cómo usarlos bien, Castalia y cómo puede ayudarle a utilizar con eficacia el abandono y no ellos.

Esta semana, nos concentraremos en el intento .. finalmente construir. La semana que viene vamos a entrar en detalles con excepción de tratar .., incluidos algunos en la historia el concepto de excepciones. También se burlan de java, que nos puede enseñar mucho con sus más de la parte superior mecanismo de manejo de excepciones.

Introducción

A veces es necesario asegurarse de que ciertas cosas se hacen para completar una tarea, independientemente de los errores que puedan haberse producido en la ejecución de la tarea. Por ejemplo, si uno toma rutinaria de control de un recurso, por lo general es necesario para la rutina, para liberar los recursos, incluso si se producen errores en el proceso. Por ejemplo, en el siguiente código, un archivo F es abierto, es un texto escrito a la misma y, a continuación, que está cerrado. A falta de cerrar el expediente daría lugar a una fuga de recursos y sería un error de primera clase.

 
Reset (F);
WriteLn (F, 'Hola, Mundo! ");
Closefile (F);

Este código funciona bien, siempre y cuando cada función se ejecuta normalmente, pero si algo anormal ocurre, entonces habrá problemas. Por ejemplo, si Reset (F) tiene éxito, pero por alguna razón la llamada a WriteLn falla, la rutina va a salir nunca sin intentar closefile (F). Como resultado, el archivo nunca será cerrado, y un recurso ha sido filtrado.

¿Cómo podemos solucionar este problema? WriteLn no proporciona ningún error-como mecanismo de comprobación de algunas rutinas de hacer (más en que la próxima semana). Simplemente ejecuta, y si algo va mal, que plantea una excepción (más que en la próxima semana también). En pocas palabras, una excepción es una condición anormal en la ejecución de un programa que causa el flujo del programa a ser interrumpido. Lo que necesitamos es una manera de asegurarse de que closefile (F) se llama, incluso si se produce una excepción. Esto es exactamente lo que el intento .. finalmente es para construir. Considere el mismo código, pero protegidas con el control de flujo de un try-por último bloque:

 
Reset (F);
intentar
WriteLn (F, 'Hola, Mundo! ");
finalmente
Closefile (F);
final
;

Ahora, nos hemos asegurado de que closefile (F) se llama, no importa lo que sucede durante la llamada a WriteLn. Ahora para una definición más formal, recto de la ayuda de Delphi:

La sintaxis de un intento .. finalmente declaración es

intentar statementList1 finalmente statementList2 final

donde cada statementListes una secuencia de declaraciones delimitado por punto y coma. El intentar .. declaración ejecuta finalmente la declaración en statementList1 (la cláusula de tratar). Si statementList1 termina sin plantear excepciones, statementList2 (la cláusula finalmente) se ejecuta. Si una excepción se plantea durante la ejecución de statementList1, el control se transfiere a statementList2; una vez statementList2la ejecución de los acabados, la excepción es re-planteadas. Si una llamada a la salida, Break, o seguir el procedimiento de control de las causas para dejar s tatementList1, statementList2 se ejecuta automáticamente. Por lo tanto, la cláusula finalmente se ejecuta siempre, independientemente de cómo tratar la cláusula termina.

Ahora que tenemos una comprensión de la .. finalmente intentar construir y cuándo usarlo, veamos cómo pueden ayudar a Castalia.

Plantillas de Código

Castalia ofrece una serie de plantillas de código que implican el intento .. finalmente construir. Cuando se instaló por primera vez, incluye el Castalia tryf y trycf plantillas. El tryfplantilla crea un simple esqueleto de un bloque try. Para utilizar la plantilla tryf, simplemente escriba "tryf" en el editor y pulse la barra espaciadora. La esquelético código se inserta:

 
intentar
|
finalmente
|
final;

El cursor se ubicará en el lugar apropiado en la cláusula de tratar. Después de crear el código en la cláusula de intentar, pulse una vez para saltar en el último apartado. Luego de crear su código de limpieza.

trycf la plantilla se refiere a un particular el uso común de la .. finalmente intentar construir en Delphi. Esta es la dinámica de creación y destrucción de objetos. Mal ejemplo:


MyStrings: = TStringList. Crear;
MyStrings. Añadir ( 'Hello');
MyStrings. Añadir ( 'Mundo');
MyStrings.
SaveToFile ( 'hello.txt');
MyStrings. Free;

Esto es similar al primer ejemplo. A los recursos (memoria) está siendo asignado - en este caso por un constructor. Los recursos se manipula, entonces el resoruce es deallocated por la llamada MyStrings.Free. Si no MyStrings.Free llamada, la memoria no se deallocated, y se busca a otra fuga de recursos. Una vez más, el problema es el mismo. Si algo va mal, mientras que la manipulación de la memoria, el destructor nunca es llamado y la memoria nunca es deallocated. Aquí está el código apropiado:

 
MyStrings: = TStringList. Crear;
intentar
MyStrings. Añadir ( 'Hello');
MyStrings. Añadir ( 'Mundo'
);
MyStrings. SaveToFile ( 'hello.txt');
finalmente
MyStrings. Free;
final;

Observe que MyStrings.Free se ha movido en el últimocláusula, asegurando que no importa lo que ocurre en la cláusula de tratar, el objeto será liberado. Castalia trycf la plantilla proporciona un esqueleto de esta construcción. Para utilizar la plantilla trycf, tipo "trycf" en el editor y pulsa la barra espaciadora. La esquelético código se inserta:

 
|: = |. Crear;
intentar
|
finalmente
|. Free;
final;

El cursor se ubicará en la primera | carácter, y pulsando saltará a cada uno de | en orden. (La | caracteres no aparecerán en el código, sino que se utiliza aquí con el propósito de la claridad). Usted debe utilizar el trycfplantilla cada vez que se están creando objetos dinámicamente.

Puede obtener más información acerca de Castalia el código de las plantillas de aquí.

Refactoring

Código plantillas son útiles cuando se está escribiendo nuevo código, pero no ayuda mucho cuando estamos modificando el código existente de conformidad con nuestro nuevo entendimiento de intentar finalmente ... Castalia del refactorings ayudará con eso. El "sonido envolvente con ..." refactoring le permite seleccionar un bloque de código y un lugar .. finalmente intentar bloquear a su alrededor con unos pocos clics del ratón. Basta con seleccionar el código que va en el intentocláusula y haga clic con el botón derecho del ratón. Desde el "Refactorización" menú, seleccione "Surround con ..." y finalmente elegir "finalmente intentar ..". Su código será instantáneamente sangrado y encerrado en una .. finalmente intentar bloquear.

Puede obtener más información acerca de Castalia automatizados de refactoring instalaciones aquí.

Esta semana hemos aprendido a utilizar Delphi de intentar finalmente ..construir los recursos para evitar fugas y otros problemas de control de flujo. También hemos aprendido cómo Castalia nos puede ayudar a construir este uso más eficaz tanto con nuevo código y el código existente. La semana que viene vamos a ver .. salvo intentar y aprender cómo Castalia nos puede ayudar a escribir mejor código de manejo de excepción.

Average rating: