# Due domande sugli array

**URL:** <https://www.ruby-forum.com/t/due-domande-sugli-array/105280>\
**Category:** IT\
**Created:** [May 28, 2007, 11:27am UTC](https://www.ruby-forum.com/t/due-domande-sugli-array/105280 "2007-05-28T11:27:57Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![mentat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@mentat](https://www.ruby-forum.com/u/mentat)\
**Post date:** [May 28, 2007, 11:27am UTC](https://www.ruby-forum.com/t/due-domande-sugli-array/105280/1 "2007-05-28T11:27:57Z")

</div>

Vi vorrei sottoporre due domande su due problemi che mi sono capitati  
studiando Ruby.Nelle risposte considerate che sono all’inizio. 8\>)

## I domanda: Questo e’ il codice che ho scritto

# Creaziane dell array

a=%w{ pippo giovanni luca andrea }

# Vedo quanti sono i componenti dell’array

n=a.size  
#Inizio il ciclo per stamparli  
for i in 0…n  
puts “Il valore e’----------\>” + a[i].to\_s  
end

# 

## I valori stamapti sono questi: Il valore e’----------\>pippo Il valore e’----------\>giovanni Il valore e’----------\>luca Il valore e’----------\>andrea Il valore e’----------\> La domanda e’ perche compare l’ultima riga? Cioe’ il nil?

## II Domanda: Questo codice l’ho preso dal libro di M. Ceresa nel 3Â° capitolo.

## a=%w{pera mela 1 Antonio casa\_roma} class Array def conta\_array for x in self puts x end end end a.conta\_array

Ovviamente ,funziona!! Ma la mia domanda e’ perche usa “self”  
Come fa la funzione a sapere quanti sono i componenti dell’array?  
Grazie a tutti per le eventuali risposte!!

---

<div class="post-metadata">

**Author:** ![mentat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@mentat](https://www.ruby-forum.com/u/mentat)\
**Post date:** [May 28, 2007, 11:36am UTC](https://www.ruby-forum.com/t/due-domande-sugli-array/105280/2 "2007-05-28T11:36:51Z")

</div>

On 5/28/07, Giovanni C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> n=a.size  
> Il valore e’----------\>  
> La domanda e’ perche compare l’ultima riga? Cioe’ il nil?

Dovreasti mettere:

for i in 0…n

con 3 puntini…o piu semplicemente

a.each |item|  
puts item  
end

---

<div class="post-metadata">

**Author:** ![mentat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@mentat](https://www.ruby-forum.com/u/mentat)\
**Post date:** [May 28, 2007, 11:38am UTC](https://www.ruby-forum.com/t/due-domande-sugli-array/105280/3 "2007-05-28T11:38:51Z")

</div>

On 5/28/07, Giovanni C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> n=a.size  
> Il valore e’----------\>andrea  
> Il valore e’----------\>  
> La domanda e’ perche compare l’ultima riga? Cioe’ il nil?

Perchè cerchi di stampare un elemento fuori dall’array…che è nil…e  
nil.to\_s è una stringa vuota…

---

<div class="post-metadata">

**Author:** ![mentat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@mentat](https://www.ruby-forum.com/u/mentat)\
**Post date:** [May 28, 2007, 11:40am UTC](https://www.ruby-forum.com/t/due-domande-sugli-array/105280/4 "2007-05-28T11:40:53Z")

</div>

> a.each |item|  
> puts item  
> end

ho dimenticato un “do”…il codice giusto era:

a.each do |item|  
puts item  
end

in questo modo iteri l’array senza andare dopo l’ultimo elemento…

---

<div class="post-metadata">

**Author:** ![mentat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@mentat](https://www.ruby-forum.com/u/mentat)\
**Post date:** [May 28, 2007, 1:07pm UTC](https://www.ruby-forum.com/t/due-domande-sugli-array/105280/5 "2007-05-28T13:07:21Z")

</div>

Grazie per le risposte, siete stati molto gentili.  
Guardando bene il codice la prima domanda non l’avrei dovuta fare!! 🙂  
Grazie in particolare a Giovanni I. per l’esauriente spiegazione  
sulla seconda domanda.  
Per Andrea F.: In effetti il codice che tu hai scritto, l’autore lo  
propone piu’ avanti per spiegare i BLOCCHI.

---

<div class="post-metadata">

**Author:** ![mentat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@mentat](https://www.ruby-forum.com/u/mentat)\
**Post date:** [May 28, 2007, 11:38am UTC](https://www.ruby-forum.com/t/due-domande-sugli-array/105280/6 "2007-05-28T11:38:52Z")

</div>

Il giorno 28/mag/07, alle ore 11:27, Giovanni C. ha scritto:

> a=%w{ pippo giovanni luca andrea }

Questo crea un array a = [‘pippo’, ‘giovanni’, ‘luca’, ‘andrea’] di 4  
elementi dove a[0] è il primo e a[3] l’ultimo. Ciò significa che…

> for i in 0…n

Stai facendo un loop di una taglia più grande delle dimensioni  
dell’array :). Dovresti fare 0…n-1 oppure 0…n (con tre punti) per  
dirgli di loopare da 0 a n-1, cioè dimensioni dell’array.

> La domanda e’ perche compare l’ultima riga? Cioe’ il nil?

Per il motivo sopra esposto 🙂

> Ovviamente ,funziona!! Ma la mia domanda e’ perche usa “self”  
> Questo codice è un pò più complesso, andiamo con ordine: l’inclusione  
> della definizione in class Array significa che stiamo “aprendo” la  
> classe Array, aggiungendo un metodo: conta\_array. Questo metodo è  
> definito “instance method”, cioè metodo di istanza, ovvero un metodo  
> che è proprio della singola istanza di una classe. In ruby si è  
> soliti indicare questi metodi con #, es. Array#conta\_array.

All’interno del metodo conta\_array self si riferisce all’oggetto al  
quale stai chiedendo di contarsi. L’espressione “for x in self”  
significa “per ogni x elemento di me stesso”. In queto caso un array  
sa di quanti elementi è composto e passa nel loop ogni elemento che  
lo compone.

Entrambi questi programmi però non sono propriamente ruby-esqui. In  
ruby il modo preferito di stampare il contenuto di un array è

a = %w(quanto e bello ruby)  
a.each {|element| puts element}

che tra l’altro ha il vantaggio di essere più corto 🙂
