GNU/Linux >> Linux Esercitazione >  >> Linux

Procedura:Introduzione alla programmazione:variabili, tipi e manipolazione dei dati

Serie di istruzioni

Questa è la parte 3 di una serie di 5 parti per Introduzione alla programmazione

  1. Introduzione alla programmazione:per iniziare
  2. Introduzione alla programmazione:il tuo primo programma
  3. Introduzione alla programmazione:variabili, tipi e manipolazione dei dati
  4. Introduzione alla programmazione:controllo del flusso
  5. Introduzione alla programmazione:programmazione orientata agli oggetti

Tornare al nostro programma

Nei due articoli precedenti di questa serie, hai scritto in media una riga di codice per articolo. In questo, aggiungeremo un'altra riga, ma modificheremo anche le righe che già abbiamo perché ora inizieremo a parlare di variabili e tipi di dati.

Lo scopo di questo articolo è insegnarti le variabili e i tipi e come manipolarli per creare un programma che faccia molto di più della semplice stampa di "Hello World!"

Abbiamo molto di cui occuparci, quindi tieni le dita pronte e iniziamo.
.

Utilizzo delle variabili

Il nostro programma attuale rimane eccezionalmente semplice con solo due righe di codice:

Console.WriteLine("Hello World!");
Console.ReadLine();

La prima riga invia un testo alla console e la seconda legge una riga dall'utente. Ma dove finisce questa linea in cui siamo entrati? Attualmente, cade nel nulla perché non facciamo nulla per recuperarlo, quindi cambiamolo immediatamente.

Modifica la seconda riga in modo che assomigli alla seguente:

String input = Console.ReadLine();

Quello che stiamo facendo qui è dire che "String input" (qualunque esso sia) dovrebbe essere assegnato a qualsiasi cosa esca dal metodo ReadLine chiamato sulla Console classe statica.

Usiamo il segno di uguale per assegnare valori in C# e in molti linguaggi simili. A tutto ciò che si trova sul lato sinistro del segno di uguale viene assegnato il valore di ciò che si trova sul lato destro.

Le due parole in String input hanno significati diversi. String denota il tipo di valore e input è il nome che utilizziamo per rappresentare il valore. Quello che stiamo facendo qui è creare una variabile chiamato "input" che ha un tipo di “Stringa”. Spiegherò i tipi più avanti in questo articolo.

Nella programmazione, utilizziamo le variabili per mantenere i dati in memoria in modo da poterli manipolare facilmente. Lo usi anche nella tua vita quotidiana, senza chiamarlo effettivamente una variabile. Pensa, ad esempio, a "Il tuo telefono", che è semplicemente un modo semplice per ricordare il nome di un particolare dispositivo elettronico che potrebbe cambiare nel tempo. Oppure, considera "il tasso di cambio dal dollaro USA all'euro". Non vai sempre in giro a ricordare quella tariffa e cambia rapidamente, quindi probabilmente troverai più facile farvi riferimento per nome piuttosto che per valore.

Le variabili ci consentono di fare riferimento a qualsiasi dato particolare per nome anziché per valore, indipendentemente dal valore o dalla modifica. Nel nostro programma, i dati sono tutti quelli che l'utente inserisce prima di premere Enter chiave. Il nome che diamo a quel particolare dato, in questo caso, è "input", ma possiamo chiamarlo in modi diversi. In effetti, esiste un'intera gamma di modelli solo per la denominazione delle variabili e probabilmente ne rimarrai molto confuso più avanti nella tua carriera.
.

Debug con punti di interruzione

Puoi provarlo ora, ma prima di farlo, voglio mostrarti un trucco di Visual Studio chiamato punto di interruzione . Un punto di interruzione ti consente di interrompere l'esecuzione di un programma e vedere quale riga di codice è in esecuzione, ti consentirà persino di scorrere il codice riga per riga da quel punto.

