Volgens de Java code conventions mag je voor publieke methoden geen assertions gebruiken. Enkel voor private methoden. Zelfs protected methoden zijn dubieus. Publieke methoden moeten volgens die conventies bij uitzonderlijke gevallen excepties werpen.
Zo is het ook dat als je software libraries gebruikt en je een assert ziet failen, dit meestal een bug in de software (van de library) is, bij exceptions is het eerder een fout van jezelf als deze geworpen worden.
Ten slotte moeten volgens de Software Engineering assertions afgezet kunnen worden. Als je dus ooit later een product aan het ontwikkelen bent, zet je assertions aan. Is het af, dan zet je ook de assertion checkings af (zodat ze geen processing power meer innemen). Dan ga je er echter wel vanuit dat je product perfect is, want als er anders een fout optreedt weet de gebruiker echt helemaal niet wat er mis is gegaan. Je maakt het de programmeur dus erg moeilijk.
Ten slotte (dubbele ten slotte
) zijn er in C++ weinig goede assertion mechanismes en al helemaal niet in Java (deze staan per default af ...).
Conclusie (voor mij): in theorie moet je met assertions en dergelijke werken, maar in praktijk zijn exceptions zoveel gemakkelijker. Dus als je ooit in een tijdsdruk zit zal je exceptions toepassen, en waarschijnlijk dan nog op een lelijke en slechte manier. Verder zijn er soms zo'n ingewikkelde controle structuren dat assertions niet voldoen in hun huidige staat van technologie.