Codeprompts: een kant-en-klare taak voor elke taal

Zestien opdrachten voor wie code wil laten genereren zonder eerst de helft uit te leggen. In elke staat al welke taal en versie bedoeld zijn, of er een framework bij komt kijken en hoe grondig fouten afgehandeld moeten worden — vervang je eigen veldnamen en lees de code.

Functies en hulpjes

De kleine dingen die je in elk project opnieuw schrijft: een hulpfunctie schrijven in Python, een slug uit de kop, een bedrag in euro's formatteren, een formulierveld valideren en werkdagen tussen twee datums berekenen.

URL-slug uit de kop

Maakt van een artikelkop een nette webadres: kleine letters, streepjes, niets om te escapen.

Prompt

Schrijf een JavaScript-functie die een artikelkop omzet naar een URL-slug: kleine letters, spaties worden streepjes, accenten en de ij blijven leesbaar, leestekens vallen weg en er staat nooit een streepje aan het begin of eind. Zonder afhankelijkheden.

Resultaat

export function slugify(title) { // de normalisatie haalt de letter en het accent uit elkaar, het accent gaat weg — in een URL bleef daar alleen %C3-rommel van over const base = title.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").toLowerCase() return base.replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "")}

Een bedrag opmaken

Duizendtalscheiding, twee decimalen en de valuta — afgerond voordat er wordt opgemaakt, niet erna.

Prompt

Schrijf een Python-functie die een Decimal als bedrag in Nederlandse opmaak toont: 1234.5 wordt 1.234,50 EUR. Rond eerst af op centen en nooit op een float, en laat een andere valutacode doorgeven.

Resultaat

def format_money(amount: Decimal, currency: str = "EUR") -> str: # eerst naar centen afronden, daarna pas opmaken: op een float verdwijnt de laatste cent value = amount.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP) return locale.format_string("%.2f", value, grouping=True) + " " + currency

Een formulierveld controleren

Een reguliere expressie voor e-mail en telefoon, plus de controle van één regel die hem gebruikt.

Prompt

Schrijf reguliere expressies die een e-mailadres en een Nederlands telefoonnummer in het registratieformulier controleren, elk met een korte controlefunctie. Leg uit wat elk deel van het patroon doet, zodat ik het kan aanpassen.

Resultaat

const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[a-z]+$/i// in de browser controleren we alleen de vorm — of het adres bestaat, bewijst de bevestigingsmailexport const isEmail = (value) => EMAIL_RE.test(value.trim().toLowerCase())

Werkdagen tussen twee datums

Weekenden en feestdagen eraf, en een uitzondering als de datums omgedraaid binnenkomen.

Prompt

Schrijf een PHP 8.3-functie die werkdagen tussen twee datums telt: sla zaterdagen, zondagen en elke datum uit een feestdagen-array over. Gooi een uitzondering als de einddatum voor de begindatum ligt.

Resultaat

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));}

Data en APIs

Het gesprek met andermans dienst en je eigen database: een API aanroepen in code met retries, een CSV-bestand importeren met rommelige data, een SQL-rapportquery laten schrijven en een lijst met paginering.

API-aanroep met herhalingen

Een timeout, een herhaling bij 5xx en een harde stop: één trage dienst mag het hele verzoek niet ophangen.

Prompt

Schrijf een TypeScript-functie die een HTTP-API aanroept met vier seconden timeout en maximaal drie pogingen. Herhaal alleen bij 5xx en netwerkfouten, nooit bij 4xx, wacht tussen de pogingen en gooi een getypeerde fout zodra ze op zijn.

Resultaat

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)}

Een scheve CSV importeren

Leest de prijslijst van een leverancier en zet kapotte regels in een eigen bestand in plaats van te stoppen.

Prompt

Schrijf een Python-script met pandas dat de prijslijst van een leverancier uit een CSV importeert: puntkomma als scheidingsteken, komma als decimaalteken, prijzen komen als tekst binnen en ontbreken soms helemaal. Zet de foute regels in rejected.csv en haal dubbelen op order_id eruit.

Resultaat

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")

Een rapportquery

Omzet per klant en per maand, geschreven op het schema dat je in het datavenster plakt.

Prompt

Schrijf een PostgreSQL-query voor het schema hierboven: omzet per klant en per maand over het afgelopen jaar, van groot naar klein, zonder de klanten die nooit iets bestelden.

Resultaat

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

Een gepagineerde lijst

Cursorpaginatie: de variant die geen regels dubbel toont als er tijdens het scrollen nieuwe bij komen.

