Okay, liebe C# Programmierer, lasst uns über ein Szenario sprechen, das wahrscheinlich schon den ein oder anderen von euch heimgesucht hat: Du hast einen Code geschrieben, bist eigentlich ganz zufrieden damit, fragst dann spaßeshalber ChatGPT nach seiner Meinung, und plötzlich spuckt die KI eine lange Liste von potenziellen Problemen aus, von denen du noch nie etwas gehört hast. Und das Schlimmste: Du verstehst beim besten Willen nicht, *warum* ChatGPT überhaupt ein Problem sieht. Panik? Frustration? Willkommen im Club!
In diesem Artikel wollen wir uns genau dieser Situation widmen. Wir werden untersuchen, wie du mit ChatGPT als Code-Review-Tool umgehen kannst, wie du die von der KI gemeldeten Probleme interpretierst und vor allem, wie du herausfindest, ob und warum die KI überhaupt Recht hat. Denn seien wir ehrlich: ChatGPT ist mächtig, aber nicht unfehlbar.
Der erste Kontakt: ChatGPT und dein C# Code
Sagen wir, du hast eine Funktion geschrieben, die eine Liste von Zahlen sortiert und die größte Zahl zurückgibt. Der Code sieht vielleicht so aus:
using System;
using System.Collections.Generic;
using System.Linq;
public class NumberHelper
{
public int FindLargestAndSort(List<int> numbers)
{
if (numbers == null || numbers.Count == 0)
{
throw new ArgumentException("Die Liste darf nicht null oder leer sein.");
}
numbers.Sort(); // Sortiert die Liste aufsteigend
return numbers.Last(); // Gibt das letzte Element zurück (das größte nach der Sortierung)
}
}
Du bist zufrieden, der Code funktioniert. Aber dann fragst du ChatGPT:
„Kannst du diesen C# Code auf potenzielle Probleme überprüfen?”
Und ChatGPT antwortet vielleicht mit einer Liste, die unter anderem Folgendes beinhaltet:
- „Die Funktion wirft eine Ausnahme, wenn die Liste leer ist, was korrekt ist, aber die Ausnahmebehandlung könnte verbessert werden.”
- „Die Sortiermethode
numbers.Sort()
verändert die Original-Liste. Ist das beabsichtigt? Wenn nicht, sollte eine Kopie der Liste sortiert werden.” - „Die Verwendung von
numbers.Last()
könnte ineffizient sein, da sie die gesamte Liste durchlaufen muss, um das letzte Element zu finden.”
Und jetzt? Bist du ein schlechter Programmierer? Hat ChatGPT Recht? Lass uns diese Punkte einzeln durchgehen.
Punkt 1: Die Ausnahmebehandlung
ChatGPT merkt an, dass die Ausnahmebehandlung „verbessert” werden könnte. Was bedeutet das? Hier geht es oft um Best Practices. Anstatt einfach eine generische ArgumentException
zu werfen, könnte man eine spezifischere Exception wie ArgumentNullException
(wenn die Liste null
ist) oder eine eigene Exception-Klasse erstellen, die den spezifischen Fehlerfall besser beschreibt. Das macht den Code lesbarer und wartbarer.
Entscheidung: Hat ChatGPT Recht? Ja, in dem Sinne, dass die Exceptionbehandlung *optimiert* werden könnte. Aber ist es ein kritischer Fehler? Wahrscheinlich nicht, solange die Ausnahme korrekt geworfen wird, wenn die Liste leer ist.
Punkt 2: Die Original-Liste wird verändert
Hier kommen wir zu einem wichtigen Punkt: Seiteneffekte. Die Funktion FindLargestAndSort
nimmt eine Liste entgegen und sortiert sie. Das bedeutet, dass die Original-Liste, die an die Funktion übergeben wurde, *verändert* wird. Ist das beabsichtigt? Wenn ja, ist alles in Ordnung. Wenn aber der Aufrufer der Funktion erwartet, dass die Original-Liste unverändert bleibt, haben wir ein Problem.
ChatGPT schlägt vor, eine Kopie der Liste zu sortieren. Das können wir mit LINQ erreichen:
using System;
using System.Collections.Generic;
using System.Linq;
public class NumberHelper
{
public int FindLargestAndSort(List<int> numbers)
{
if (numbers == null || numbers.Count == 0)
{
throw new ArgumentException("Die Liste darf nicht null oder leer sein.");
}
List<int> sortedNumbers = numbers.OrderBy(n => n).ToList(); // Erstellt eine sortierte Kopie
return sortedNumbers.Last();
}
}
Hier verwenden wir OrderBy
, um eine neue, sortierte Liste zu erstellen, ohne die Original-Liste zu verändern.
Entscheidung: Hat ChatGPT Recht? Ja, absolut! Seiteneffekte können schwerwiegende Fehler verursachen. Es ist immer besser, explizit zu sein und Seiteneffekte zu vermeiden, wenn möglich. Dies ist ein sehr wertvoller Hinweis von ChatGPT.
Punkt 3: Die Ineffizienz von `numbers.Last()`
ChatGPT bemängelt die Verwendung von numbers.Last()
. Hier wird es etwas kniffliger. In den meisten Implementierungen (insbesondere bei List<T>
) ist der Zugriff auf das letzte Element sehr schnell, da die Liste intern als Array gespeichert ist und der Index des letzten Elements bekannt ist. Es handelt sich also *nicht* um ein Durchlaufen der gesamten Liste.
ABER: Es gibt Ausnahmen! Wenn die Liste eine LinkedList<T>
wäre, müsste Last()
tatsächlich die gesamte Liste durchlaufen.
Eine alternative Lösung wäre, das letzte Element direkt über den Index zuzugreifen:
return numbers[numbers.Count - 1];
Dies wäre in jedem Fall effizient, unabhängig von der Art der Liste (List oder LinkedList).
Entscheidung: Hat ChatGPT Recht? Teilweise. In der typischen Verwendung mit List<T>
ist die Ineffizienz minimal. Aber ChatGPT hat darauf hingewiesen, dass es *potenziell* ineffizient sein könnte, je nach Implementierung der Liste. Es ist also ein guter Hinweis, um über die zugrundeliegende Datenstruktur nachzudenken.
ChatGPT als Sparringspartner: Mehr Fragen stellen, als Antworten erwarten
Das obige Beispiel zeigt, dass ChatGPT ein wertvolles Werkzeug für Code Reviews sein kann. Aber es ist wichtig, ChatGPT nicht blind zu vertrauen. Betrachte ChatGPT eher als einen Sparringspartner, der Fragen aufwirft und dich dazu anregt, über deinen Code nachzudenken.
Hier sind einige Tipps, wie du ChatGPT effektiv nutzen kannst:
- Sei präzise in deiner Anfrage: Je genauer du deine Frage formulierst, desto besser die Antwort. Anstatt zu fragen „Ist dieser Code gut?”, frage lieber „Gibt es potenzielle Performance-Probleme in diesem Code?” oder „Gibt es Möglichkeiten, die Lesbarkeit dieses Codes zu verbessern?”.
- Hinterfrage die Antworten: Verstehe *warum* ChatGPT ein Problem sieht. Versuche, die Begründung der KI nachzuvollziehen. Recherchiere, wenn du etwas nicht verstehst.
- Verwende verschiedene Prompts: Spiele mit verschiedenen Formulierungen, um unterschiedliche Perspektiven zu erhalten.
- Vergleiche ChatGPT mit anderen Tools: Nutze auch andere Code-Analyse-Tools und Linting-Tools, um ein umfassenderes Bild zu erhalten.
- Denke kritisch: Am Ende bist du als Programmierer verantwortlich für den Code. Vertraue nicht blind auf die KI, sondern nutze dein eigenes Urteilsvermögen und deine Erfahrung.
Fazit: KI ist ein Werkzeug, kein Orakel
ChatGPT ist ein mächtiges Werkzeug, das dir helfen kann, besseren C# Code zu schreiben. Es kann dich auf potenzielle Probleme aufmerksam machen, die du übersehen hast, und dich dazu anregen, über Best Practices und Code-Qualität nachzudenken. Aber es ist wichtig, ChatGPT nicht als Orakel zu betrachten. Hinterfrage die Antworten, verstehe die Begründungen und nutze dein eigenes Urteilsvermögen. Wenn du das tust, kannst du ChatGPT als wertvollen Partner in deinem Programmier-Workflow einsetzen.
Also, das nächste Mal, wenn ChatGPT deinen Code kritisiert und du nicht verstehst, warum: Keine Panik! Betrachte es als eine Chance zu lernen und deinen Code zu verbessern. Und vergiss nicht: Am Ende sitzt *du* am Steuer!