ACCADEMIA AI · CAPITOLO 35 DI 50

Capitolo 35 · Sviluppatore

Crea funzioni chiare, testabili e facili da mantenere, partendo dai requisiti e dai casi limite.

codice pulito e manutenibile14 casi praticiPrompt copiabiliSviluppatore Lab
Progresso di lettura: 0%
Tutte le 50 lezioni
LEZIONE 01

Dieci righe oggi, dieci mesi domani

Una funzione per applicare sconti può sembrare perfetta con il primo ordine, ma fallire quando riceve una virgola, uno sconto negativo o importi con centesimi. La brevità del codice non garantisce qualità.

Lo sviluppatore usa l’AI per tradurre esigenze in regole comprensibili e verificabili: prima specifica il contratto, poi chiede una soluzione semplice e soltanto dopo la integra nel progetto.

💬 Prompt pronto da copiare

Devo realizzare una funzione per [scopo]. Prima di scrivere codice, fammi cinque domande su input, output, errori, casi limite e ambiente. Poi proponi una soluzione semplice e testabile. Non inventare requisiti.

LEZIONE 02

I sei pilastri del codice pulito

Leggibilità, responsabilità chiara, prevedibilità, testabilità, manutenibilità e compatibilità con il contesto sono qualità diverse ma complementari.

Un nome espressivo riduce le ambiguità; una funzione con un solo compito è più facile da verificare; errori espliciti evitano risultati ingannevoli. Non introdurre astrazioni solo per sembrare sofisticato.

💬 Prompt pronto da copiare

Valuta questa funzione secondo sei criteri: leggibilità, responsabilità, prevedibilità, testabilità, manutenzione e compatibilità. Per ogni criterio indica un problema concreto, se esiste, e una modifica minima. Codice: [incolla].

LEZIONE 03

Domanda 1 · Quale risultato serve davvero?

Parti dal risultato osservabile: non «crea una funzione per gestire le scorte», ma «se un articolo scende sotto la soglia, restituisci un avviso senza modificare il magazzino».

Un requisito espresso in termini di comportamento permette di costruire esempi di accettazione prima ancora di scegliere il linguaggio.

💬 Prompt pronto da copiare

Aiutami a trasformare questa esigenza in tre comportamenti verificabili, senza scrivere ancora codice: [descrizione]. Distingui risultato atteso, condizioni e vincoli.

LEZIONE 04

Domanda 2 · Quali input sono ammessi?

Indica tipi, formati, unità, valori opzionali e intervalli. Una stringa con spazi non è automaticamente un numero e una data non è sempre un istante con fuso orario.

Quando il formato non è definito, l’AI deve chiedere chiarimenti invece di adottare conversioni implicite.

💬 Prompt pronto da copiare

Definisci il contratto degli input per [funzione]. Elenca tipi, formati, valori obbligatori, intervalli, normalizzazione e casi da rifiutare. Non presumere conversioni non autorizzate.

LEZIONE 05

Domanda 3 · Quale output e quali errori?

Una funzione può restituire un valore, un oggetto strutturato oppure segnalare un errore: sono scelte progettuali che devono essere coerenti con il chiamante.

Meglio un errore esplicito che un valore plausibile ma sbagliato. Se il sistema usa eccezioni o codici di errore, il contratto deve dichiararlo.

💬 Prompt pronto da copiare

Progetta input, output e gestione degli errori per [funzione]. Fornisci esempi di successo, input non valido e caso limite. Non mescolare calcolo, stampa HTML e salvataggio.

LEZIONE 06

Domanda 4 · Casi limite e regole di dominio

Valori vuoti, duplicati, importi negativi, fusi orari, arrotondamenti e operazioni concorrenti non sono dettagli da aggiungere alla fine.

Per importi monetari, la scelta della precisione e del momento dell’arrotondamento dipende dalle regole contabili applicabili; non si può improvvisare.

💬 Prompt pronto da copiare

Elenca almeno otto casi limite per questa funzione: [descrizione]. Separa regole certe da decisioni da concordare e proponi risultati attesi prima di scrivere test.

LEZIONE 07

Domanda 5 · Versioni e dipendenze

Una funzione può essere corretta in Python 3.12 e incompatibile con una versione precedente. Lo stesso vale per PHP, browser, database, librerie e sistemi operativi.

Chiedi sempre l’ambiente reale e non aggiungere pacchetti esterni quando la libreria standard è sufficiente.

💬 Prompt pronto da copiare

