In einer aktuellen CodeSOD-Folge auf The Daily WTF präsentiert Remy Porter ein Snippet des Lesers Frederick A aus einem Webkonferenz-Tool, das WebRTC zur Verbindung von Chat-Clients nutzt.
Die fragliche Methode IsCalling einer ConferenceService-Klasse soll prüfen, ob eine Konferenz aktiv ist. Ihre gesamte Logik besteht darin, m_ConnectionService.Core.State.IsWebRTCConnected in einem Try-Block zurückzugeben, während ein catch-Block ohne Typangabe jede Exception abfängt und false liefert. Die Begründung: Mehrere Objekte in der Kette können zum Aufrufzeitpunkt nicht existieren, sodass eine geworfene NullReferenceException bequem als „nicht verbunden“ interpretiert wird.
Frederick schlägt den idiomatischen C#-Fix vor: m_ConnectionService?.Core?.State?.IsWebRTCConnected ?? false, also Null-Conditional- und Null-Coalescing-Operatoren statt ausnahmegesteuerter Kontrollfluss.
Porter akzeptiert den Fix, merkt aber an, dass er keine wirkliche Lösung ist. Der Verbindungszustand ist eigentlich eine State Machine — verbunden, getrennt und vermutlich weitere ungeprüfte Zustände —, und ihn als boolesches Flag tief im Objektgraphen zu verstecken, ist das eigentliche Problem. Eine Komplettüberarbeitung empfiehlt er nicht, mahnt aber zu sorgfältigerer Modellierung von Zuständen.
Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.