Code-Prompts: eine fertige Aufgabe für jede Sprache

Sechzehn Aufgabenstellungen, mit denen Sie Code generieren lassen, ohne lange zu beschreiben. In jeder stehen Sprache und Version, ein mögliches Framework und die Gründlichkeit der Fehlerbehandlung schon fest. Feldnamen anpassen, anwenden, Code lesen.

Funktionen und Helfer

Die Kleinigkeiten, die man in jedem Projekt neu schreibt: eine Hilfsfunktion in JavaScript generieren lassen, einen URL-Slug aus der Überschrift erzeugen, Beträge als Geld formatieren, Formularfelder prüfen und Arbeitstage zählen.

URL-Slug aus der Überschrift

Macht aus einem Artikeltitel eine saubere Adresse: Kleinschreibung, Bindestriche, nichts zum Escapen.

Prompt

Schreibe eine JavaScript-Funktion, die eine Artikelüberschrift in einen URL-Slug verwandelt: Kleinschreibung, Leerzeichen werden zu Bindestrichen, Umlaute werden zu ae/oe/ue und ß zu ss, Satzzeichen fallen weg, kein Bindestrich am Rand. Ohne Abhängigkeiten.

Ergebnis

export function slugify(title) { // Die Normalisierung zerlegt einen Umlaut in zwei Zeichen, das zweite fällt weg — in der URL bliebe davon nur %C3-Müll const base = title.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").toLowerCase() return base.replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "")}

Betrag als Geld formatieren

Tausenderpunkt, zwei Nachkommastellen und die Währung — gerundet wird vor dem Formatieren, nicht danach.

Prompt

Schreibe eine Python-Funktion, die ein Decimal als Geldbetrag im deutschen Format ausgibt: aus 1234.5 wird 1.234,50 EUR. Runde zuerst auf Cent und nie auf einem Float, und lass einen anderen Währungscode übergeben.

Ergebnis

def format_money(amount: Decimal, currency: str = "EUR") -> str: # vor dem Formatieren auf Cent quantisieren: auf einem Float geht der letzte Cent verloren value = amount.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP) return locale.format_string("%.2f", value, grouping=True) + " " + currency

Formularfeld prüfen

Ein regulärer Ausdruck für E-Mail und Telefonnummer, dazu die einzeilige Prüfung, die ihn benutzt.

Prompt

Schreibe reguläre Ausdrücke, die eine E-Mail-Adresse und eine deutsche Telefonnummer im Registrierungsformular prüfen, jeweils mit einer kurzen Prüffunktion. Erkläre jeden Teil des Musters, damit ich ihn anpassen kann.

Ergebnis

const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[a-z]+$/i// im Browser prüfen wir nur die Form — ob es die Adresse gibt, klärt die Bestätigungsmailexport const isEmail = (value) => EMAIL_RE.test(value.trim().toLowerCase())

Arbeitstage zwischen zwei Daten

Wochenenden und Feiertage abgezogen, und eine Exception für vertauschte Daten.

Prompt

Schreibe eine PHP-8.3-Funktion, die Arbeitstage zwischen zwei Daten zählt: Samstage, Sonntage und jedes Datum aus einem Feiertags-Array werden übersprungen. Wirf eine Exception, wenn das Enddatum vor dem Startdatum liegt.

Ergebnis

function workingDays(DateTimeImmutable $from, DateTimeImmutable $to, array $holidays = []): int{ $period = new DatePeriod($from, new DateInterval("P1D"), $to); $isWork = fn (DateTimeImmutable $d) => (int) $d->format("N") < 6 && !in_array($d->format("Y-m-d"), $holidays, true); return count(array_filter(iterator_to_array($period), $isWork));}

Daten und APIs

Das Gespräch mit fremden Diensten und der Datenbank: eine API-Anfrage in Python schreiben, den Aufruf mit Retry und Timeout absichern, eine CSV mit falschem Encoding importieren, eine Report-Abfrage bauen und seitenweise ausgeben.

API-Aufruf mit Wiederholungen

Timeout, Wiederholung bei 5xx und ein hartes Ende — damit ein träger Dienst nicht die ganze Anfrage blockiert.

Prompt

Schreibe eine TypeScript-Funktion, die eine HTTP-API mit vier Sekunden Timeout und höchstens drei Versuchen aufruft. Wiederhole nur bei 5xx und Netzwerkfehlern, nie bei 4xx, warte zwischen den Versuchen und wirf am Ende einen typisierten Fehler.

Ergebnis

export async function fetchWithRetry(url: string, tries = 3): Promise<Response> { const res = await fetch(url, { signal: AbortSignal.timeout(4000) }) if (res.ok || res.status < 500 || tries === 1) return res await new Promise((r) => setTimeout(r, 400)) return fetchWithRetry(url, tries - 1)}

Krumme CSV importieren

Liest eine Lieferantenpreisliste und legt kaputte Zeilen in eine eigene Datei, statt abzubrechen.

Prompt

Schreibe ein Python-Skript mit pandas, das eine Lieferantenpreisliste aus CSV importiert: Semikolon als Trenner, Komma als Dezimalzeichen, Preise kommen als Text, in manchen Zeilen fehlen sie ganz. Kaputte Zeilen nach rejected.csv, Dubletten nach order_id entfernen.

Ergebnis

orders = pd.read_csv("orders.csv", sep=";", decimal=",", on_bad_lines="warn")orders["total"] = pd.to_numeric(orders["total"], errors="coerce")bad = orders["total"].isna()orders.loc[bad].to_csv("rejected.csv", index=False)clean = orders.loc[~bad].drop_duplicates(subset="order_id")

Eine Report-Abfrage

Umsatz nach Kunde und Monat — geschrieben gegen das Schema, das Sie ins Datenfeld einfügen.

Prompt

Schreibe eine PostgreSQL-Abfrage zum Schema oben: Umsatz je Kunde und Monat für das letzte Jahr, absteigend sortiert, Kunden ohne Bestellung bleiben draußen.

Ergebnis

SELECT c.name, date_trunc('month', o.created_at) AS month, sum(o.total) AS revenueFROM orders oJOIN customers c ON c.id = o.customer_idWHERE o.created_at >= now() - interval '1 year'GROUP BY 1, 2ORDER BY revenue DESC

Seitenweise Ausgabe

Cursor-Pagination — die Variante, die keine Zeilen doppelt zeigt, wenn während des Scrollens neue dazukommen.

Prompt

Schreibe eine TypeScript-Funktion mit Prisma, die eine Seite veröffentlichter Beiträge per Cursor-Pagination liefert: zwanzig auf einmal, neueste zuerst, dazu ein nextCursor, das der Client für die nächste Seite zurückschickt.

Ergebnis

const page = await prisma.post.findMany({ where: { published: true }, orderBy: { createdAt: "desc" }, cursor: cursorId ? { id: cursorId } : undefined, take: 20,})

Oberfläche

Die Teile eines Bildschirms, die in Wahrheit Code sind: eine React-Komponente erzeugen, einen eigenen Hook schreiben, ein responsives Kartenraster mit CSS Grid bauen und eine Listenansicht in der App.

Ein React-Hook

Hält die Eingabe im Suchfeld zurück, damit die Liste nicht bei jedem Tastendruck neu geladen wird.

Prompt

Schreibe einen typisierten React-Hook, der einen Wert um 300 ms verzögert und den Timer beim Unmount aufräumt, dazu zwei Zeilen, wie ein Suchfeld ihn benutzt.

Ergebnis

export function useDebounced(value: string, delay = 300) { const [out, setOut] = useState(value) useEffect(() => { const id = setTimeout(() => setOut(value), delay) return () => clearTimeout(id) }, [value, delay]) return out}

Ein flexibles Kartenraster

Katalogkarten gehen von vier Spalten auf eine — ohne eine einzige Media Query.

Prompt

Schreibe das CSS für ein Kartenraster im Katalog: Karten mindestens 260px breit, die Reihe wird ganz gefüllt, 16px Abstand, keine Media Queries. Klassennamen nach BEM.

Ergebnis

.catalog__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 16px;}