Scrivi una soluzione compatibile esclusivamente con [linguaggio, versione, sistema e librerie disponibili]. Evita sintassi e API successive. Indica ogni dipendenza e come verificare la compatibilità.

LEZIONE 08

Il laboratorio del libro · Sconti con Decimal

Nel caso didattico del PDF, prezzo e percentuale vengono convertiti in Decimal, verificati come numeri finiti e controllati rispetto ai limiti ammessi. La funzione restituisce un valore, senza stampare o accedere al database.

Il calcolo usa un arrotondamento esplicito a due decimali. In un gestionale reale le regole di sconti, imposte e arrotondamenti devono essere definite e verificate in modo indipendente.

💬 Prompt pronto da copiare

Agisci come sviluppatore Python senior. Scrivi una funzione prezzo_scontato(prezzo, sconto_percentuale) usando Decimal, rifiutando valori non finiti, prezzi negativi e sconti fuori 0–100. Chiarisci prima le regole di arrotondamento. Mantieni la funzione pura, aggiungi docstring e test, e non dichiarare di averli eseguiti.

LEZIONE 09

Test: normali, estremi e di errore

Nel PDF, 100 euro con sconto 20% deve produrre 80,00; 19,99 senza sconto deve restare 19,99; 50 con sconto 100% deve diventare 0,00.

Servono anche prove con sconto negativo, input non numerico, valori non finiti e importi ai confini. I test generati dall’AI vanno realmente eseguiti e confrontati con risultati indipendenti.

💬 Prompt pronto da copiare

Scrivi una tabella di test per [funzione] con input, output atteso e motivo del test. Includi almeno tre casi normali, tre limiti e tre errori. Distingui test proposti da test effettivamente eseguiti.

LEZIONE 10

Una responsabilità per funzione

Se una sola funzione legge un database, calcola prezzi, compone HTML e invia email, ogni cambiamento rischia di alterare parti non correlate.

Separare la logica pura dagli effetti esterni rende più semplice testare, riutilizzare e capire il codice. Non significa creare un’architettura eccessiva per compiti semplici.

💬 Prompt pronto da copiare

Analizza questa funzione: [codice]. Identifica le responsabilità mescolate e proponi un refactoring incrementale con interfaccia pubblica invariata. Prima suggerisci test di regressione.

LEZIONE 11

Sicurezza, riservatezza e autorizzazioni

Non incollare password, chiavi API, token o dati personali in un prompt. Sostituiscili con valori fittizi e verifica sempre i controlli lato server.

Per upload, autenticazione e dati sensibili, la qualità del codice dipende anche dalla configurazione, dai permessi e dalle procedure operative.

💬 Prompt pronto da copiare

Prima di generare codice per [funzione], elenca minacce realistiche, autorizzazioni, validazioni lato server e dati da non esporre. Proponi verifiche sicure con dati fittizi.

LEZIONE 12

Manutenzione e compatibilità del codice legacy

Modernizzare non significa riscrivere tutto. Occorre conservare il comportamento osservabile, controllare le versioni delle dipendenze e introdurre cambiamenti piccoli e reversibili.

Un piano di rollback e test prima/dopo sono particolarmente importanti quando una funzione serve pagine già pubblicate.

💬 Prompt pronto da copiare

Devo aggiornare una funzione legacy da [versione] a [versione]. Mantieni firma e comportamento. Individua incompatibilità, proponi una modifica minima, test di regressione e piano di ripristino.

LEZIONE 13

La qualità è anche saper scegliere quanto basta

Una conversione semplice può stare in poche righe; un sistema con pagamenti, dati personali o autorizzazioni richiede controlli più rigorosi. Il codice pulito non coincide con il codice più lungo.

Prima di considerare pronta una funzione, verifica requisiti, risultati, test, compatibilità e rischi residui. Non chiamare «superato» un test mai eseguito.

💬 Prompt pronto da copiare

Valuta se questa soluzione è proporzionata al problema: [codice e requisiti]. Indica complessità superflua, rischi non gestiti e controlli indispensabili prima della pubblicazione.

DAL LIBRO

14 casi pratici · Dalle funzioni quotidiane ai servizi professionali

Ogni caso spiega il risultato desiderato, propone un prompt copiabile e indica verifiche concrete. I primi sette sono accessibili a chi comincia; gli altri sette affrontano progetti più complessi.

CASO PRATICO 01 · PER CHI COMINCIA

Ordinare una lista di nomi

