Vai al contenuto

Do the right thing – Fa la cosa giusta

Scritto da:

Stefano Pascazi

Questo piccolo articolo nasce dall’esperienza personale lavorativa che mi permette di lavorare su molteplici tipologie di linguaggio e sulle più disperate applicazioni, da quelle monolitiche a quelle altamente scalabili, ma in tutte o quasi, noto che il programmatore o i programmatori che si sono cimentati nell’impresa prima di me, non si sono soffermati sul rendere il codice:

  • testabile
  • leggibile
  • con documentazione

Facciamo un po’ di chiarezza

Il codice è testabile quando vengono scritte tutte le funzioni lato test, quindi si tratta in definitiva, che per ogni metodo scritto, ne deve esistere uno identico utilizzabile solo per test. Tra i sistemi più noti per effettuare i test, esiste lo unit testing:

In ingegneria del software, per unit testing (testing d’unità o testing unitario) si intende l’attività di testing (prova, collaudo) di singole unità software. Per unità si intende normalmente il minimo componente di un programma dotato di funzionamento autonomo; a seconda del paradigma di programmazione o linguaggio di programmazione, questo può corrispondere per esempio a una singola funzione nella programmazione procedurale, o una singola classe o un singolo metodo nella programmazione a oggetti.

fonte: wikipedia

Il codice è leggibile quando qualsiasi persona in grado di comprendere il codice sorgente, riesce facilmente ad interpretare le operazioni e la logica utilizzata per raggiungere un dato scopo

Leggibile: Che si riesce a leggere, che è cioè facilmente decifrabile, chiaro alla lettura

fonte: treccani

Codice documentato o con documentazione è quel codice che non necessariamente deve possedere un libro di testo scritto, ma bensì, che per ogni metodo o funzione scritta, ci sia brevemente una descrizione di cosa si sta eseguendo. Per fare questo, esistono i commenti.

Il commento, nell’ambito dei linguaggi di programmazione, è una parte del codice sorgente che ha il solo scopo di descriverne le caratteristiche funzionali, ovvero di spiegare il funzionamento delle successive linee di codice, e che non fa parte dell’algoritmo risolutivo codificato in linguaggio di programmazione.

fonte wikipedia

Esempi pratici

Sappiate sin da subito che esiste una libreria in dotazione a qualsiasi linguaggio per scrivere uno unit/test. Poniamo l’esempio con PHP (non a caso è quello che ha applicativi dove al 99% dei casi, nessuno lo fà).
In PHP esiste la libreria PHPUnit, facilmente installabile tramite composer. Senza riportare codice di esempio o scriverne uno nuovo, sul sito ufficiale, esistono diversi esempi a partire dal primo.

Scrivere codice leggibile è una cosa veramente facile, basta solamente avere un briciolo di buon senso logico

<?php

(int)$a = 4;
if( $a == 0 || $a == 1 || $a == 2 || $a == 3 )
{
    (bool) $result = true;
} else {
    (bool) $result = false;
}

// meglio se faccio in questo modo:
// definisco una mappa di numeri accettati
(array) $map = [
    0,1,2,3
];

(int) $a = 4;
// utilizzo una funzione nativa di PHP 
// per controllare se esiste o meno quel dato
// nel mio array
if( in_array($a, $map) )
{
    (bool) $result = true;
} else {
    (bool) $result = false;
}

// posso scriverla ancora più leggibile? Certo
(array) $map = [
    0,1,2,3
];

(int) $a = 4;

(bool) $result = false;
if( in_array($a, $map) )
{
    $result = true;
}

// extra sulla leggibilità, 
// trasformiamo tutto in funzione e separiamo la logica
function test( int $number, array $map = [] ) : bool
{
    if( in_array($number, $map) ) {
        return true;
    }
    return false;
}

(array) $map = [
    0,1,2,3
];

(int) $a = 4;
(bool) $result = test( $a );

Come è possibile notare, man mano che ho riscritto il medesimo codice, risulta sempre più leggibile e comprensibile anche al primo sguardo. Ma la vera chicca, arriva quando il codice è commentato.

Utilizzando la parte finale del codice sopra indicato, è possibile segnalare all’utente lettore del codice, cosa stiamo facendo e cosa esegue la funzione test()

<?php

/**
 * Controlla se il dato numerico esiste nella mappa/array
 * 
 * @param int $number
 * @param array $map
 * @return bool
 */
function test( int $number, array $map = [] ) : bool
{
    if( in_array($number, $map) ) {
        return true;
    }
    return false;
}

So che ad un primo sguardo la sola cosa che si pensa è: “Cavolo ma c’è da scrivere ancora”, ebbene si anche se, tuttavia la maggior parte degli IDE, hanno in pancia un sistema per scrivere le annotazioni in maniera del tutto automatizzata (la descrizione va scritta a mano e preferibilmente in inglese)

Visto come è tutto molto più semplice e pulito in questo modo?

Piè di pagina

Mi farebbe piacere conoscere la vostra esperienza e soprattutto che metodologia utilizzate, se la utilizzate, per standardizzare quanto più possibile il vostro codice e soprattutto, se sto dicendo delle cavolate, perchè magari sono il solo a cercare di vederla in questo modo.

Articolo precedente

Come creare una coppia di chiavi RSA con openSSL

Unisciti alla discussione

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.