Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Array

Estensioni che espongono metodi per gestire gli array e le conversioni di tipo
Estensioni che espongono metodi per gestire gli array e le conversioni di tipo
Link copiato negli appunti

Le estensioni per gli Array sono probabilmente le più interessanti, insieme a quelle per Hash, Object, Module e Kernel. Vediamo alcuni esempi.

Ruby mette a disposizione i metodi Array#first e Array#last per accedere rapidamente al primo ed ultimo elemento di un array. ActiveSupport introduce and Array#second, Array#third, Array#fourth e Array#fifth.

Esiste anche il metodo Array#forty_two, con probabili riferimenti alla famosa risposta.

require '../helper'

colors = %w(red yellow green blue)

colors.first# => red
colors.second   # => yellow
colors.third# => green
colors.fourth   # => blue

Inoltre, i metodi Array#from e Array#to consentono di accedere agilmente a dei sottoinsiemi dell'array originale.

require '../helper'

colors = %w(red yellow green blue black white)

colors.from(3)# => ['blue', 'black', 'white']
colors.to(3)  # => ['red', 'yellow', 'green']
colors.from(2).to(1)  # => ['green', 'blue']

Questi due metodi potrebbero tornare molto utili. Ipotizziamo di avere un array di oggetti Post di un blog e di voler mostrare un layout completo per il primo e solo delle headlines per i rimanenti. Ecco una soluzione
elegante.

require '../helper'

class Post < Struct.new(:id, :title, :content)
end

posts = (1..10).collect do |index|
  Post.new( index, "Title post #{index}", "This is the content for post #{index}.")
end

# mostra i post se l'array non è vuoto
if post = posts.first
  
  puts "<h2>#{post.id}. #{post.title}</h2>"
  puts "<p>#{post.content}.</p>"
  
  # mostra headline
  puts "<ol>"
  posts.from(2).each do |post|
    puts "<li>#{post.title}</li>"
  end
  puts "</ol>"
   
end

Tra le estensioni dedicate alla conversione la più interessante è Array#to_query, decisamente utile per chi ha necessità di lavorare con URL e query string. Array#rand permette di
estrarre random un elemento dall'array. Si tratta di semplici utility ma è estremamente formativo andare a curiosare l'implementazione di questi metodi per migliorare la propria conoscenza di Ruby.

# Definizione del metodo Array#rand
def rand
  self[Kernel.rand(length)]
end

Forse il metodo più interessante è Array#extract_options!. Questo metodo è largamento diffuso in Rails in tutti quei metodi che accettano illimitati parametri ed una serie di
parametri opzionali passati per keyword. Un esempio sono i validatori.

validate_presence_of :attr1, :attr2
validate_presence_of :attr1, :attr2
validate_presence_of :attr1, :attr2, :option1 => true, :options2 => 'foo'

Questo metodo chiamato sull'array parametro separa gli argomenti dalle opzioni. Ecco alcuni esempi tipici di utilizzo.

require '../helper'

def print_params(*args)
  puts "params:   " + args.inspect
  options = args.extract_options!

  puts "args: " + args.inspect
  puts "options:  " + options.inspect
end

print_params :attr1, :attr2
# => params:  [:attr1, :attr2]
# => args:[:attr1, :attr2]
# => options: {}

print_params :attr1, :attr2
# => params:  [:attr1, :attr2]
# => args:[:attr1, :attr2]
# => options: {}

print_params :attr1, :attr2, :option1 => true, :options2 => 'foo'
# => params:  [:attr1, :attr2, {:options2=>"foo", :option1=>true}]
# => args:[:attr1, :attr2]
# => options: {:options2=>"foo", :option1=>true}

Ti consigliamo anche