Eliminare soltanto duplicati secondo una regola dichiarata, senza confondere omonimi.

💬 Prompt pronto da copiare

Crea in Python una funzione che riceva nomi, elimini duplicati esatti ignorando maiuscole e spazi ai margini e restituisca un elenco ordinato senza modificare l’originale. Spiega accenti e omonimi; includi test.

Come verificare. Liste vuote, accenti, nomi simili e valori non testuali.

CASO PRATICO 02 · PER CHI COMINCIA

Dividere una spesa condivisa

Ripartire quote e anticipi senza perdere centesimi.

💬 Prompt pronto da copiare

Progetta una funzione Python per dividere una spesa tra N persone, considerando anticipi. Prima chiedi come distribuire centesimi residui e quali regole di ripartizione usare. Includi test.

Come verificare. Somma delle quote identica al totale, anticipi e arrotondamenti.

CASO PRATICO 03 · PER CHI COMINCIA

Validare un modulo di iscrizione

Dare messaggi utili nel browser, mantenendo la validazione anche sul server.

💬 Prompt pronto da copiare

Scrivi una funzione JavaScript per verificare nome ed email obbligatori con messaggi comprensibili. Spiega quali verifiche vanno ripetute lato server e aggiungi test.

Come verificare. Campi vuoti, spazi, email inattese e invii ripetuti.

CASO PRATICO 04 · PER CHI COMINCIA

Convertire temperature

Usare una funzione pura con input finiti e risultati verificabili.

💬 Prompt pronto da copiare

Crea una funzione JavaScript pura Celsius→Fahrenheit che accetti numeri finiti e rifiuti valori invalidi. Spiega la formula e aggiungi test con risultati attesi.

Come verificare. 0 °C = 32 °F; 100 °C = 212 °F; input non numerici.

CASO PRATICO 05 · PER CHI COMINCIA

Raggruppare una lista della spesa

Unire quantità soltanto se le unità sono compatibili.

💬 Prompt pronto da copiare

Scrivi una funzione Python che raggruppi prodotti con nome, quantità e unità. Non sommare unità incompatibili senza una conversione definita. Gestisci dati incompleti e aggiungi test.

Come verificare. Duplicati, unità differenti e quantità mancanti.

CASO PRATICO 06 · PER CHI COMINCIA

Filtrare appuntamenti per giorno

Distinguere data civile, orario e fuso orario.

💬 Prompt pronto da copiare

Crea una funzione che filtri appuntamenti per data ISO YYYY-MM-DD. Se sono presenti orari e fusi, chiedimi prima la regola da applicare. Includi esempi e test.

Come verificare. Giorni vuoti, date invalide e più eventi nello stesso giorno.

CASO PRATICO 07 · PER CHI COMINCIA

Generare token dimostrativi

Usare secrets invece di random per valori imprevedibili.

💬 Prompt pronto da copiare

Crea in Python una funzione che generi token dimostrativi con secrets, lunghezza configurabile e limiti ragionevoli. Spiega differenze rispetto a random e aggiungi test.

Come verificare. Lunghezza, tipo e parametri non validi; non è un sistema completo di autenticazione.

CASO PRATICO 08 · PER CHI PROGRAMMA GIÀ

Endpoint REST con responsabilità separate

Separare validazione, logica, persistenza e autorizzazioni.

💬 Prompt pronto da copiare

Progetta un endpoint REST di prenotazione per [stack]. Separa validazione, logica applicativa e accesso ai dati. Chiedi prima schema e requisiti mancanti; includi errori, permessi e test.

Come verificare. Richieste valide, malformate, duplicate e non autorizzate.

CASO PRATICO 09 · PER CHI PROGRAMMA GIÀ

Modernizzare una funzione legacy

Conservare interfaccia pubblica e risultati osservabili.

💬 Prompt pronto da copiare

Modernizza questa funzione per [linguaggio e versione] mantenendo firma e comportamento. Identifica dipendenze, modifica minima, regressioni e rollback. Codice: [incolla].

Come verificare. Input/output prima e dopo e ambiente reale.

CASO PRATICO 10 · PER CHI PROGRAMMA GIÀ

Leggere un CSV molto grande

Elaborare a flusso senza accumulare tutto in memoria.

💬 Prompt pronto da copiare

Scrivi una funzione Python che legga un CSV riga per riga, controlli le colonne e produca un riepilogo. Gestisci codifica, righe malformate e memoria; non scartare errori in silenzio.

