Accedi come Scuola



Le Lettere

Nota del Curatore

Siccome la codifica dei caratteri predefinita di Ruby è la "ASCII", ma in italiano abbiamo bisogno anche delle lettere accentate, per far sì che funzionino anche gli esempi di questo tutorial che includono caratteri accentati è necessario "dire" al compilatore Ruby che intendiamo utilizzare la codifica "UTF-8" (che include i caratteri accentati). La spiegazione di come funzionano le codifiche dei caratteri esula dallo scopo di questo tutorial, al lettore basti sapere che a tal fine occorre semplicemente inserire all'inizio di ogni programma il seguente commento speciale:

# encoding: utf-8

Se dovessi avere problemi di codifica pur inserendo questo commento, seppur dovrebbe trattarsi di una situazione piuttosto rara, una soluzione provvisoria potrebbe essere il rimuovere tutte le lettere accentate dal tuo programma sostituendole con l'analogo non accentato.

 

Ora sappiamo tutto sui numeri, ma per quanto riguarda lettere? parole? testo?

Un insieme di lettere in un programma si definisce "stringa" o "string". (Puoi immaginare le lettere stampate come se fossero legate insieme su uno striscione.) Per rendere più semplice visualizzare quale parte del codice è una stringa, colorerò tutte le stringhe in rosso. Ecco alcune stringhe:

# encoding: utf-8
'Ciao.'
'Ruby spacca.'
'Il mio numero preferito è 5... e il tuo?'
'Snoopy dice #%^?&*@! quando sbatte il pollicione.'
'     '
''

Come puoi vedere, le stringhe possono includere punteggiatura, cifre, simboli e spazi... oltre alle lettere. L'ultima stringa di esempio non ha nulla al proprio interno; la chiameremo una stringa vuota.

Abbiamo utilizzato il comando puts per stampare i numeri; proviamolo anche con alcune stringhe:

puts 'Ciao, mondo!'
puts ''
puts 'Arrivederci.'
Ciao, mondo!

Arrivederci.

Ha funzionato bene. Ora prova con alcune tue stringhe.

Aritmetica delle stringhe

Esattamente come puoi eseguire delle operazioni aritmetiche coi numeri, puoi farlo anche con le stringhe! Beh, più o meno... puoi sommare delle stringhe, comunque. Proviamo a sommare due stringhe e vediamo come si comporta puts.

puts 'Mi piace' + 'la torta di mele.'
Mi piacela torta di mele.

Ops! Mi sono dimenticato di mettere uno spazio fra 'Mi piace' e 'la torta di mele.'. Gli spazio di solito non contano, ma contano all'interno delle stringhe. (E' vero quel che si dice: i computer non fanno quello che vuoi che facciano, solo quello che gli dici di fare.) Proviamo ancora:

puts 'Mi piace ' + 'la torta di mele.'
puts 'Mi piace' + ' la torta di mele.'
Mi piace la torta di mele.
Mi piace la torta di mele.

(Come vedi non ha importanza a quale stringa aggiungo lo spazio.)

Quindi puoi sommare le stringhe fra loro, ma puoi anche moltiplicarle! (Per un numero, in ogni caso.) Guarda questo:

# encoding: utf-8
puts 'ammìcca ' * 4
Probabilmente ci sta.

(Scherzo... in realtà fa questo:)

ammìcca ammìcca ammìcca ammìcca

Se ti soffermi a pensarci, ha perfettamente senso. Dopo tutto, 7*3 significa semplicemente 7+7+7, quindi 'ammìcca'*3 significa semplicemente 'ammìcca'+'ammìcca'+'ammìcca'.

12 vs '12'

Prima di proseguire, dobbiamo essere sicuri di capire la differenza fra numeri e cifre (digits). 12 è un numero, ma '12' è una stringa composta da due cifre (o digits).

Proviamo a giocherellareun po' con questo concetto:

puts  12  +  12
puts '12' + '12'
puts '12  +  12'
24
1212
12  +  12

E cosa mi dici di questo:

puts  2  *  5
puts '2' *  5
puts '2  *  5'
10
22222
2  *  5

Questi esempi sono abbastanza semplici. Tuttavia se non presti abbastanza attenzione a come mescoli stringhe e numeri, potresti incappare in...

Problemi

A questo punto potresti aver provato alcune cose che non hanno funzionato. Altrimenti, eccotene alcune:

puts '12' + 12
puts '2' * '5'
#<TypeError: can't convert Fixnum into String>

Uhm... un messaggio di errore [NdT: che tradotto significa letteralmente "non è possibile convertire un Fixnum in una Stringa"]. Il problema è che non puoi proprio sommare una stringa a un numero, né moltiplicare una stringa per un'altra stringa. Non avrebbe più senso di quanto non ne abbia questo:

puts 'Betty' + 12
puts 'Fred' * 'John'

Un'altra cosa di cui essere consapevoli: puoi scrivere 'maiale'*5 in un programma, perché significa 5 volte la stringa 'maiale'. Tuttavia, non puoi scrivere 5*'maiale', perché significa 'maiale' volte il numero 5, che è una stupidata.

Infine, che succede se volessimo che un programma scrivesse Sei un' aquila!? Possiamo provare così:

puts 'Sei un'aquila!'

Ebbene, ciò non funzionerebbe; Non proverò nemmeno a eseguirlo. Il computer pensa che la stringa sia terminata troppo presto. (Questo è uno dei motivi per cui è bello avere un editor testuale che implementa il syntax coloring [NdT: colorazione della sintassi] per te.) Quindi come facciamo a fare in modo che il computer sappia cosa vogliamo che sia incluso nella stringa? Dobbiamo scampare l'apostrofo, in questo modo:

puts 'Sei un\'aquila!'
Sei un'aquila!

La barra rovesciata [o backslash] è il carattere che permette di scamparne un'altro [o, come si dice in inglese, di farne l'escape]. In altre parole, se hai un backslash e poi un altro carattere, essi vengono tradotti in un nuovo carattere. L'uniche cose di cui il backslash può fare l'escape, tuttavia, sono l'apostrofo il backslash stesso. (Se ci pensi, i caratteri di escape devono sempre scampare sé stessi.) Penso che a questo punto ci vogliano proprio alcuni esempi:

# encoding: utf-8
puts 'Sei un\'aquila!'
puts 'backslash alla fine di una stringa:  \\'
puts 'su\\giù'
puts 'su\giù'
Sei un'aquila!
backslash alla fine di una stringa:  \
su\giù
su\giù

Siccome il backslash non scampa una 'g', ma scampa sé stesso, quelle ultime due stringhe sono identiche. Non hanno lo stesso aspetto a livello di codice, ma per il tuo computer sono proprio equivalenti.

Se hai altre domande, continua a leggere!
Non posso mica rispondere a tutte le domande su questa pagina, dopotutto.

Che ne dici?

Scritto da

Duccio Armenise

Founder Corsidia & co-Founder WorldBridge

Aiuto solo i migliori Maestri a trovare i loro prossimi Studenti. Come? Così! :)

Per

Corsidia

I tuoi prossimi Studenti ti stanno già cercando, tu ci sei?