Volevamo realizzare un sito che si occupasse di divertimento in ogni sua forma, arrivati a questo punto non potevamo esimerci dall’affrontare argomenti che stannoin bilico tra il lavoro e la passione.
Abbiamo scelto di iniziare dall’informatica, e precisamente dalla Programmazione.
Questa breve guida cercherà di introdurvi nelle logiche della programmazione, senza entrare nel dettaglio di linguaggi o simili, ma che vi aiuti a introdurvi all’argomento.
Storia della Programmazione
Come prima cosa cerchiamo di capire da dove siamo arrivati:
Risulta molto difficile datare l’inizio della programmazione; secondo alcuni anche l’abaco, in qualche modo, può essere considerato una forma di programmazione, proverò a partire dagli anni 20:
Agli inizi egli anni 20 i computer erano degli emormi marchingegni che occupavano delle intere stanza per offrire una potenza di calcolo paragonabile alla calcolatrice dei nostri cellulari; anche le più banali operazioni dovevano essere programmate attraverso delle schede di cartone che venivano opportunamente perforate in modo da codificare delle serie di impulsi elettrici che permettevano al computer stesso di analizzare i dati.
Successivamente arrivo la possibilità di inserire direttamente in formato digitale tali impulsi (utilizzando il codice binario), e nacque cosi l’esigenza di offire ai programmatori un sistema per semplificare il loro lavoro, in particolar modo abbinare un comando facilmente ricordabile) alla funziona che questo comando svolgeva. Questo lavoro permise la nascita dell’assembly e conseguentemente, la nascita delle programmazione cosi come la conosciamo.
L’assembly però si occupa, come già detto, dare al processore l’impulso elettrico che gli permette di fare una data operazione. Ovviamente ad un programmatore non interessa come deve fare il processore a dire al monitor di mostrarmiuna stringa, ecco perché dopo alcuni anni si è sentito l’esigenza di creare dei linguaggi più “di alto livello”, attraverso questi il programmatore può concentrarsi esclusivamente sul risultato che vuole ottenere, lasciando al “compilatore”, cioè al programma che trasforma il tuo codice in linguaggio macchina, il compito di occuparsi dell’aspetto hardware.
tra i principali linguaggi di programmazione menzoniamo:
FORtrAN (FORmula trANslator – 1954): sviluppato per svolgere automaticamente calcoli matematici e scientifici.
COBOL (COmmon Business Oriented Language – 1959): sviluppato per applicazioni commerciali.
BASIC (1964): linguaggio semplice per principianti
C (1972): linguaggio di alto livello, ma molto vicino al linguaggio macchina.
C++ (1983): evoluzione del C, con supporto alla programmazione ad oggetti.
Le variabili
Indubbiamente una delle prime e più importanti nozioni che deve avere un programmatore è il concetto di variabile.
Una variabile è semplicemente una “casella” dove possiamo memorizzare dei dati
Pensiamo alla rubrica dei nostri cellulari:
Nella rubrica abbiamo salvato tutti i nostri contatti, e gad ogniuno abbiamo abbinato il numero di telefono; un nostro amico cambia numero noi possiamo liberamente andare nella scheda del contatto e sostituire il numero.
Analizzando la gestione dei dati noi andiamo nella “variabile” numero di telefono del nostro amico e modifichiamo quel valore.
Proviamo un altro esempio:
qualora volessimo calcolare l’età di una persona della quale sappiamo la data di nascita, se operassimo direttamente su quella variabile perderemmo l’informazione di partenza;
per risolvere il problema non ci resta che utilizzare una nuova variabile che, datagli la data attuale, e la data di nascita, ci calcoli l’età.
Fino a che non eliminiamo o modifichiamo il valore di quella varibile, essa conterrà l’età della persona.
Una varibile deve avere anche un tipo, in alcuni linguaggi esso deve essere dichiarato esplicitamente, mentre in altri prende il tipo del dato che contiene, in ogni caso capirete bene che non è possibile sommare un numero ad una cifra.
I tipi di base elle varibili sono:
per i numerici
Boolenano: questo tipo di variabile può avere solo valori vero o falso, prende questo nome da Boole, matematico che ha codificato l’algebra della logica.
Intero: numeri non decimali, il limite di dimenzione che possono avere dipende dal linguaggio utilizzato, molti linguaggi hanno vari tipi di interi in base ai limiti che deve avere (e conseguentemente allo spazio in memoria che occuperà)
Reale: Numeri con la virgola, anche in questo caso esistono vari tipi di reali, in base alla precisione dei decimali che si vuole ottenere.
Nota: normalmente tutti i tipi numerici possono essere con segno (numeri sia positivi che negativi) o senza segno (solo numeri positivi) es: da -32768 a +32767 oppure da 0 a 65535, inoltre, qualora si cerchi di assegnargli un valore superiore a quello che può contenere (ad esempio 66000) si otterà un risultato inatteso (in base al linguagio utilizzato).
Per i caratteri
Enumerato: non supportato in tutti i linguaggi, permette abbinare dei numeri interi a dei dati non numerici (es: i mesi o i giorni della settimana) in modo da poter effettuale dei calcoli su dati apparentemente non numerici,
Caratteri: tutti i caratteri, siano essi lettere maiuscole, minuscole, numeri o caratteri speciali (come virgola, punto esclamativo o parentesi), è importante non confondere il carattere numero con il relativo tipo numerico.
Programmazione Condizionale
Una delle prime situazioni che un programmatore si trova ad affrontare, sono le condizioni.
Pensiamo banalmente ad un programma che, dati 2 numeri, esegue la divisione tra il primo e il secondo. qualora il secondo numero sia uno 0 il programma ci restituirebbe un errore. Ci troviamo quindi nella necessità di gestire una consizione.
Per fare questa, e altre operazioni similari, ci vengono incontro dei costrutti genericamente conosciute con il nome di Condizionali (if, e switch-case)
Sebbene ogni linguaggio usa le sue forme sintattiche, il concetto di base rimane sempre lo stesso… vediamolo nello specifico:
IF: esegui il codice se una condizione è vera) per condizione si intende qualcosa che può essere vera o falsa, es: if (variabile=1), ci sono vari livelli di complessità in base alle esigenze specifiche
1) IF (condizione) THEN (esecuzione) END IF
qualora (condizione) risulti vera, viene eseguito il codice contenuto in (esecuzione)
2) IF (condizione) THEN (esecuzione1) ELSE (esecuzione2) END IF
qualora (condizione) risulti vera, viene eseguito il codice contenuto in (esecuzione1) altrimenti (se falsa) viene eseguita (esecuzione2)
3) IF (condizione1) THEN (esecuzione1) ELSEIF (condizione2) THEN (esecuzione2) END IF
qualora (condizione1) risulti vera, viene eseguito il codice contenuto in (esecuzione1) altrimenti, se falsa, viene verificata (condizione2) e, se vera, viene eseguita (condizione2)
tale forma generalmente può avere quanti ELSEIF si desidera e può terminare con un ELSE semplice, come da forma 2
SWITCH-CASE: verifica una situazione scegli il caso che la verifica
SWITCH (situazione)
CASE (caso1) THEN (esecuzione1)
CASE (caso2) THEN (esecuzione2)
CASE ELSE (esecuzioneelse)
viene valutata una situazione (as esempio il valore di una variabile) e viene confrontata con i vari casi (es: “minore di 5” oppure “uguale a 10”) qualora uno o più casi si verifichi, viene eseguito il codice relativo. nel caso non se ne verifichi nessuno, viene eseguito (esecuzioneelse)
Pur esistendo una netta somiglianza tra la forma 3 del’IF e lo SWITCH, essi presentano 2 differenze molto importanti:
lo SWITCH verifica una sola situazione con molti casi, mentre lIF può verificare ogni volta cose diverse; es: IF (numero1=5 )… ELSEIF (numero2=9)…
di contro l’IF può avere un solo risultato positivo (e quindi una sola esecuzione), in quanto le verifiche successive vengono fatte eseguite solo se le precedenti sono false, mentre lo SWITCH (se non istruito diversamente qualora il linguaggio lo permetta) potrebbe eseguire anche tutte le (esecuzione); es: caso1 è “uguale a 3” e caso 2 è “minore di 5”.
Programmazione Interattiva
Oltre alla possibilità di eseguire delle scelte, esiste in programmazione un’altra logica molto comune: la possibilità di ripetere per un determinato o intedeterminato numero di volte, una serie di operazioni; qui entra in gioco la programmazione iterativa: la possibilità di scrivere una sola volta un set di perazioni, e poi eseguirle ciclicamente quante volte ci serve.
Esistono 3 costrutti findamentali per fare questa cosa:
WHILE (condizione) DO (esecuzione) END WHILE
viene controllata (condizione), se questa è vera viene eseguita (esecuzione); una volta terminato viene nuovamente controllatata (condizione) e esentualmente eseguita (esecuzione) fino a che (condizione) non risulta falsa; a quel punto si prosegue con il resto del programma.
DO (esecuzione) WHILE (condizione) END DO
Molto simile alla precedente, ma si differisce per il fatto che prima viene eseguita (esecuzione), e dopo viene controllata (condizione), in pratica in questa forma (esecuzione) viene eseguita almeno una volta.
FOR (numero) (istruzioni)
Viene eseguita (istruzioni) il numero di volte indicato da (numero)
Anche in questo caso ogni linguaggio ha la sua sintassi, in particola modo il costrutto FOR può essere sensibilmente diverso da un linguaggio ad un altro, permettendo ad esempio di utilizzare un contatore variabile come numero, in modo da poter modificare in fase di esecuzione il numero di volte che la vogliamo eseguire; in ogni caso tramite queste siamo in gradi di creare praticamente ogni tipo di programma.
Le funzioni
Nella programmazione Iterativa abbiamo visto l’importanza di ripetere le stesse operazioni più volte; spesso però tale situazione non è continuativa, ma si presenta in momenti diversi durante l’esecuzione del programma.
Per risolvere questa situazione ci vengo incontro le Funzioni.
In pratica una funzione è un microprammi al quale “passiamo” delle variabili, e questa ci darà un risultato.
Un esempio pratico è una funzione che, datigli due numeri, ne restituisce la somma
Passo 1: dichiarazione funzione prima del programma
Funzione somma (valore1, valore2)
somma = valore1+valore2
fine funzione
Passo 2 Chiamata della funzione dentro il programma
miasomma = somma(6,7)
Questa operazioe manda alla funzione “somma” i due parametri (6 e 7)
dentro la funzione, la funzione stessa assumerà il valore della somma edi 2 parametri (13)
la variabile miasomma, assumerà il valore di ritorno della funzione somma.
Chimando nuovamente la funzione somma in un altro punto del programma, otteremo la somma dei nuovi parametri passati, senza dover ripetere tutto il codice presente dentro la funzione (in questo caso il problema è relativo, ma per funzioni più grandi la cosa può risultare parecchio utile).
Di default, solitamente, la funzione non può modificare il vaore delle varibili che gli vengono passate, ma sfrutta solamente il loro valore (passaggio dati per valore) preservando l’indipendenza tra programma e funzione. Alcuni linguaggi permettono di configurare la funzione in modo che i le varibili trasmesse siano modificabili (passaggio dati per riferimento); Aumentando quindi la potenzialità della funzione, a discapito di un maggior rischio per i dati stessi.
Ulteriormente alcuni linguaggi permettono di avere funzioni con parametri opzionali, in questo caso, se uno o più parametri non vengono indicati nella chiamata, la funzione stessa gli assegna dei valori predefiniti.