Java väited (väite väide)

Selles õpetuses õpime näidete abil Java väidete väidet (Java väited).

Java väited aitavad vigu tuvastada, testides koodi, mille eeldame olevat tõene.

Väide tehakse assertmärksõna abil.

Selle süntaks on:

 assert condition;

Siin conditionon tõeväärtuse väljend, mis eeldame, et see on tõsi, kui programm käivitatakse.

Kinnituste lubamine

Vaikimisi on väited käitamise ajal keelatud ja eiratud.

Väidete lubamiseks kasutame järgmist:

 java -ea:arguments

VÕI

 java -enableassertions:arguments

Kui väited on lubatud ja tingimus on true, täidab programm tavapäraselt.

Kuid kui tingimuse väärtus on kinnitatud, falsekuni väited on lubatud, viskab JVM an AssertionErrorja programm peatub kohe.

Näide 1: Java väide

 class Main ( public static void main(String args()) ( String() weekends = ("Friday", "Saturday", "Sunday"); assert weekends.length == 2; System.out.println("There are " + weekends.length + " weekends in a week"); ) ) 

Väljund

 Nädalal on 3 nädalavahetust 

Saame ülaltoodud väljundi, kuna sellel programmil pole kompileerimisvigu ja vaikimisi on väited keelatud.

Pärast väidete lubamist saame järgmise väljundi:

 Erand lõimes "main" java.lang.AssertionError 

Teine väite väide

 assert condition : expression; 

Selles väite vormis edastatakse avaldis AssertionErrorobjekti konstruktorile . Sellel avaldisel on väärtus, mis kuvatakse vea üksikasjaliku teatena, kui tingimus on false.

Üksikasjalikku teadet kasutatakse väite ebaõnnestumise teabe hõivamiseks ja edastamiseks, et aidata probleemi silumisel.

Näide 2: Java väide koos näite näitega

 class Main ( public static void main(String args()) ( String() weekends = ("Friday", "Saturday", "Sunday"); assert weekends.length==2 : "There are only 2 weekends in a week"; System.out.println("There are " + weekends.length + " weekends in a week"); ) ) 

Väljund

 Erand lõimes "main" java.lang.AssertionError: Nädalas on ainult 2 nädalavahetust 

Nagu näeme ülaltoodud näitest, edastatakse avaldis AssertionErrorobjekti konstruktorile . Kui meie eeldus on falseja väited on lubatud, lisatakse asjakohase sõnumiga erand.

See teade aitab väite nurjumise põhjustanud viga diagnoosida ja parandada.

Kinnituse lubamine konkreetsete klasside ja pakettide jaoks

Kui me ei esita väite käsurea lülititele argumente,

 java -ea 

See võimaldab väiteid kõikides klassides, välja arvatud süsteemiklassides.

Samuti võime argumentide abil lubada väite konkreetsetele klassidele ja pakettidele. Nendele käsurea lülititele saab anda järgmised argumendid:

Luba väide klassinimedes

Väite lubamiseks meie kõigi programmide Main klassides

 java -ea Main

Ainult ühe klassi lubamiseks

 java -ea:AnimalClass Main

See võimaldab väitele ainult AnimalClassselles Mainprogrammis.

Lubage väide pakettide nimedes

Väidete lubamiseks ainult paketi com.animalja selle alampakettide jaoks

 java -ea:com.animal… Main

Luba väide nimetu pakettides

Kinnituse lubamiseks nimetamata pakettides (kui me paketilauset ei kasuta) praeguses töökataloogis.

 java -ea:… Main

Luba väide süsteemiklassides

Väite lubamiseks süsteemiklassides kasutame erinevat käsurea lülitit:

 java -esa:arguments 

VÕI

 java -enablesystemassertions:arguments

Argumendid, mida neile lülititele saab anda, on samad.

Väidete keelamine

Väidete keelamiseks kasutame järgmist:

 java -da arguments 

VÕI

 java -disableassertions arguments 

To disable assertion in system classes, we use:

 java -dsa:arguments

OR

 java -disablesystemassertions:arguments

The arguments that can be passed while disabling assertions are the same as while enabling them.

Advantages of Assertion

  1. Quick and efficient for detecting and correcting bugs.
  2. Assertion checks are done only during development and testing. They are automatically removed in the production code at runtime so that it won’t slow the execution of the program.
  3. It helps remove boilerplate code and make code more readable.
  4. Refactors and optimizes code with increased confidence that it functions correctly.

When to use Assertions

1. Unreachable codes

Unreachable codes are codes that do not execute when we try to run the program. Use assertions to make sure unreachable codes are actually unreachable.

Let’s take an example.

 void unreachableCodeMethod() ( System.out.println("Reachable code"); return; // Unreachable code System.out.println("Unreachable code"); assert false; ) 

Let’s take another example of a switch statement without a default case.

 switch (dayOfWeek) ( case "Sunday": System.out.println("It’s Sunday!"); break; case "Monday": System.out.println("It’s Monday!"); break; case "Tuesday": System.out.println("It’s Tuesday!"); break; case "Wednesday": System.out.println("It’s Wednesday!"); break; case "Thursday": System.out.println("It’s Thursday!"); break; case "Friday": System.out.println("It’s Friday!"); break; case "Saturday": System.out.println("It’s Saturday!"); break; ) 

The above switch statement indicates that the days of the week can be only one of the above 7 values. Having no default case means that the programmer believes that one of these cases will always be executed.

However, there might be some cases that have not yet been considered where the assumption is actually false.

This assumption should be checked using an assertion to make sure that the default switch case is not reached.

 default: assert false: dayofWeek + " is invalid day"; 

If dayOfWeek has a value other than the valid days, an AssertionError is thrown.

2. Documenting assumptions

To document their underlying assumptions, many programmers use comments. Let’s take an example.

 if (i % 2 == 0) (… ) else ( // We know (i % 2 == 1)… ) 

Use assertions instead.

Comments can get out-of-date and out-of-sync as the program grows. However, we will be forced to update the assert statements; otherwise, they might fail for valid conditions too.

 if (i % 2 == 0) (… ) else ( assert i % 2 == 1 : i;… ) 

When not to use Assertions

1. Argument checking in public methods

Arguments in public methods may be provided by the user.

So, if an assertion is used to check these arguments, the conditions may fail and result in AssertionError.

Instead of using assertions, let it result in the appropriate runtime exceptions and handle these exceptions.

2. To evaluate expressions that affect the program operation

Do not call methods or evaluate exceptions that can later affect the program operation in assertion conditions.

Let us take an example of a list weekdays which contains the names of all the days in a week.

  ArrayList weekdays = new ArrayList(Arrays.asList("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" )); ArrayList weekends= new ArrayList(Arrays.asList("Sunday", "Saturday" )); assert weekdays.removeAll(weekends); 

Here, we are trying to remove elements Saturday and Sunday from the ArrayList weekdays.

Kui väide on lubatud, töötab programm hästi. Kui väited on keelatud, siis loendi elemente ei eemaldata. See võib põhjustada programmi tõrke.

Selle asemel määrake tulemus muutujale ja seejärel kasutage seda muutujat väitmiseks.

 ArrayList weekdays = new ArrayList(Arrays.asList("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" )); ArrayList weekends= new ArrayList(Arrays.asList("Sunday", "Saturday" )); boolean weekendsRemoved = weekdays.removeAll(weekends); assert weekendsRemoved; 

Nii saame tagada, et kõik nädalavahetused eemaldatakse nädalapäevadest olenemata väite lubamisest või keelamisest. Seetõttu ei mõjuta see programmi toimimist tulevikus.

Huvitavad Artiklid...