Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di Grejo
    Registrato dal
    Jan 2003
    Messaggi
    838

    Perchè il ciclo For in Ruby è sconsigliato ???

    Ciao.
    Su un libro che sto leggendo per imparare Ruby s'è scritta la seguente affermazione:

    Il ciclo for è implementato internamente tramite l'iteratore proprio dell'oggetto preso in considerazione. Per questo motivo, e anche per mantenere il codice più vicino alla filosofia di Ruby, sconsigliamo un uso massiccio dei costrutti for: è molto meglio usare i blocchi e gli iteratori.

    Io adesso non capisco le seguenti cose:
    - Cosa vuol dire che il ciclo for è implementato internamente tramite l'iteratore proprio dell'oggetto preso in considerazione?
    - Perchè sono meglio gli iteratori che i cicli for?

    Ciao.
    Grejo
    Nato per essere un vincente, vivo per dimostrarlo!

    Paperino si fà le paperine ed è contento,
    Topolino si fà le topoline ed è contento,
    Pippo non è contento.

  2. #2
    Vuol dire che usare for è equivalente ad usare each.
    In altre parole i seguenti statement sono identici.

    codice:
    colors = %w(green red yellow)
    
    for color in @colors 
    ...
    end
    
    @colors.each do |color|
    ...
    end
    Come dice il libro, in realtà il primo internamente è implementato come il secondo.

    Non solo. Il secondo modo segue a pieno la filosofia completamente object oriented di Ruby ed è decisamente molto più flessibile. Facendo uso dei blocchi, puoi passare come argomento ad each delle proc o lambda, addirittura sfruttare la sintassi symbol -> proc.

    codice:
    colors = %w(green red yellow)
    
    print_item = Proc { |item| p(item) }
    @colors.each(print_item)
    
    @colors.each(&:downcase)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.