Per creare un punto di interruzione, sposta il cursore sulla prima riga del codice e premi F9 oppure fare clic sul margine a sinistra dei numeri di riga sulla riga in cui si desidera impostare il punto di interruzione. Se fatto correttamente, l'intera linea dovrebbe diventare rossa e dovresti ottenere un cerchio rosso a margine.

Figura 1:punto di interruzione aggiunto

Nota che il punto di interruzione interrompe l'esecuzione prima la riga su cui l'hai impostato. Inoltre, i punti di interruzione funzionano solo quando esegui l'applicazione tramite uno strumento di sviluppo come Visual Studio, quindi se non rimuovi i punti di interruzione prima di distribuire l'applicazione, va benissimo.

Ora premi F5 o quel pulsante Start nel menu e guarda l'avvio dell'applicazione. Subito dopo, Visual Studio dovrebbe apparire di nuovo e mostrarti la riga successiva da eseguire in giallo.

Figura 2:punto di interruzione raggiunto

A questo punto, puoi controllare l'esecuzione passo dopo passo e osservare i risultati nella finestra della console. Per fare un passo avanti premi F10 in Visual Studio. Porta la finestra della console in primo piano e osserva che il tuo codice è ora avanzato di una riga e ora c'è "Hello World!" mostrato nella finestra come previsto.

Figura 3:successiva riga di comando eseguita

Nota:i programmatori spesso si riferiscono a questo processo di aggancio al codice mentre viene eseguito come "debug". Questo processo è un esempio del tipo di debug che potresti eseguire per verificare che il tuo codice funzioni come previsto.

.
Avanza ancora una volta il codice in Visual Studio. Nota che mentre lo fai, la finestra della console appare automaticamente. Questo evento si verifica perché la console necessita dell'input dell'utente durante l'esecuzione di Console.ReadLine() metodo.

Inserisci il testo che preferisci e premi Enter . Quando lo fai, Visual Studio verrà visualizzato di nuovo perché ora che hai fornito l'input, l'esecuzione può continuare e stiamo ancora esaminando il codice.

In questa finestra di Visual Studio, vorrei attirare la tua attenzione sulla parte inferiore dello schermo dove dovresti vedere una scheda chiamata "Locali". Se non riesci a trovarlo, puoi aprirlo andando nel menu e selezionando Debug->Windows->Locals o premendo CTRL+D e poi L .

Una volta aperta la finestra Locals, dovresti vedere che c'è una variabile chiamata "input" che ha un valore impostato su qualsiasi cosa tu abbia inserito nella finestra della console. Nel mio caso, ho inserito "Ciao!".

Figura 4:Locali di debug

La scheda Locali mostra le variabili disponibili per l'uso nell'ambito corrente. Tuttavia, prima di iniziare a manipolare e utilizzare questi dati, è importante comprendere il concetto di tipi di variabili.
.

Tipi di variabili:statici e dinamici

Vedete, ci sono due approcci a ciò che i programmatori chiamano "digitazione", e nessuno dei due ha nulla a che fare con la pressione dei tasti su una tastiera. Entrambi gli approcci hanno punti di forza e di debolezza. E no, non ho intenzione di dirti qual è il migliore; avrai tutto il tempo per determinarlo da solo e, forse, potresti arrivare a capire perché alcuni programmatori sviluppano una preferenza quasi fanatica per l'uno rispetto all'altro.

I due approcci sono statici e dinamico digitando. C#, il linguaggio che stai usando in questi articoli, è un linguaggio tipizzato staticamente, mentre altri linguaggi popolari come JavaScript sono linguaggi tipizzati dinamicamente. Lascia che ti spieghi la differenza.

Hai notato prima che quando abbiamo creato la variabile "input", abbiamo deciso che si trattava di una String variabile. String è un termine che serve per indicare che tipo di dati può entrare nella variabile. Non è possibile aggiungere dati incompatibili a una variabile perché Visual Studio, o tecnicamente il compilatore che traduce il codice di programmazione in codice macchina, si opporrà e si rifiuterà di collaborare.

