Δυστυχώς, οι εφαρμογές κτιρίου περιλαμβάνουν την κωδικοποίηση. Ανεξάρτητα από το πόσο προσεκτικά γράφετε / εντοπίζετε το πρόγραμμά σας, θα είναι αδύνατο να φανταστείτε κάθε κατάσταση που μπορεί να πάει στραβά. Ο άπειρος χρήστης μπορεί, για παράδειγμα, να προσπαθήσει να ανοίξει ένα μη υπάρχον αρχείο ή να εισάγει μια κακή τιμή σε ένα πεδίο δεδομένων.
Οι χρήστες κάνουν λάθη και πρέπει να είμαστε προετοιμασμένοι να χειριστούμε / να αποτρέψουμε αυτά τα σφάλματα όπου και όποτε είναι δυνατόν.
Σφάλματα, εξαιρέσεις;
Μια εξαίρεση είναι γενικά μια κατάσταση σφάλματος ή ένα άλλο συμβάν που διακόπτει την κανονική ροή εκτέλεσης σε μια εφαρμογή. Κάθε φορά που προκύπτει λάθος από την επεξεργασία μιας γραμμής κώδικα, ο Delphi δημιουργεί (αυξάνει) έναν απόγονο του αντικειμένου από το TObject που ονομάζεται αντικείμενο εξαίρεσης.
Φρουροί μπλοκ
Μια εφαρμογή ανταποκρίνεται σε μια εξαίρεση είτε εκτελώντας κάποιο κωδικό τερματισμού, χειρίζοντας την εξαίρεση είτε και τα δύο. Ο τρόπος για να ενεργοποιήσετε την παγίδευση σφάλματος / εξαίρεσης μέσα σε έναν δεδομένο κώδικα, η εξαίρεση πρέπει να πραγματοποιηθεί μέσα σε ένα φυλλοειδές μπλοκ δηλώσεων. Ο γενικός κώδικας μοιάζει με:
δοκιμάστε. {φυλασσόμενο μπλοκ κώδικα} εκτός. για να αρχίσει. {exception block-handles SomeException} τέλος? τέλος;
ΕΝΑ δοκιμάστε / εκτός δήλωση εκτελεί τις δηλώσεις στο φυλασσόμενο μπλοκ κώδικα. Εάν εκτελούνται οι εντολές χωρίς να εμφανίζονται τυχόν εξαιρέσεις, το μπλοκ εξαίρεσης αγνοείται και ο έλεγχος μεταβιβάζεται στη δήλωση που ακολουθεί τη λέξη-κλειδί στο τέλος.
Παράδειγμα:
... Μηδέν: = 0; δοκιμάστε. ομοίωμα: = 10 / μηδέν. εκτός. στο EZeroDivide κάνει. MessageDlg ('Δεν μπορεί να χωρίσει με μηδέν!', MtError, [mbOK], 0); τέλος;...
Προστασία των πόρων
Όταν ένα τμήμα του κώδικα αποκτά έναν πόρο, είναι συχνά απαραίτητο να διασφαλιστεί ότι ο πόρος θα κυκλοφορήσει και πάλι (ή μπορεί να πάρετε ένα έλλειψη μνήμης), ανεξάρτητα από το αν ο κωδικός ολοκληρώνεται κανονικά ή διακόπτεται με εξαίρεση. Σε αυτή την περίπτωση, η σύνταξη χρησιμοποιείται τελικά λέξη-κλειδί και μοιάζει με:
{κάποιος κώδικας για την κατανομή πόρων} δοκιμάστε. {φυλασσόμενο μπλοκ κώδικα} τελικά. {τερματισμός block - κωδικός για την ελευθέρωση πόρων} τέλος;
Παράδειγμα:
... Σχετικά με το κουτί: = TAboutBox. Δημιουργία (μηδέν); δοκιμάστε. Σχετικά με το κουτί. ShowModal; τελικά. Σχετικά με το κουτί. Ελευθέρωση; τέλος;...
Εφαρμογή. OnException
Εάν η εφαρμογή σας δεν χειρίζεται το σφάλμα που προκάλεσε την εξαίρεση, τότε ο Delphi θα χρησιμοποιήσει τον προεπιλεγμένο χειριστή εξαίρεσης - θα εμφανίσει ένα πλαίσιο μηνύματος. Μπορείτε να εξετάσετε το ενδεχόμενο να γράψετε κώδικα στο συμβάν OnException για το αντικείμενο TApplication, για να παγιδεύσετε σφάλματα σε επίπεδο εφαρμογής.
Διακοπή στις εξαιρέσεις
Όταν δημιουργείτε ένα πρόγραμμα με χειρισμό εξαιρέσεων, μπορεί να μην θέλετε οι Δελφοί να σπάσουν τις Εξαιρέσεις. Αυτό είναι ένα εξαιρετικό χαρακτηριστικό εάν θέλετε οι Delphi να δείξουν πού προέκυψε μια εξαίρεση. Ωστόσο, μπορεί να είναι ενοχλητικό όταν δοκιμάζετε το δικό σας χειρισμό εξαιρέσεων.
Λίγα τελευταία λόγια
Η ιδέα αυτού του άρθρου είναι να σας δώσει μια γρήγορη ματιά σε ποιες εξαιρέσεις υπάρχουν. Για περαιτέρω συζήτηση σχετικά με το χειρισμό των εξαιρέσεων, σκεφτείτε Σχετικά με το χειρισμό εξαιρέσεων στη διαχείριση των εξαιρέσεων από τα Delphi, χρησιμοποιώντας ένα εργαλείο όπως Αντιμετώπιση σφαλμάτων / εξαγωγής Delphi με Αναφορά σφαλμάτων και μερικά από τα ακόλουθα σχετικά άρθρα: