2013-05-27 13 views

Odpowiedz

9

Odpowiedź na to pytanie jest dostępny w The Java® Language Specification

Twierdzenie to oświadczenie assert zawierające logiczną wyrażenia. Asercja jest włączona lub wyłączona. Jeśli asercja jest włączona, wykonanie asercji powoduje ewaluację wyrażenia boolowskiego i zgłaszany jest błąd, jeśli wyrażenie ma wartość false. Jeśli asercja jest wyłączona, wykonanie asercji nie ma żadnego wpływu.

Tak więc, jeśli assert była metoda następnie taki kod:

assert(check()); 

będzie zawsze wywołać metodę check, niezależnie czy twierdzenie jest włączona lub wyłączona.

Teraz, ponieważ assert jest kluczowe ze specjalnego obchodzenia się (jak opisano powyżej) sposób check zostanie wywołana tylko gdy twierdzenie jest włączona jak tylko to wyrażenie logiczne tego dochodzić będą oceniane.

1

Jednym z możliwych powodów jest to, że asercje mogą być włączone lub wyłączone - lepiej jest modelowane w Javie (język bez preprocesora) ze słowem kluczowym, a nie metodą, ponieważ założenie przy użyciu metody oznacza, że ​​kod zawsze był uruchamiany (nawet jeśli byłoby możliwe, aby kompilator usunął wywołania metod, jeśli asercje były wyłączone).

Porównanie z asertywami w np. C lub C++, gdzie masz preprocesor - w tym przypadku wystarczy przetworzyć te asercje na podstawie tego, czy zdefiniowana jest konkretna flaga preprocesora.

2

Asercje Java można włączać i wyłączać bez wprowadzania zmian w kodzie. Pozwala to na uniknięcie nakładu pracy związanej z asercjami w produkcji, jednocześnie wykorzystując ich wartość debugowania w środowiskach programistycznych.

Asercje zaimplementowane jako wywołania metod w kodzie aplikacji nie działałyby tak dobrze. Nawet jeśli metoda może być zwarta lub nie jest pożądana dla każdego środowiska, cykle są zawsze spalane przez wywołanie metody i test, aby określić, czy jest aktywny, czy nie.

W praktyce słowo kluczowe assert Java nie jest popularne, przynajmniej nie w tym miejscu. Asercje są znacznie częściej wdrażane w testach JUnit, jak poruszyły inne plakaty. W świecie JUnit twierdzenia są wywoływane metodami. Nie nakładają żadnych kosztów na produkcję, ponieważ nie znajdują się w głównym kodzie; są one w osobnym kodzie testowym, który jest uruchamiany tylko w środowiskach programistycznych.

Powiązane problemy