assert - filozofia używania

0

Czy w profesjonalnych kodach używa się assert? czy może od tego są testy jednostkowe i zwykłe ify?

0

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

0

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");
		}
	}

}
0

@Shalom: śpi, a tak może byśmy się czegoś dowiedzieli....

1

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

1

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.

1

Pomysł był dobry, ale wykonanie słabe. assert powinien być używany jedynie w czasie deweloperki, a w kodzie produkcyjnym nie włączony.

1 użytkowników online, w tym zalogowanych: 0, gości: 1