Una String è solo un pezzo di testo e può contenere quasi tutto, il che ha senso quando chiediamo all'utente di inserire qualsiasi pezzo di testo. Tuttavia, c'è un potenziale problema quando vogliamo iniziare a lavorare con i nostri dati.

Diciamo che vogliamo chiedere all'utente di inserire la sua età e che vogliamo limitare alcune funzionalità se l'utente ha meno di 13 anni, ad esempio.

Come si determina se "Ciao!" è minore di 13? Non puoi, perché non c'è modo di fare aritmetica su un pezzo di testo. "Pomodoro" più 45 non ha senso.

Una situazione come questa è il motivo per cui i linguaggi tipizzati staticamente hanno tipi di variabili diversi. Possiamo sapere se possiamo eseguire operazioni aritmetiche o di altro tipo sui dati prima ancora di inviare il programma all'utente.

Nei linguaggi tipizzati staticamente, come C#, VisualBasic e Java, è necessario definire in anticipo cosa può contenere una variabile e non è possibile creare o compilare il programma senza attenersi a queste regole. In cambio, hai la certezza che non confronterai le mele con 3,42 o cercherai di capire se è legale vendere alcolici a una persona che "non sono affari tuoi" anni.

Nelle lingue digitate dinamicamente, non ottieni tali garanzie. Invece, lavori solo con variabili che possono contenere qualsiasi tipo di dati. Un esempio di linguaggi tipizzati dinamicamente è JavaScript. In JavaScript, i programmatori devono verificare che i dati che ottengono abbiano un valore previsto perché il loro codice potrebbe bloccarsi se tentano di aggiungere o confrontare "sì" con 18.

Nota:puoi effettivamente aggiungere "sì" a 18 nella maggior parte delle lingue, a seconda di come lo fai. Molto probabilmente finirai con "yes18", che probabilmente non è quello che ti aspetti.

.
Nei linguaggi tipizzati staticamente, scoprirai anche che tutti i metodi restituiscono un tipo specifico di dati o, in alcuni casi, niente. Ad esempio, il Console.ReadLine() il metodo restituisce un valore stringa, quindi funziona benissimo per impostare il nostro String input variabile all'output di quel metodo proprio come abbiamo fatto noi.

Tuttavia, cosa accadrà se vogliamo chiedere all'utente di scegliere un numero compreso tra 1 e 10 perché vogliamo usare quel numero per qualcosa in seguito? Iniziamo a costruire un gioco semplice e guarda, vero?
.

Un programma di gioco d'ipotesi

Il gioco che costruiremo è un gioco di indovinelli. Scegliamo un numero segreto compreso tra 1 e 10, quindi chiediamo all'utente di indovinare di quale numero si tratta. Renderemo questo gioco più avanzato in seguito, quindi per ora l'utente ottiene solo un'ipotesi e quindi ha una probabilità del 10% di farlo bene. In effetti, in questo articolo non testeremo nemmeno se sono corretti perché ciò comporterebbe condizioni e controllo del flusso, che sono concetti che non impareremo ancora.

Innanzitutto, il tipo di variabile per un numero che non ha decimali è chiamato intero o int in breve. Un int può contenere numeri molto grandi, solitamente limitati dal tipo di architettura della CPU, con una CPU a 32 bit che contiene numeri interi fino a circa 4,4 miliardi. Oltre a ciò, possiamo utilizzare altri tipi di variabili. Tuttavia, per i nostri semplici esempi, un normale int funzionerà bene.

Per tutti i tipi di variabili, possiamo assegnare direttamente valori semplici. Ad esempio:

int value = 10; 
string name = “Frank”;

Possiamo anche eseguire operazioni sulle variabili, purché abbiano un senso. Ad esempio, puoi sommare due valori interi.

int value1 = 10;
int value2 = 3;
int value3 = value1+value2;

Il numero intero memorizzato nella variabile "value3" è 13 dopo che la parte di codice contenente queste righe attraversa questo punto.

