Τι κάνει η λέξη-κλειδί assert της Java και πότε πρέπει να χρησιμοποιείται;

Ποια είναι μερικά παραδείγματα πραγματικής ζωής για την κατανόηση του βασικού ρόλου των ισχυρισμών;

Λύση

Οι Assertions (μέσω της λέξης-κλειδί assert) προστέθηκαν στη Java 1.4. Χρησιμοποιούνται για την επαλήθευση της ορθότητας ενός αναλλοίωτου στον κώδικα. Δεν θα πρέπει ποτέ να ενεργοποιούνται σε κώδικα παραγωγής και είναι ενδεικτικά σφάλματος ή κακής χρήσης ενός μονοπατιού κώδικα. Μπορούν να ενεργοποιηθούν κατά τον χρόνο εκτέλεσης μέσω της επιλογής -ea στην εντολή java, αλλά δεν είναι ενεργοποιημένες από προεπιλογή.

Ένα παράδειγμα:

public Foo acquireFoo(int id) {
  Foo result = null;
  if (id > 50) {
    result = fooService.read(id);
  } else {
    result = new Foo(id);
  }
  assert result != null;

  return result;
}
Σχόλια (6)

Οι ισχυρισμοί χρησιμοποιούνται για τον έλεγχο των μετα-συνθηκών και των "δεν πρέπει ποτέ να αποτύχει" προ-συνθηκών. Ο σωστός κώδικας δεν θα πρέπει ποτέ να αποτυγχάνει σε έναν ισχυρισμό- όταν ενεργοποιούνται, θα πρέπει να υποδεικνύουν ένα σφάλμα (ελπίζουμε σε ένα σημείο που βρίσκεται κοντά στο σημείο όπου βρίσκεται ο πραγματικός τόπος του προβλήματος).

Ένα παράδειγμα ενός ισχυρισμού θα μπορούσε να είναι ο έλεγχος ότι μια συγκεκριμένη ομάδα μεθόδων καλείται με τη σωστή σειρά (π.χ. ότι η hasNext() καλείται πριν από την next() σε έναν Iterator).

Σχόλια (2)

Ένα πραγματικό παράδειγμα, από μια κλάση Stack (από το Assertion in Java Articles)

public int pop() {
   // precondition
   assert !isEmpty() : "Stack is empty";
   return stack[--num];
}
Σχόλια (7)