Come verificare. File vuoti, intestazioni mancanti, righe danneggiate e file grandi.

CASO PRATICO 11 · PER CHI PROGRAMMA GIÀ

Retry limitati per API

Evitare duplicazioni nelle operazioni non idempotenti.

💬 Prompt pronto da copiare

Progetta una funzione HTTP con timeout, retry limitati e backoff. Distingui errori temporanei e permanenti, e spiega come prevenire operazioni duplicate.

Come verificare. Timeout, 4xx, 5xx e numero massimo di tentativi.

CASO PRATICO 12 · PER CHI PROGRAMMA GIÀ

Upload server-side sicuro

Non fidarsi di nomi e tipi dichiarati dal client.

💬 Prompt pronto da copiare

Progetta un upload server-side per [stack] con autorizzazioni, limiti di dimensione, verifica del tipo reale, nomi sicuri e percorso controllato. Fornisci test e limiti.

Come verificare. File troppo grandi, nomi malevoli, tipi inattesi e utenti non autorizzati.

CASO PRATICO 13 · PER CHI PROGRAMMA GIÀ

Cache con isolamento per utente

Definire chiave, scadenza e invalidazione senza mescolare dati.

💬 Prompt pronto da copiare

Proponi una funzione di cache per [stack]. Definisci chiavi, TTL, invalidazione, isolamento per utente e casi in cui evitarla. Includi test.

Come verificare. Scadenza, invalidazione, concorrenza e autorizzazioni.

CASO PRATICO 14 · PER CHI PROGRAMMA GIÀ

Refactoring di una funzione monolitica

Separare logica pura, database, HTML, email e log.

💬 Prompt pronto da copiare

Analizza questa funzione [codice] e proponi refactoring incrementale. Separa logica pura, effetti esterni e dipendenze, conserva i risultati osservabili e prepara test prima delle modifiche.

Come verificare. Regressioni, effetti collaterali e risultati invariati.

IL PROMPT DA CONSERVARE

Il contratto di uno sviluppatore attento alla manutenzione

Il prompt finale del libro parte dai requisiti mancanti e impone una soluzione compatibile, semplice e verificabile. Non accetta API inventate né test dichiarati come eseguiti senza prova.

💬 Prompt pronto da copiare

Agisci come uno sviluppatore software senior, attento a leggibilità, sicurezza e manutenzione. Devo realizzare questa funzione: [descrizione]. Ambiente: [linguaggio, versione, framework, sistema]. Prima di scrivere codice, individua fino a cinque requisiti essenziali mancanti e chiedimi chiarimenti. Poi definisci input, output, errori, vincoli e casi limite. Proponi la soluzione più semplice con nomi chiari, responsabilità separate, commenti utili e nessuna dipendenza superflua. Aggiungi esempi, test normali e di errore, considerazioni di sicurezza e istruzioni per verificare. Non inventare API o compatibilità e non dichiarare test eseguiti se non li hai realmente eseguiti.

LABORATORIO VISIVO

🔎 Prima e dopo · Quattro esempi inediti

Quattro richieste trasformate in specifiche di sviluppo controllabili. Seleziona il caso e copia il prompt pronto.

✗ Prima

Fammi una funzione che conta i costumi.

✓ Dopo

La funzione riceve una lista di capi con identificativo e stato. Restituisce quanti sono disponibili, senza modificare l’elenco; segnala stati sconosciuti e verifica lista vuota e identificativi duplicati.

💬 Prompt pronto da copiare

Progetta in Python una funzione pura che conti i costumi disponibili da una lista di record. Prima chiarisci stati ammessi e politica sui duplicati. Non modificare l’input. Fornisci firma, docstring, test normali e di errore.

STRUMENTO INTERATTIVO

🛠️ Sviluppatore Lab · Crea il tuo prompt

Descrivi la funzione e il contesto. Il laboratorio compone un prompt strutturato da copiare in ChatGPT: non genera codice automaticamente, non invia dati e non richiede API.

Compila la funzione e premi «Genera prompt».
VERIFICA

🧠 Quiz finale · Capitolo 35

Tre domande. Dopo la correzione comparirà soltanto ✓ o ✗ accanto alla risposta selezionata.

1. Che cosa rende una funzione manutenibile?

2. Come vanno gestiti i requisiti mancanti?

3. Quando si può affermare che i test sono superati?

Rispondi alle tre domande per vedere il punteggio.

I progressi del quiz sono salvati su questo dispositivo.