Listenansicht in der App

Eine scrollende Bestellliste in Jetpack Compose — mit Tap auf die Zeile und einem leeren Zustand.

Prompt

Schreibe einen Jetpack-Compose-Screen mit einer scrollbaren Bestellliste: in der Zeile Nummer, Datum und Summe, ein Tap öffnet die Bestellung, bei leerer Liste erscheint ein Hinweis.

Ergebnis

@Composablefun OrderList(orders: List<Order>) { LazyColumn { items(orders) { order -> OrderRow(order, onClick = { openOrder(order.id) }) } }}

Skripte und Automatisierung

Code, der ohne Sie läuft: ein Skript schreiben lassen, ein Bash-Skript für das nächtliche Datenbank-Backup, ein kleines Kommandozeilen-Werkzeug und einen Cronjob, der nach Plan aufwacht.

Nächtliches Datenbank-Backup

Zieht den Dump, benennt die Datei nach Datum und löscht alles, was älter als ein Monat ist.

Prompt

Schreibe ein Bash-Skript, das eine PostgreSQL-Datenbank nach /backup dumpt, das Datum in den Dateinamen schreibt, Dumps älter als 30 Tage löscht und beim ersten Fehler abbricht. Ohne ShellCheck-Warnungen.

Ergebnis

#!/usr/bin/env bashset -euo pipefailstamp=$(date +%F)pg_dump --format=custom "$DATABASE_URL" > "/backup/db-$stamp.dump"find /backup -name "db-*.dump" -mtime +30 -delete

