Note: Testo rimosso dalla rev 1  e Testo aggiunto nella rev2

FunzionaleMap

A cosa serve map() Essa permette di applicare una funzione su ogni elemento di una collezione, restituendo un Array con i risultati. In pratica, invece di ary=Array.new

 ary=Array.new
 for i in oggEnumerable 
  ary.push(funzione(i))ary.push(funzione(i))
 end
 puts ary

basta fare:

puts oggEnumerable.mapoggEnumerable.map {|i|{|i| funzione(i)}

funzione(i)}

o se abbiamo a disposizione OggettiProcEMethod?:
 puts oggEnumerable.mapoggEnumerable.map &funzione

&funzione

Ad esempio, supponiamo di voler creare un nuovo file contenente tutte le linee di 'esempio.txt' ma scritte al contrario. la funzione che ci serve per scriverle al contrario e’ reverse(), il modo piùpiù semplice per farlo sarebbe:

 print 

printFile.new('esempio.txt').map File.new('esempio.txt').map{|linea| {|linea| linea.reverse}linea.reverse}

Possiamo poi usare map() per estrarre delle informazioni sugli oggetti, ad esempio, potremmo decidere di sapere qual’èqual’è la lunghezza delle linee del file:


 puts 

putsFile.new('esempio.txt').map File.new('esempio.txt').map{|linea| {|linea| linea.length}linea.length}

In generale, map() e’ la soluzione migliore per molti problemi in linguaggi funzionali tipo il LISP. Ma la potenza e la chiarezza di questa funzione hanno fatto si che venisse importata anche in altri sistemi, come ad esempio SmallTalk, python e ruby.

Ruby, grazie al sistema degli iteratori, fa si che a qualunque oggetto definisca una funzione each() possa rendere disponibile anche map() facilmente. Ad esempio:


 >> class Tripla
 >>  def initialize(a,b,c)
  @a,@b,@c=a,b,cinitialize(a,b,c)
 >>   @a,@b,@c=a,b,c
 >>  end
 >>  def each
  
 >>   yield @a
  
 >>   yield @b
  
 >>   yield @c
 >>  end
 >>  include Enumerable # ecco la magia!
	
 >> end
	
 => Tripla
	t=Tripla.new(
 >> 13,’miao’,[1,2,3]t=Tripla.new( 13,'miao',[1,2,3] )
	
 => #
	t.map#<Tripla:0x27f8b10 {|x|@b="miao", x@a=13, * 2 }
	=> [26, “miaomiao”, [1,@c=[1, 2, 3,3]>
 >> 1,t.map 2,{|x| 3]]

x * 2 } => [26, "miaomiao", [1, 2, 3, 1, 2, 3]]
Created on November 25, 2005 13:36 by il gruppo (256.256.256.256)