Prima di parlare di un qualsiasi linguaggio di programmazione come il PHP, volevo scrivere due righe che rappresentano la mia personale filosofia che utilizzo quando incontro un nuovo linguaggio (lo stesso vale per le nuove tecnologie).
Analizzando la vastità dei linguaggi di programmazione esistenti (almeno quelli che mi sono passati tra le mani e sotto gli occhi) per quanto possano seguire logiche e filosofie diverse, hanno tutti alcuni concetti fondamentali in comune:
- Variabili
- Commenti
- Input
- Output
- Cicli
- Espressioni decisionali ed operatori di uguaglianza
- Funzioni (ed anche classi nei linguaggi moderni ad “Oggetti” o meglio definiti come OOP)
- Rappresentazione del blocco di istruzioni
- Gli operatori Aritmetici, logici
Pur partendo da un primordiale Basic, possiamo avere istruzioni tipo:
- dim o set per la gestione delle variabili
- Una variabile stringa è sempre racchiusa, ad esempio, tra due identificatori (apici singoli, doppi ma anche altri caratteri)
- input per la gestione, appunto, dell’input (in genere da tastiera ma anche da file esterni)
- Output / print per la gestione degli Output (in genere sullo schermo ma anche su file esterni)
- la struttura if…else (o sui più vecchi la semplice if…then…end)
- il ciclo ‘For’
Ovviamente, a seconda del momento storico sarà possibile trovare più o meno evoluzioni dello stesso Basic, ma la base esiste sempre e le logiche di utilizzo sono sempre le stesse anche in caso di evoluzione delle stesse, mantengono sempre una logica “retroattiva” o meglio “compatibile” con le precedenti logiche.
Questo non significa che conosciuto un linguaggio li si conosce tutti, per carità; dico soltanto che nel momento in cui ci si trova al cospetto di un nuovo linguaggio di programmazione è utile tenere presente questi elementi e procedere in questo modo:
- Come funziona la gestione delle variabili?
- E’ un linguaggio a tipizzazione Forte o Debole?
- Un linguaggio a tipizzazione ‘Forte’ pretende che il tipo della variabile sia effettivamente specificato; si veda il ‘C/C++’ che è un linguaggio a tipizzazione ‘Forte’ nel quale le variabili vanno definite indicando il tipo prima del nome (int numero; per definire che ‘numero’ è una variabile di tipo ‘int’ero, quindi numerica con una serie di caratteristiche etc…
- Un linguaggio a tipizzazione ‘Debole’, invece, come potrebbe essere il PHP ma anche tanti altri linguaggi, non richiede tale specifica e automaticamente andrà a definire il tipo di variabile per quella che potrà contenere il suo valore. In PHP, sarà $numero=10 che il sistema riconoscerà essere un intero, ma che noi potremo tranquillamente utilizzare come una stringa senza avere alcun tipo di errore (almeno al momento :))
- E’ un linguaggio a tipizzazione Forte o Debole?
- Come inserire dei commenti nel nuovo linguaggio?
- In genere l’utilizzo di ‘/* */’ è permesso in quasi tutti i linguaggi ‘C’ Like come ad esempio è Java, ma anche PHP; l’utilizzo di ‘//’ non sempre è possibile; qualche linguaggio utilizza il ‘;’ altri il cancelletto (#) resta il fatto che la logica del commento sia sempre la stessa e nessun compilatore / interprete eseguirà mai il codice presente in un commento. Potrà utilizzarlo per altri scopi (vedi documentazione) ma non sarà, mai, eseguito
- Come avviene la gestione di ‘Input’ ed ‘Output’ per il linguaggio? (Ricordiamo il ‘Ciao Mondo’ / ‘Hello world’ dei primi esempi dei linguaggi?)
- Qualunque sia il comando relativo all’Input o all’Output resta il fatto che una istruzione ‘print’ rispetto ad una istruzione ‘echo’ produrrà sempre lo stesso effetto: Scriverà qualcosa da qualche parte (in genere sullo schermo)
- La stessa cosa vale anche per l’Input che sarà sempre preso da qualche parte (in genere dalla tastiera) ma l’effetto sarà sempre quello di raccogliere informazioni dall’esterno per la propria elaborazione. E’ soltanto una questione di “sintassi” e “semantica”.
- Per le istruzioni decisionali, un comando if dovrebbe sempre esistere (altrimenti che linguaggio sarebbe) qualcuno potrebbe avere la forma di if…then, qualcun’altro la if…else…endif ma ciò che fa è sempre lo stesso; esamina una condizione che se vera genererà una particolare elaborazione dei dati
- Operatori di confronto : Una considerazione particolare va fatta sugli operatori di confronto per l’uguaglianza e la differenza all’interno dei confronti; anche qui è solo una questione di sintassi (molti linguaggi si stanno adeguando per supportare, nelle nuove versioni, anche gli operatori “C”Like).
- I linguaggi “C” Like utilizzano > (Maggiore di) < (Minore di) <= (minore uguale a ) e il doppio simbolo di uguale per distinguere l’operatore di uguaglianza con l’operatore di assegnamento (a=10 assegnamento) contro (a==10 confronto).
- Altri linguaggi utilizzano letterali quali eq => equal (uguale a) , ne => not equal (non uguale) Eccone alcuni:
- -eq – uguale;
-ne – non uguale;
-lt – meno;
-le – minore o uguale;
-gt – altro;
-ge – maggiore o uguale;
- -eq – uguale;
- Operatori di confronto : Una considerazione particolare va fatta sugli operatori di confronto per l’uguaglianza e la differenza all’interno dei confronti; anche qui è solo una questione di sintassi (molti linguaggi si stanno adeguando per supportare, nelle nuove versioni, anche gli operatori “C”Like).
- Altra cosa particolare tra i vari linguaggi è la gestione dei “Blocchi” di codice; un blocco in cui sono inserite istruzioni che saranno eseguite in maniera “atomica” (tutte, a meno di casi particolari).
- i linguaggi “C” Like utilizzano le parentesi graffe {} per identificare un blocco
- Altri linguaggi (vedi il Pascal / Delphi) utilizzano ‘Begin’ / ‘End’
- Potrebbe essere anche uno ‘Start’ / ‘Stop’ ma in ogni caso ‘{‘, ‘Begin’ e ‘Start’ indicheranno sempre l’inizio di un blocco e lo stesso per la fine.
- Per i Cicli, tutti i linguaggi avranno almeno un ciclo ‘For’ nella forma semplice; altri linguaggi potranno utilizzare anche cicli diversi (il PHP ha aggiunto, ad esempio, il foreach, molto potente con gli Array)
- While, do…While ed altri sono in genere contenuti nei linguaggi “C” Like (come ed Java, javaScript ed altri ancora); saranno presenti anche nelle versioni di Basic moderne ma non di certo in quelle molto “datate”. il concetto è lo stesso per tutte; possono avere più o meno opzioni ma la base è sempre la stessa.
- Le funzioni possono essere gestite in maniera diversa da diversi linguaggi. Oggi si tende a definire una funzione alla pari di una procedura (la differenza è nel fatto che una procedura non ritornerà un valore, mentre una funzione si; almeno in qualche linguaggio particolare). Le funzioni possono o meno accettare parametri e ritornare o meno valori e questo è valido in tutti i linguaggi che le supportano.
- Anche in questo caso nasce la differenza tra linguaggi a tipizzazione “Forte” o “Debole”. I linguaggi a tipizzazione “Forte” pretendono di conoscere il tipo di dato ritornato (o comunque un qualcosa che indica che nulla sarà ritornato come ad esempio il ‘void’ per chi conosce i linguaggi “C”Like); i linguaggi a tipizzazione “Debole” definiranno, in autonomia, il tipo di dato ritornato dalla funzione (e ne effettueranno eventuali conversioni automatiche).
- Poco resta da dire sugli operatori matematici e Logici
- Gli operatori matematici sono ‘+’, ‘-‘ ‘/’ (o div in qualche linguaggio) e ‘*’ per la moltiplicazione (anche qui ho un vago ricordo di un ‘mul’ al posto di ‘*’)
- Per gli operatori Logici, beh quelli sono della matematica Booleana e tutti i linguaggi che ne fanno uso dovranno rispettarli
- AND (&&)
- OR (||)
- NOT (!)
- …
Come già detto, questo non significa che un linguaggio è “ben che imparato” ma che la raccolta di queste informazioni “Iniziali” / “Primordiali”, ci permetterà di scrivere i primi codici senza avere troppi errori. Da qui a scrivere dei programmi funzionanti (e funzionali) c’è ancora tanta acqua…
L’articolo (Per chi è riuscito ad arrivare fino a qui) è venuto fuori più lungo di quanto mi aspettassi ma era giusto che lo scrivessi. Spero solo che potrà ritornare utile ad altri. Qualcosa mi sarà pure sfuggito, spero nulla di importante.
Alla prossima e… buona programmazione a tutti.Data di ultima modifica 21 Settembre 2023