Cet article traite de Delphi .. enfin essayer de construire, à utiliser quand et comment Castalia, il est plus facile à utiliser.
(Publié à l'origine, delphi-expert.com le 16 Mars 2004)
Dans un secteur d'activité qui m'a beaucoup de l'examen d'un code source, j'ai parfois l'avis commun des habitudes et des tendances dans les code. Parfois, ces habitudes sont bonnes, comme l'utilisation des assertions. Parfois, les mauvaises habitudes, comme l'utilisation des étiquettes et des GOTO. Parfois, le code est tout simplement manquantes certains éléments très importants, soit en raison de la paresse ou une mauvaise compréhension de la part du programmeur qui a écrit le code. L'un de ces concepts qui sont très puissants, mais souvent négligés et parfois abusé, Delphi est "d'essayer" de construire. Au cours des deux prochaines semaines, nous allons regarder ce que ces concepts et comment bien les utiliser et comment Castalia peuvent vous aider à utiliser de manière efficace et de ne pas les négliger.
Cette semaine, nous allons nous concentrer sur les essayer .. enfin construire. La semaine prochaine nous allons essayer d'entrer dans les détails .. sauf, un peu de l'histoire, y compris sur le concept d'exceptions. Nous allons aussi se moquer de java, qui peut nous apprendre beaucoup de choses avec plus de son au-dessus de mécanisme d'exception.
Introduction
Parfois, vous devez vous assurer que certaines choses sont faites pour accomplir une tâche, indépendamment des erreurs qui ont eu lieu en mai à l'exécution de la tâche. Par exemple, si une routine prend le contrôle d'une ressource, il est habituellement nécessaire pour la routine de libérer la ressource, même si des erreurs se produisent dans le processus. Par exemple, dans le code suivant, un fichier F est ouvert, un texte est écrit pour elle, puis elle est fermée. Ne pas fermer le dossier aboutirait à une fuite des ressources et ce serait un bug de première classe.
Reset (F);
Writeln (F, 'Bonjour, monde! ");
CloseFile (F);
Ce code fonctionne très bien aussi longtemps que chaque fonction exécute normalement, mais si quelque chose d'anormal se produit, alors il y aura des problèmes. Par exemple, si Reset (F) est un succès, mais pour une raison quelconque, l'appel à la Writeln échoue, la routine de sortie, sans jamais tenter de CloseFile (F). En conséquence, le dossier ne sera jamais fermé, et une ressource a été une fuite.
Comment pouvons-nous résoudre ce problème? Writeln ne fournit pas d'erreur de vérification comme certaines routines faire (plus que la semaine prochaine). Il exécute tout simplement, et si quelque chose va mal, elle soulève une exception (plus que la semaine prochaine aussi). En un mot, une exception est une situation anormale dans l'exécution d'un programme qui provoque le flux du programme à être interrompu. Ce dont nous avons besoin est un moyen de faire en sorte que CloseFile (F) est appelée, même si une exception se produit. C'est exactement ce que l'essayer .. enfin pour construire. Prenons le même code, mais avec la protection d'un flux de contrôle try-bloc finally:
Reset (F);
essayer
Writeln (F, 'Bonjour, monde! ");
enfin
CloseFile (F);
fin;
Maintenant, nous avons veillé à ce que CloseFile (F) seront appelés, peu importe ce qui se passe lors de l'appel à Writeln. Maintenant, pour une définition formelle, droits de l'aide Delphi:
La syntaxe d'un try .. enfin est
enfin essayer statementList1 fin statementList2
où chaque statementListest une suite de déclarations délimitée par des points-virgules. Le try .. enfin exécute la déclaration en statementList1 (essayez la clause). Si statementList1 termine sans soulever des exceptions, statementList2 (enfin la clause) est exécuté. Si une exception est soulevée lors de l'exécution de statementList1, le contrôle est transféré à statementList2; une fois statementList2termine l'exécution, l'exception est à nouveau soulevée. Si un appel à la sortie, Break, ou continuer la procédure de contrôle causes de quitter tatementList1 s, statementList2 est automatiquement exécuté. Ainsi, la clause est toujours finalement exécutée, indépendamment de la façon dont la clause essayer fin.
Maintenant que nous avons une compréhension de l'essayer .. enfin construire et quand l'utiliser, nous allons regarder comment Castalia peuvent vous aider.
Code Templates
Castalia fournit un certain nombre de modèles de code qui impliquent l'essayer .. enfin construire. Lors de la première installation, Castalia comprend les tryf et trycf modèles. Le tryfcrée un simple modèle de squelette pour un bloc try. Pour utiliser le modèle tryf, tapez simplement "tryf" dans l'éditeur et de pousser la barre d'espacement. Le squelette de code sera inséré:
essayer
|
enfin
|
fin;
Le curseur sera situé à l'endroit approprié dans la clause d'essayer. Après avoir créé le code de la clause d'essayer, appuyez
trycf le modèle répond à un usage particulier de l'essayer .. enfin construire en Delphi. C'est la dynamique de création et de destruction des objets. Mauvais exemple:
MyStrings: = TStringList. Create;
MyStrings. Add ( 'Bonjour');
MyStrings. Add ( 'World');
MyStrings.SaveToFile ( 'hello.txt');
MyStrings. Free;
Cela est similaire au premier exemple. Une ressource (mémoire) est attribué - dans ce cas par un constructeur. La ressource est d'être manipulé, alors les resoruce est désalloué par l'appelant MyStrings.Free. Si nous n'avons pas MyStrings.Free, la mémoire ne serait pas désalloué, et nous serions encore à chercher une autre ressource fuite. Encore une fois, le problème est le même. Si quelque chose se passe mal pendant que la manipulation de la mémoire, le destructeur n'est jamais appelé et la mémoire n'est jamais désalloué. Voici le code:
MyStrings: = TStringList. Create;
essayer
MyStrings. Add ( 'Bonjour');
MyStrings. Add ( 'World');
MyStrings. SaveToFile ( 'hello.txt');
enfin
MyStrings. Free;
fin;
Notez que MyStrings.Free a été finalement déplacé dans laclause, en veillant à ce que, peu importe ce qui se passe dans la clause d'essayer, l'objet sera libéré. Castalia trycf du modèle fournit un squelette de cette construction. Pour utiliser le modèle trycf, tapez "trycf" dans l'éditeur et appuyez sur la barre d'espacement. Le squelette de code sera inséré:
| = |. Create;
essayer
|
enfin
|. Gratuit;
fin;
Le curseur se trouve là où le premier caractère | est, et en appuyant sur
Vous pouvez en apprendre plus sur le code de Castalia modèles ici.
Refactoring
Code des modèles sont utiles quand on est nouveau code écrit, mais ne contribuent pas beaucoup quand on est de modifier le code existant en vertu de notre nouvelle compréhension de l'essayer .. enfin. Castalia refactorings l'aidera à cela. Le "Surround Avec ..." refactorisation vous permet de sélectionner un bloc de code et le lieu d'essayer .. enfin bloc autour de lui en seulement quelques clics de souris. Il vous suffit de sélectionner le code qui va dans l'essaiclause et cliquez avec le bouton droit de la souris. De la "Refactoring" dans le menu, choisissez "Surround Avec ..." et enfin choisissez ".. enfin essayer." Votre code sera instantanément en retrait et enfermée dans un bloc finally .. essayer.
Vous pouvez en apprendre plus sur Castalia automatisé refactorisation installations ici.
Cette semaine, nous avons appris à utiliser Delphi enfin essayer ..construire des ressources afin d'éviter les fuites et autres problèmes de contrôle de flux. Nous avons aussi appris comment Castalia peut nous aider à utiliser ce concept de manière plus efficace à la fois nouveau code et le code existant. La semaine prochaine, nous allons voir .. sauf essayer et d'apprendre comment Castalia peut nous aider à mieux écrire exception handling code.

Delicious
Digg
Google
Yahoo