Java Assert

Java Assert
Twierdzenie w Javie jest stwierdzeniem opartym na zarezerwowanym słowie, asert, o wyrażeniu logicznym i kończącym się półkolisem. Zdarza się, że pewne warunki w programie mogą zapobiec prawidłowej pracy. Oświadczenie Assert sprawdza, czy takie warunki istnieją w programie.

Oczekuje się, że twierdzenie zostanie wykorzystane w programie, w którym programista podejrzewa taki warunek, który może istnieć. Jeśli użyto instrukcji Assert, a warunek nie występuje błędnie, program będzie kontynuowany bez żadnego problemu. Jeśli warunek występuje błędnie, wówczas zgłaszany jest komunikat o błędzie. Takie kontrole wiąże się z wyrażeniem logicznym. Oczywiście kodowanie twierdzeń niekoniecznie musi obejmować potwierdzenie zarezerwowane słowo. Istnieje wiele dobrych programów, które kodowanie stwierdzenia bez zarezerwowanego słowa. Jednak użycie słowa zarezerwowanego Assert wydobywa konkretną funkcję programowania, dzięki czemu program jest bardziej konstruktywny.

Rozważ następujący segment kodu:

Liczba całkowita w = null;
if (w != null)
System.na zewnątrz.println („Zrób to.");
// Inne stwierdzenia
w przeciwnym razie
System.na zewnątrz.println („test nie powiódł się.");

Obecnie wartość „in” jest null, ale może to być każda liczba całkowita. Bock IF zostanie wykonany, jeśli nie jest zerowy, co należy uznać za dobre. Jeśli jest to NULL (FALSE), zostanie wykonana część instrukcji IF-Compound, zgłaszając problem.

Teraz jedno oświadczenie Assert może zastąpić większość części instrukcji IF-Compound. Jest to jedno klasyczne użycie instrukcji Assert. Innym klasycznym zastosowaniem jest sprawdzenie, czy nie osiągnięto granicy wyniku obliczeń, jak przedstawia następujący opis:

Prędkość poruszającego się obiektu jest podana przez,

S = D/T

gdzie d jest odległość, T jest czasem, a S jest wynikiem (prędkość). Można pożądać, aby prędkość obiektu pozostała poniżej prędkości dźwięku, a zatem nie powoduje fal uderzeniowych. W takim przypadku stwierdzenie Assert można użyć do stwierdzenia, że ​​prędkość jest poniżej prędkości dźwięku, która wynosi 343 m/s.

Kod programu tego problemu, bez oświadczenia o stwierdzeniu, może być następujący:

podwójne d = 15, t = 3, s;
S = D / T;
if (s < 343)
System.na zewnątrz.println („Zrób to.");
// Inne stwierdzenia
w przeciwnym razie
System.na zewnątrz.println („test nie powiódł się.");

Składnie twierdzenia w Javie

W Javie składnia twierdzenia są w dwóch formach. Oni są:

Assert Expression1;
I
Assert Expression1: Expression2;

Dla pierwszej opcji (instrukcja) Expression1 jest wyrażeniem logicznym. Uwaga: równa się, w wyrażeniu logicznym wynosi ==, ponieważ w obliczeniach = oznacza przypisanie, podczas gdy == oznacza równość. W drugiej opcji (instrukcja) Expression1 jest nadal wyrażeniem logicznym; Ale Expression2 powoduje wartość, która może, ale nie musi być boolean (prawda lub fałsz). Jednak wartość nie może być nieważna. Celem Expression2 jest przesłanie błędu programistowi lub użytkownikowi. W tej drugiej opcji okrężnica oddziela dwa wyrażenia. Okrężnica nie ma zastosowania do pierwszej opcji.

Albo oświadczenie o twierdzeniu ostatecznie oznacza prawdziwe, albo fałsz z powodu wyrażenia logicznego. Jeśli to prawda, program jest kontynuowany zgodnie z oczekiwaniami. Jeśli jest to fałszywe, należy zgłosić błąd.

Assert Expression1
Walidacja

Przykładowy kod walidacji powyżej, powtarza się tutaj, aby uzyskać szybkie (wizualne) odniesienie:

Liczba całkowita w = null;
if (w != null)
System.na zewnątrz.println („Zrób to.");
// Inne stwierdzenia
w przeciwnym razie
System.na zewnątrz.println („test nie powiódł się.");

„Assert Expression1” można użyć w tym kodzie w następujący sposób:

Liczba całkowita w = null;
asert in != null;
System.na zewnątrz.println („Zrób to.");
// Inne stwierdzenia

Jeżeli twierdzenie jest włączone dla programu i jeśli twierdzenie twierdzi, że FALSE, podobnie jak dla tego konkretnego kodowania, wówczas instrukcje poniżej instrukcji Assert nie zostaną wykonane; a maszyna wirtualna Java (OS) wyda komunikat o błędzie. Jeśli twierdzenie nie zostanie włączone dla programu, instrukcje poniżej instrukcji Assert zostaną wykonane, mimo że jest fałszywe. Zobacz, jak włączyć twierdzenie dla programu poniżej.

W przypadku tego kodowania twierdzonego programista pozwala JVM na przesyłanie błędów całkowicie z powodu braku ekspresji2.

Zapobieganie zasięgu limitu

Przykładowy kod zapobiegający osiągnięciu limitu powyżej, powtarza się tutaj, aby uzyskać szybkie (wizualne) odniesienie:

podwójne d = 15, t = 3, s;
S = D / T;
if (s < 343)
System.na zewnątrz.println („Zrób to.");
// Inne stwierdzenia
w przeciwnym razie
System.na zewnątrz.println („test nie powiódł się.");

„Assert Expression1” można użyć w tym kodzie w następujący sposób:

podwójne d = 15, t = 3, s;
S = D / T;
Asser S < 343;
System.na zewnątrz.println („Zrób to.");
// Inne stwierdzenia

Jeśli dla programu jest włączone, to dla tego konkretnego kodowania instrukcje poniżej instrukcji Assert zostaną wykonane, a maszyna wirtualna Java (OS) nie wyda komunikatu o błędzie; Ponieważ wynik 5 jest mniejszy niż 343. Jeśli twierdzenie nie zostanie włączone, instrukcje poniżej instrukcji Assert będą nadal wykonywane, ponieważ zostaną zignorowane, nawet jeśli jest to fałszywe. Zobacz, jak włączyć twierdzenie dla programu poniżej.

W przypadku tego kodowania Assert programista nadal pozwala JVM całkowicie radzić sobie z komunikatem błędów; z powodu braku ekspresji22.

Expression2
Walidacja

Przykładowy kod walidacji powyżej, powtarza się tutaj, aby uzyskać szybkie (wizualne) odniesienie:

Liczba całkowita w = null;
if (w != null)
System.na zewnątrz.println („Zrób to.");
// Inne stwierdzenia
w przeciwnym razie
System.na zewnątrz.println („test nie powiódł się.");

Expression2 służy do zgłaszania błędów. W pozostały element tej instrukcji IF-Compound jest do zgłaszania błędów. Odpowiednie użycie drugiej instrukcji Assert dla tego kodowania może być następujące:

Liczba całkowita w = null;
asert in != null: in;
System.na zewnątrz.println („Zrób to.");
// Inne stwierdzenia

Jeśli zapewnienie programu jest włączone, to dla tego konkretnego kodowania instrukcje poniżej instrukcji Assert nie zostaną wykonane, a maszyna wirtualna Java (OS) wyda komunikat o błędzie. Tym razem komunikat o błędzie będzie używać wartości zmiennej, w. Jeśli twierdzenie nie jest włączone, wówczas instrukcje poniżej instrukcji Assert zostaną wykonane, pomimo faktu, że instrukcja Assert powoduje false. Zobacz, jak włączyć twierdzenie dla programu poniżej.

W przypadku tego kodowania twierdzonego programista wpływa na JVM w kontaktach z komunikatem błędów z powodu obecności Expression2 (IN) - patrz szczegóły poniżej.

Zapobieganie zasięgu limitu

Przykładowy kod zapobiegający osiągnięciu limitu powyżej, powtarza się tutaj, aby uzyskać szybkie (wizualne) odniesienie:

podwójne d = 15, t = 3, s;
S = D / T;
if (s < 343)
System.na zewnątrz.println („Zrób to.");
// Inne stwierdzenia
w przeciwnym razie
System.na zewnątrz.println („test nie powiódł się.");

Expression2 służy do zgłaszania błędów. W pozostały element tej instrukcji IF-Compound jest do zgłaszania błędów. Odpowiednie użycie drugiej instrukcji Assert dla tego kodowania może być następujące:

podwójne d = 15, t = 3, s;
S = D / T;
Asser S < 343 : s;
System.na zewnątrz.println („Zrób to.");
// Inne stwierdzenia

Jeśli zapewnienie programu jest włączone, to dla tego konkretnego kodowania instrukcje poniżej instrukcji Assert zostaną wykonane, a maszyna wirtualna Java (OS) nie wyda komunikatu o błędzie; Ponieważ wynik 5 jest mniejszy niż 343. Jeśli wynik (wartość) S jest równy lub większy niż 343, komunikat o błędzie będzie obejmować wartość S. Jeśli twierdzenie nie zostanie włączone, instrukcje poniżej instrukcji Assert będą nadal wykonywane, ponieważ zostaną zignorowane, nawet jeśli spowodują fałszywe. Zobacz, jak włączyć twierdzenie dla programu poniżej.

W przypadku tego kodowania Assert programista wpływa na JVM w kontaktach z komunikatem błędów z powodu wyrażenia2 (s) - patrz szczegóły poniżej.

Umożliwianie twierdzenia

Jeśli program ma kodowanie do stwierdzenia, oświadczenie Assert będzie skuteczne w celu poszanowania stwierdzenia, jeśli program jest włączony. Włączenie oświadczenia o stwierdzeniu odbywa się po skompilowaniu programu Java do bajt. Odbywa się to w wierszu poleceń podczas wykonywania programu. Odbywa się to poprzez włączenie Switch -enableasSseritions. Z przełącznikami w wierszu poleceń - nie oznacza „wyjmowania”; to jest łącznik (kula).

Korzystanie z przełącznika działa tylko do wykonania programu. Jeśli przełącznik nie jest używany, następnym razem, gdy program zostanie wywołany, wykonanie zignoruje instrukcję Assert.

W niniejszej sekcji zostanie rozwiązany tylko kod walidacji. Kod walidacji z pierwszą instrukcją Assert opcji to:

Liczba całkowita w = null;
asert in != null;
System.na zewnątrz.println („Zrób to.");
// Inne stwierdzenia

Załóżmy, że jest to w metodzie Main () głównej klasy i pliku o nazwie THEClass. Plik będzie zwykle skompilowany z poleceniem:

Javac theclass.Jawa

Kompilacja powinna przejść pomyślnie. Z przełącznikiem, wynikowym programem bajtowym, thass.klasa, zostanie następnie uruchomiona w wierszu poleceń z,

java -enableasseritions thass

Raport (wyjście) będzie:

Wyjątek w wątku „główna” Java.Lang.AssertionError
na thlass.Główny (thass.Java: 6)

Zauważ, że nie ma wzmianki o wartości, null, dla zmiennej, „w” na wyjściu. Dzięki temu instrukcje poniżej instrukcji Assert w programie nie są wykonywane.

Kod walidacji z drugą instrukcją opcji, która ma „: w” to:

Liczba całkowita w = null;
asert in != null: in;
System.na zewnątrz.println („Zrób to.");
// Inne stwierdzenia

Załóżmy, że jest to w metodzie Main () głównej klasy i pliku o nazwie THEClass. Plik zostanie skompilowany z poleceniem:

Javac theclass.Jawa

Kompilacja powinna przejść pomyślnie. Z przełącznikiem, wynikowym programem bajtowym, thass.klasa, zostanie uruchomiona w wierszu poleceń z,

java -enableasseritions thass

Raport (wyjście) będzie:

Wyjątek w wątku „główna” Java.Lang.AssertionError: Null
na thlass.Główny (thass.Java: 6)

Zauważ, że jest wzmianka o wartości, null, dla zmiennej „w” na wyjściu, jako „: null” w pierwszej linii wyjściowej. Dzięki temu stwierdzenia poniżej instrukcji Assert w programie nadal nie są wykonywane z powodu włączenia jakichkolwiek oświadczenia Assert w programie. Jeśli przełącznik, -enableasSeritions, zostanie pominięty w wierszu poleceń, każde (lub wszystkie) stwierdzenia w programie zostaną zignorowane. Kod poniżej będzie nadal wykonywany, nawet jeśli instrukcje Assert (wyrażenia logiczne) są fałszywe.

Wniosek

Twierdzenie w Javie jest stwierdzeniem opartym na zarezerwowanym słowie, asert, o wyrażeniu logicznym i kończącym się półkolisem. Zdarza się, że pewne warunki w programie mogą zapobiec prawidłowej pracy. Oświadczenie Assert sprawdza, czy takie warunki istnieją w programie.

Dobre przykłady korzystania z instrukcji Assert są walidacja i sprawdzenie, czy wynik obliczeń nie przekroczy limitu. Istnieją dwie formy instrukcji Assert: jedna, która nie pomaga w komunikacie o błędzie, a drugie, które pomaga w komunikacie o błędzie. Twierdzenie w Javie jest włączone w wierszu poleceń, dla skompilowanego kodu bajtowego z przełącznikiem, -enableasSeritions.