Imparare C#Principianti

I tipi di dati

Si dice che il C# (come il C) sia un linguaggio fortemente “tipato“, per il fatto che “pretende” che di ogni variabile venga dichiarato il tipo di appartenenza.
Non tutti i linguaggi hanno bisogno della dichiarazione delle variabili (PHP, Action Script ecc.) ma il C# e molti altri si, proprio per limitare l’uso della memoria e migliorare le performance.
Quando dichiariamo una variabile avremo informato il compilatore che tipo di dato è quello che stiamo usando e verrà
riservata una “porzione di memoria” solo per lui, ovvero, verrà “allocato” lo spazio necessario.

Se per esempio in JavaScript una variabile numerica si può dichiarare così:
var mioNumero = 2;

In C# sarà necessario dichiararla così:
int mioNumero = 2;

Ovvero dovremmo specificare che la nostra variabile è di tipo int (numero intero) mentre in JavaScript sarebbe bastata la parola var che identifica una qualsiasi variabile.
Noi prendiamo in considerazione solo il C#, anche perché JavaScript è sta diventando pian piano obsoleto su Unity.
In realtà anche in C# è possibile usare la parola generica var, lasciando così al compilatore il compito di dedurre il tipo. Ma noi non prenderemo neanche in considerazione quest’opzione perché può solo generare confusione.

Veniamo ora a dare un’occhiata ai tipi di variabili più importanti. Ovviamente non esamineremo tutti i tipi di dati esistenti ma solo quelli che utilizzeremo in maggior modo su Unity, almeno agli inizi:

string, int, float, bool.

Ma che vuol dire concretamente “dichiarare le variabili”?

string pippo = 10;
Con questa riga, ad esempio, abbiamo fatto la dichiarazione di una variabile di tipo stringa e uno spazio di memoria sarà stato riservato (allocato) per questa variabile.
Da questo momento la variabile pippo sarà pronta all’uso, potrà variare a nostro piacimento perché appunto “variabile”.

Prendiamo per esempio uno script molto semplice da poter assegnare al giocatore in un classico FPS.
All’inizio dello script dovremmo dichiarare le variabili che useremo, per esempio:

L’energia del giocatore
L’arma in uso in quel momento
Il numero di munizioni in possesso del player
Se il player è morto o no

public float energiaGiocatore;
public string armaInUso "Pistola";
public int numeroMunizioni;
public bool giocatoreMorto;

Abbiamo dichiarato quattro variabili pubbliche, lasciandole vuote. Essendo pubbliche, esse saranno accessibili anche dall’inspector di Unity.

Come avrete notato gli spazi per inserire i valori appaiono in modo differente gli uni dagli altri.

Prima di tutto notiamo che, pur avendo chiamato la variabile energiaGiocatore (tutto attaccato e con la prima lettera minuscola) sull’inspector ci viene mostrato Energia Giocatore. Questo perché Unity fa in modo che le variabili appaiano nel modo più comprensibile possibile sull’inspector, è solo una questione visiva che a noi non fa differenza, ma ci fa piacere. D’altro canto non non avremmo potuto dichiarare la variabile così:
string Energia Giocatore;
perché le variabili, così come tutti i nomi delle funzioni, devono essere formati da una parola sola, senza spazi.

La seconda cosa che notiamo è che, pur non avendolo specificato sullo script, lo spazio per inserire i valori numerici non sono vuoti ma sono già posti su 0.
Questo perché una variabile numerica a cui non si è assegnato nessun valore, sarà di partenza uguale a zero.
Cosa diversa invece per una variabile di tipo stringa che può anche essere vuota. Infatti, visto che non abbiamo assegnato nessun valore alla variabile “armaInUso”, essa appare vuota.
Il quarto parametro ci appare come un quadratino da selezionare/deselezionare.
Vediamo le differenze tra questi quattro fondamentali tipi di variabili.

Tipo di dati int

Come già accennato, l tipo di dati int rappresenta un semplice numero intero che può essere anche negativo.
Mentre, se volessimo usare solo numeri positivi dovremo dichiarare la variabile con la parola uint che sta a significare “numero intero senza segno” (unsigned int).

Tutti i tipi di dati numerici hanno dei limiti (altrimenti sarebbe inutile la dichiarazione per il risparmio di memoria), per esempio:
un numero uint ha il limite di 4.294.967.295 cifre (cioè da 0 a 4.294.967.295) e l’int da -2.147.483.648 a 2.147.483.647. Ovviamente non dovrete ricordare questi numeri, vi basti sapere che, se volete utilizzare un numero che andrà oltre i 4 miliardi e rotti dovrete usare un altro tipo di numeri interi come per esempio long che potrà superare i 18.000.000.000.000.000.000, un bel numerone! 🙂
Tutto questo sempre per la questione di allocazione di memoria di cui abbiamo parlato all’inizio. Se prevediamo che dovremo usare un numero minore di 4 miliardi, sarà un inutile spreco di memoria utilizzare un tipo di dato long, ci basterebbe un int.