Ein Kommandozeilen-Werkzeug

Ein einmaliges Tool: läuft durch einen Ordner und benennt die Dateien darin nach Regel um.

Prompt

Schreibe ein Go-Kommandozeilenwerkzeug, das einen Ordner durchläuft und Fotos nach ihrem Aufnahmedatum umbenennt. Ordner als Flag, ohne --apply nur anzeigen, was sich ändern würde, und nur die Standardbibliothek.

Ergebnis

func main() { dir := flag.String("dir", ".", "Ordner mit den Aufnahmen") flag.Parse() if err := filepath.WalkDir(*dir, renameByShootDate); err != nil { log.Fatal(err) }}

Ein Job nach Zeitplan

Wacht werktags um sieben auf, holt die Zahlen von gestern und schickt sie per Mail.

Prompt

Schreibe einen Node.js-Job, der werktags um 07:00 die Umsätze von gestern aus PostgreSQL holt, daraus eine HTML-Tabelle baut und sie an den Vertrieb mailt. Fehler ins Log, der Prozess darf nicht sterben.

Ergebnis

// 07:00 werktags: die Zahlen müssen vor dem Standup auf dem Tisch liegencron.schedule("0 7 * * 1-5", async () => { const rows = await db.query(DAILY_SALES_SQL) await mailer.send({ to: "vertrieb@shop.de", subject: "Umsatz von gestern", html: render(rows) })})

Tests

Für Code, der längst läuft: Unit-Tests schreiben lassen, Pytest-Tests für eine bestehende Funktion und Prüfungen für einen Endpunkt samt den Randfällen, die man von Hand still überspringt.

Tests für eine Funktion

pytest mit parametrisierten Fällen: Null, ein negativer Betrag und None.

Prompt

Schreibe pytest-Tests für eine Funktion format_money(amount, currency): Null, ein großer Betrag, ein negativer, zwei Nachkommastellen und ein TypeError bei None. Mit parametrize.

Ergebnis

@pytest.mark.parametrize("amount,expected", [("0", "0,00"), ("1234.5", "1.234,50")])def test_format_money(amount, expected): assert format_money(Decimal(amount)) == expecteddef test_format_money_rejects_none(): with pytest.raises(TypeError): format_money(None)

Tests für einen Endpunkt

JUnit-Tests für GET und POST, samt 404 und Validierungsfehler.

Prompt

Schreibe JUnit-5-Tests für den REST-Endpunkt /api/orders: 200 mit Body für eine vorhandene Bestellung, 404 bei unbekannter id, 400 bei kaputtem Payload. Prüfe die JSON-Felder, nicht nur den Status.

Ergebnis

@Testvoid returnsNotFoundForUnknownOrder() throws Exception { mockMvc.perform(get("/api/orders/0")) .andExpect(status().isNotFound()) .andExpect(jsonPath("$.error").value("order_not_found"));}

Prompts für den Code-Generator: 16 fertige Aufgaben