Possiamo anche assegnare valori dal valore di ritorno dei metodi. Proviamo semplicemente ad assegnare il risultato da Console.ReadLine() metodo in un int , lo facciamo? Se non l'hai già fatto, interrompi l'esecuzione del tuo programma. Ora aggiorneremo le nostre due righe di codice in quanto tali:

Console.WriteLine("Guess a number between 1 and 10:");
int input = Console.ReadLine();

Quando lo fai, otterrai un caso di squiggles rossi (come mostrato di seguito nella Figura 5) e un messaggio di errore nell'elenco Error che indica "Impossibile convertire implicitamente il tipo 'string' in 'int'".

Figura 5:Un caso di squiggles rossi

Otteniamo questo errore perché il valore che esce da Console.ReadLine() è una stringa e il compilatore non può garantire che possa convertire ciò che un utente può inserire in un numero. Un utente potrebbe inserire "NO!" per esempio, e non c'è modo di trasformare quell'input in un numero.

Ci sono, ovviamente, modi per aggirare questo problema. Possiamo forzare il compilatore ad accettare qualsiasi cosa arrivi come di un tipo specifico. In effetti, possiamo farlo con qualsiasi tipo. È un processo chiamato casting .

Quando eseguiamo il cast di tipi di variabili, il compilatore farà del suo meglio per convertire da un tipo di variabile a un altro. Questo cast potrebbe, ad esempio, funzionare se hai un numero decimale e desideri un numero intero.

decimal decimalvalue = 3.14M;
int integervalue = decimalvalue;

La prima riga assegna il valore 3.14 al decimal variabile denominata decimalvalue . La seconda riga tenta di assegnare quel valore decimale a un numero intero.

Nota:la M è semplicemente un suggerimento al compilatore che stiamo creando un valore decimale perché, per aggiungere ancora più confusione a questo punto, ci sono diversi tipi di decimal valori, inclusi i valori a doppia precisione ea virgola mobile. Sebbene sia utile sapere, nessuno di questi punti è qualcosa di cui dovrai preoccuparti in questo articolo.

.
Se inserisci queste righe in Visual Studio, noterai che anche ora otteniamo un caso di squiggiles perché un decimal il valore non rientra in un int valore. Se ci provassimo, perderemmo .14 e rimarremmo con solo 3 come valore di integervalue .

Questo comportamento potrebbe essere esattamente quello che vogliamo. In questo caso, possiamo eseguire il cast del decimal valore a un int , costringendo di fatto il compilatore ad accettare la conversione esplicita di un valore decimale in un valore intero. Lo facciamo facendo precedere il valore con il tipo che vogliamo tra parentesi. Confronta queste righe di codice con quelle di cui sopra.

decimal decimalvalue = 3.14M;
int integervalue = (int)decimalvalue;

Ora i nostri squiggles di Visual Studio andranno via e il compilatore è felice. Stiamo perdendo alcuni dettagli nei numeri, ma potresti essere sicuro che questo è quello che vuoi.

In C#, il compilatore richiederà di eseguire il cast di valori se esiste la possibilità di perdita di dati, ad esempio se si passa da un valore decimale a un valore intero. Tuttavia, accetterà volentieri una conversione compatibile quando non vi è alcuna possibilità di perdita di dati. Se hai provato ad assegnare un int valore in un decimal digita, ad esempio, non otterresti alcun litigio dal compilatore.

Finora, tuttavia, non ci stiamo davvero avvicinando a una soluzione al nostro problema. Possiamo provare a trasmettere il valore della stringa proveniente da Console.ReadLine() in un int , ma il compilatore si lamenterà del fatto che non può convertire automaticamente un valore stringa in un intero (come mostrato di seguito nella Figura 6) perché non c'è modo di garantire in anticipo che sia possibile trasformare ciò che viene dall'utente in un numero.

Figura 6:errore con il cast di string su Int

Non temere, perché c'è un modo migliore per risolverlo! La soluzione sta usando un metodo statico per analizzare il valore della stringa in un intero, e si trova proprio nel int digitare stesso. Pertanto, possiamo chiamare int.Parse metodo, invialo tutto ciò che arriva da Console.ReadLine() metodo e recupera un intero.