Tipo di dati float

Questo tipo di dato numerico è assai importante, è il primo tipo di dato che viene utilizzato per la memorizzazione di numeri con la virgola. Anche esso ha dei limiti ma per ora non preoccupiamocene onde evitare di confonderci le idee con tanti numeri. Il tipo di dato float (o Single) sarà largamente usato in Unity perché rappresenta il tipo di dati più consono per la maggior parte degli utilizzi.

La cosa più importante da ricordare dei numeri float è che per utilizzarlo, bisogna farlo seguire dalla lettera f in questo modo:

float numero = 3.5f    oppure    float numero = 3.5F

In questo caso avremo creato la variabile numero di tipo float che vale 3.5 .
Da notare che per separare i valori decimali si usa il punto e non la virgola.

 
Tipo di dati string

Questo tipo di dati è prettamente testuale. Quando vorremmo scrivere qualsiasi cosa a schermo, che sia un nome o un testo più lungo, useremo una variabile di tipo string, che sta a significare “stringa”.
Le stringhe si dichiarano sempre tra le virgolette e verranno evidenziate di un colore diverso dentro al nostro script (tipicamente, in rosso), così da identificarle a prima vista.

string NomeGiocatore="Mio Eroe";

Ovviamente una stringa potrà contenere spazi e caratteri speciali, accenti e quant’altro sarà necessario nel nostro testo.

 

Tipo di dati bool

Ho volutamente lasciato questo tipo di variabile per ultima perché essa non è ne numerico ne testuale ed è molto importante quanto semplice da capire. Un tipo di dati bool ha solo due valori, vero o falso (true o false). Tutto qui.
Mettiamo per esempio di voler verificare se il nostro player ha finito l’energia, dunque è morto.
Basterà questa riga di codice.

if(energiaGiocatore<=0) 
giocatoreMorto=true;

 In pratica con questa riga abbiamo detto:

Se la variabile energiaGiocatore è minore o uguale a 0, 
allora poni la variabile giocatoreMorto uguale a true (vera).

Di seguito potremmo inserire unaltra ‘istruzione che esegue l’animazione del player che muore o che conclude il gioco o qualsiasi cosa volessimo che accada quando giocatoreMorto è verificata.

Divagazione sulla sintassi.

Come avrete notato, nell’esempio sopra non ho usato le parentesi graffe e sono andato a capo scrivendo fisicamente due righe,, pur parlando di singola “riga di codice”.

Come mai?
In effetti se avessi scritto così:

if(energiaGiocatore<=0)giocatoreMorto=true;

non sarebbe cambiato nulla. Si tratta solo di una preferenza di stile. Infatti per “riga di codice” noi intendiamo “un’istruzione”, ovvero ciò che finisce con un punto e virgola.
E le parentesi graffe? Non avevamo detto che le istruzioni andava all’interno di esse? 🙄

Infatti, ,anche se avessi scritto così:

if(energiaGiocatore<=0) {giocatoreMorto=true;}

oppure così:

if(energiaGiocatore<=0) 
{giocatoreMorto=true;}

Non sarebbe cambiato nulla e sarebbe stato comunque tutto corretto e funzionale.

Perchè?
Quando l’istruzione da compiere è una sola, non è necessario racchiuderla tra le parentesi graffe (seppur sempre consigliato per una migliore lettura del codice). Per una “una sola istruzione” intendiamo “una sola cosa da fare” che avremmo terminato con il punto e virgola.
Per correttezza e leggibilità del codice, noi useremo sempre le parentesi graffe.

Abbiamo già visto che lo spazio tra due parentesi graffe viene chiamato scopo. Per esempio, le parentesi graffe dopo la condizione if, viene chiamato “lo scopo dell’if”, oppure, le parentesi graffe che delimitano un metodo, viene chiamato “lo scopo del metodo” ecc.. .
Per tanto, se non usassimo le parentesi per delimitare lo scopo di un if, ci troveremo con il suo scopo limitato alla sola riga che segue la condizione if.
Per evitare confusione, è sempre meglio usare tutte le parentesi!

 

 

 

 

 

 

 

 

 

Riassumendo

string è un tipo di dati testuale .
int è un tipo di dati numerico intero.
float è un tipo di dati numerico con virgola.
bool è un tipo di dati boleano (vero o falso).

2 pensieri su “I tipi di dati

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *