Asserts VS Exceptions



  • Hallo zusammen. Und zwar habe ich mich gefragt, wann nutze ich Asserts und wann Exceptions? Ich habe zwar schon einen Beitrag hier im Forum gefunden, allerdings ist dieser 11 Jahre alt^^. Wie ist es denn nun aktuell? Im früheren Beitrag stand sinngemäß: Asserts eher auf Entwicklerseite und Exceptions eher für Benutzerseite. Hat sich da was geändert? In den letzten Repos auf GitHub die ich gesehen habe, habe ich zum Beispiel gar bkeine Asserts gesehen. Was ist eure Meinung? Habt ihr vielleicht ganz andere Methoden? Freue mich auf eure Antworten 😀



  • Kann nicht sein, wenn es doch so ist dann Programm kaputt --> assert()
    Alles andere --> throw



  • Assertions werden nur im Debug Modus mitkompiliert und dienen dazu mögliche Invarianten einzuhalten



  • @spiri sagte in Asserts VS Exceptions:

    Assertions werden nur im Debug Modus mitkompiliert und dienen dazu mögliche Invarianten einzuhalten

    Dann werden die Invarianten im Releasemodus nicht eingehalten?



  • Vielen Dank für die Antworten. Ich werde mich danach richtigen. 👍🏻



  • assert() ist sozusagen eine Debugging-Hilfe - man verwendet es um in Debug-Sessions möglichst früh aufzuzeigen wenn irgendwo Mist passiert.

    Man kann es einerseits einsetzen um seinen eigenen Code zu überprüfen (Invarianten bzw. generell Postconditions checken etc.), aber auch um zu prüfen dass z.B. Leute die den Code aufrufen den man selbst schreibt keinen Mist bauen (Preconditions checken).



  • Jo. Also verwende ich einfach für alles wo ich denke es könnte durch den User zu Problemen kommen exceptions. 👍🏻



  • Kann man so machen. Ist aber nicht unbedingt in jedem Fall die beste Wahl. Manchmal ist es vermutlich besser Dinge nur per assert() zu checken und in release Builds den ganzen Spass einfach wegcraschen zu lassen.



  • Dann doch gleich einen BSOD erzeugen. 😱


  • Mod

    @th69 sagte in Asserts VS Exceptions:

    Dann doch gleich einen BSOD erzeugen. 😱

    'Let it crash' ist ein gutes, gängiges Paradigma. Es ist deine Aufgabe als Programmierer, dass dein Code intern konsistent ist (was du mit asserts während des Testens prüfen kannst), aber es ist nicht deine Aufgabe, dem Nutzer auf die Finger zu gucken. Garbage in, garbage out. Dem Nutzer auf die Finger zu gucken ist wenn dann Aufgabe desjenigen, der die Finger des Nutzers überwacht.



  • Mir fällt gerade auf: vielleicht meint @Zhavok mit User wirklich den User, und nicht den "User Programmer". In dem Fall wäre es OK: falschen/unsinnigen/defekten User-Input sollte man in dem meisten Fällen schon überleben ohne zu crashen 🙂



  • Ja 🙂 Mit User meine ich den Nutzer, der das Programm am Ende verwendet. Und es ging mir eigentlich um solche Dinge wie "config-Datei wurde nicht gefunden“. Dafür wären ja so wie ich es verstanden habe eher exceptions geeignet.


  • Mod

    @zhavok sagte in Asserts VS Exceptions:

    Ja 🙂 Mit User meine ich den Nutzer, der das Programm am Ende verwendet. Und es ging mir eigentlich um solche Dinge wie "config-Datei wurde nicht gefunden“. Dafür wären ja so wie ich es verstanden habe eher exceptions geeignet.

    Korrekt.


Log in to reply