Czy w profesjonalnych kodach używa się assert
? czy może od tego są testy jednostkowe i zwykłe ify?
Ale jak chcesz zastąpić asserta za pomocą testów i ifów? Nie bardzo rozumiem... asserty wykonuje się właśnie w testach, żeby sprawdzić wynik
nie tylko w testach, ale też w kodzie np.:
public class RNajlepszy {
public static void main(String args[]){
int n=5;
assert n < 5;
}
}
zwróci AssertionError, więc można pyknąć:
public class RNajlepszy {
public static void main(String args[]){
int n=5;
try{
assert n < 5;
} catch(AssertionError e){
System.out.println("oj oj oj... dziwne u mnie działa");
}
}
}
@Shalom: śpi, a tak może byśmy się czegoś dowiedzieli....
Nie nie używa się. Chyba że Assert z JUnit w testach :P
Zresztą jaki miałoby to sens? Chcesz sprawdzić że n<5 to dajesz if i tyle :D
No więc w prakryce takich assertów opartych na słówku assert się nie używa.
Przez ostatnich 10 lat w różnych firmach i zespołach widziałem to chyba kilka razy w kodzie...
Jeśli już to te uzywa się te z guava (Preconditions)
albo inne (dość przydatne jest java.util.Objects.requireNotNull).
Natomiast assert z jvm można wykorzystac do innych głupich rzeczy.
Np. wywalanie debug logów z produkcji.
Jeśli logger.debug zwraca boolean (true!) to można napisać:
assert log.debug("a tu jestem.... " + this.verySlowToString());
i rozwiązać odwieczny problem if (log.isDebugEnabled() ) {
. Poprzez start wystemu z parmetrem -da.
Ja tak czasem robiłem - ale nie w kodzie dla kolegów :-)
Generalnie assert to takie zapomniane słówko kluczowe. Ze względu na to, że właśnie włączenie/wyłączenie assercji może mieć widoczne
w działaniu efekty uboczne... uważa, się je za lekko niebezpieczne.
Pomysł był dobry, ale wykonanie słabe. assert
powinien być używany jedynie w czasie deweloperki, a w kodzie produkcyjnym nie włączony.