Quindi, aggiorniamo il codice del tuo programma per richiedere prima all'utente di inserire i dati, quindi recuperiamo i dati in una string variabile chiamata "testo", e infine per analizzare "testo" in un numero intero.

Console.WriteLine("Guess a number between 1 and 10:");
string text = Console.ReadLine();
int input = int.Parse(text);

Una volta fatto, tutti i tuoi squigglie dovrebbero scomparire e il tuo programma dovrebbe essere eseguito come previsto. Sentiti libero di impostare un punto di interruzione dopo l'ultima riga per interrompere l'esecuzione e controllare le tue variabili. Guarda cosa succede quando inserisci un numero durante l'esecuzione.

Figura 7:esecuzione valida

Vedrai che "input" ora mostra che ha un valore di 3 mentre "text", nel mio caso, ha un valore di "3" (notare le virgolette doppie; le virgolette doppie indicano un valore di stringa).

Ma cosa succede se inseriamo qualcosa di diverso da un numero? Bene, se inserisci qualcosa come "Ciao" invece di un numero, il programma andrà in crash. In Visual Studio, l'esecuzione si interromperà e ti informerà di un'eccezione, come mostrato di seguito nella Figura 8.

Figura 8:esecuzione non valida

Come programmatori, non vogliamo che il nostro software vada in crash, quindi dobbiamo gestire questo bug. Tuttavia, lo lasceremo per il prossimo articolo perché comporta la manipolazione del flusso del programma e abbiamo già trattato un bel po' per arrivare a questo punto.
.

Variabili, tipi e manipolazione del riepilogo dei dati

Per ora, è il momento di concludere questo terzo articolo e, nonostante abbia scritto solo un'altra riga di codice, abbiamo trattato molto nuovo materiale. Non preoccuparti, quando ho iniziato a impararlo molti anni fa, c'erano anche molti aspetti confusi per me.

In questo articolo, abbiamo trattato il concetto di variabili e abbiamo esaminato i tipi di dati e quando e perché i tipi di dati sono importanti. Hai imparato come creare variabili e persino come trasformare i dati da un tipo all'altro tramite il casting. Hai imparato passo passo il debug, i punti di interruzione e come controllare le variabili disponibili in Visual Studio.

Dovresti anche notare che le cose che hai imparato ora sono molto comuni in tutti i linguaggi e le piattaforme e mi sono occupato di introdurre e spiegare concetti che variano, come la digitazione statica rispetto a quella dinamica.

Nel prossimo articolo esamineremo il controllo del flusso in modo che tu possa imparare a controllare l'esecuzione del tuo programma e controllare varie condizioni per determinare cosa dovrebbe fare il programma in seguito.

Serie di istruzioni

Questa è la parte 3 di una serie di 5 parti per Introduzione alla programmazione

  1. Introduzione alla programmazione:per iniziare
  2. Introduzione alla programmazione:il tuo primo programma
  3. Introduzione alla programmazione:variabili, tipi e manipolazione dei dati
  4. Introduzione alla programmazione:controllo del flusso
  5. Introduzione alla programmazione:programmazione orientata agli oggetti

Linux
  1. Perché i dati sono importanti e come proteggerli

  2. Come impostare/creare variabili di ambiente e shell in Linux

  3. Come eseguire il backup e il ripristino di dati e configurazioni di RabbitMQ

  4. Come impostare, elencare e rimuovere variabili d'ambiente in Linux

  5. Come avviare e arrestare OSWatcher

Introduzione alla VPN ed ecco come usarla in Linux

Come impostare e annullare l'impostazione delle variabili di ambiente su Linux

Procedura:Introduzione alla programmazione – Per iniziare

Procedura:Introduzione alla programmazione – Programmazione orientata agli oggetti

Procedura:Introduzione alla programmazione – Controllo del flusso

Procedura:Programmazione orientata agli oggetti - Costruttori ed ereditarietà