Prompt

Schrijf een TypeScript-functie met Prisma die een pagina gepubliceerde posts teruggeeft met cursorpaginatie: twintig per keer, de nieuwste bovenaan, plus een nextCursor die de client terugstuurt voor de volgende pagina.

Resultaat

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

Interface

De stukken scherm die eigenlijk code zijn: een React-component schrijven, een eigen hook voor het ophalen van data, een responsive kaartenraster met CSS grid en een lijstscherm in een app.

Een React-hook

Houdt de invoer in het zoekveld tegen, zodat de lijst niet bij elke toetsaanslag opnieuw wordt opgehaald.

Prompt

Schrijf een getypeerde React-hook die een waarde 300 ms vertraagt en zijn timer opruimt bij unmount, plus twee regels die laten zien hoe een zoekveld hem gebruikt.

Resultaat

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}

Een meebewegend kaartenraster

Catalogus-kaarten gaan van vier kolommen naar één, zonder ook maar één media query.

Prompt

Schrijf de CSS voor een kaartenraster in de catalogus: kaarten minstens 260px breed, de rij helemaal gevuld, 16px ruimte, geen media queries. Klassenamen volgens BEM.

Resultaat

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

Een lijstscherm

Een scrollende bestellijst in Jetpack Compose, met een tik op de regel en een lege staat.

Prompt

Schrijf een Jetpack Compose-scherm met een scrollbare bestellijst: elke regel toont nummer, datum en bedrag, een tik opent de bestelling en bij een lege lijst verschijnt een melding.

Resultaat

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

Scripts en automatisering

Code die zonder jou draait: een bash-script schrijven, een script voor de nachtelijke back-up van de database en een cronjob instellen voor een terugkerende taak die vanzelf wakker wordt.

Nachtelijke back-up van de database

Maakt de dump, noemt het bestand naar de datum en wist alles wat ouder is dan een maand.

Prompt

Schrijf een Bash-script dat een PostgreSQL-database dumpt naar /backup met de datum in de bestandsnaam, dumps ouder dan 30 dagen verwijdert en bij de eerste fout stopt. Zonder ShellCheck-waarschuwingen.

Resultaat

#!/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

Een hulpmiddel voor de opdrachtregel

Een eenmalig gereedschap: loopt door een map en hernoemt de bestanden volgens een regel.

Prompt

Schrijf een Go-opdrachtregelprogramma dat door een map loopt en fotos hernoemt naar de datum waarop ze zijn gemaakt. De map komt binnen als flag, zonder --apply toon je alleen wat er zou veranderen, en gebruik alleen de standaardbibliotheek.

Resultaat

func main() { dir := flag.String("dir", ".", "map met de fotos") flag.Parse() if err := filepath.WalkDir(*dir, renameByShootDate); err != nil { log.Fatal(err) }}

Een taak op een schema

Wordt om zeven uur op werkdagen wakker, haalt de cijfers van gisteren op en mailt ze door.

Prompt

Schrijf een Node.js-taak die op werkdagen om 07:00 de omzet van gisteren uit PostgreSQL haalt, er een HTML-tabel van maakt en die naar het verkoopteam mailt. Log fouten en laat het proces nooit omvallen.

Resultaat

// zeven uur op werkdagen: de cijfers moeten er zijn voordat de dagstart begintcron.schedule("0 7 * * 1-5", async () => { const rows = await db.query(DAILY_SALES_SQL) await mailer.send({ to: "verkoop@winkel.nl", subject: "Omzet van gisteren", html: render(rows) })})

Tests

Unittests schrijven voor code die er al staat: tests voor een losse functie, tests voor een API-endpoint en precies die randgevallen afdekken die je met de hand stilletjes overslaat.

Tests voor een functie

pytest met geparametriseerde gevallen: nul, een negatief bedrag en None.

Prompt

Schrijf pytest-tests voor een functie format_money(amount, currency): nul, een groot bedrag, een negatief bedrag, twee decimalen en een TypeError als er None binnenkomt. Met parametrize.

Resultaat

@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 voor een endpoint

JUnit-tests op GET en POST, inclusief de 404 en de validatiefout.

Prompt

Schrijf JUnit 5-tests voor het REST-endpoint /api/orders: 200 met body voor een bestaande bestelling, 404 bij een onbekende id, 400 bij een kapotte payload. Controleer de JSON-velden, niet alleen de status.

Resultaat

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

Prompts voor de codegenerator: 16 kant-en-klare taken