Avatar billede dsj Nybegynder
14. december 2003 - 16:46 Der er 8 kommentarer og
2 løsninger

Hvad gør assert?

Det reserverede ord 'assert', hvad gør det, og hvorfor kan jeg ikke kompilere kode, hvor det anvendes? Følgende er et eksempel jeg har fundet hvor assert bruges, hvad gør assert der?

public class A {
  // ...
  public void f() {
    assert !Thread.holdsLock(this);
    synchronized(this) {
      // ...
    }
  }
}
Avatar billede _carsten Nybegynder
14. december 2003 - 16:57 #1
Ved det ikke, men der står en del her:

http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html
Avatar billede soreno Praktikant
14. december 2003 - 17:02 #2
Avatar billede riversen Nybegynder
14. december 2003 - 17:03 #3
Avatar billede arne_v Ekspert
14. december 2003 - 17:03 #4
assert er et nyt keyword i J2SE 1.4

Det kendes fra flere andre sprog.

Det betyder "lav fejl hvis ikke følgende betingelse er opfyldt".

I din kode beder man om at få en fejl hvis man allerede har synkroniseret
på this.
Avatar billede arne_v Ekspert
14. december 2003 - 17:07 #5
Man skal eksplicit angive -source 1.4 til javac for at kunne bruge dem
da 1.3 er default.

java kommandoer har fået en stribe nye options: -enableassertions,
-disableassertions, -enablesystemassertions, -disablesystemassertions
Avatar billede dsj Nybegynder
14. december 2003 - 17:38 #6
ahh, så assert er en debug-funktion?

(smid venligst et svar arne)
Avatar billede arne_v Ekspert
14. december 2003 - 17:42 #7
En slags.

Jeg vil betragte den som mest relevant som et værktøj til
at få fejl til at ske der hvor de reelt er opstået.

Vi kender formentlig alle den situation hvor man har en null pointer
eller division by zero fejl et sted og så skal man gennemtrawle
den halve applikation for at finde det sted, hvor det startede med
at gå galt.
Avatar billede arne_v Ekspert
14. december 2003 - 17:43 #8
og et svar
Avatar billede soreno Praktikant
14. december 2003 - 17:48 #9
Men hvorfor et reserveret ord til det ?

Man kunne jo f.eks. skrive:

  public void f()
  {
    if(!Thread.holdsLock(this))
      throw new IllegalArgumentException("precondition not satisfied");

    synchronized(this)
    {
      //
    }
  }
Avatar billede arne_v Ekspert
14. december 2003 - 17:58 #10
Et keyword i sproget er det som gør det nemmest at minimere
overhead når assertions ikke er slået til.

Dit eksempel skulle jo laves som:

if(assertionsEnables)
  if(!Thread.holdsLock(this))
      throw new IllegalArgumentException("precondition not satisfied");
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester