2010-07-08 9 views
5

Mi sono spostato di recente da C# a Ruby, e mi manca la possibilità di creare regioni di codice collassabili e etichettate. E 'appena venuto in mente che dovrebbe essere OK per fare questo genere di cose:è OK usare inizio/fine in Ruby nel modo in cui userei #region in C#?

class Example 
    begin # a group of methods 

    def method1 
     .. 
    end 

    def method2 
     .. 
    end 

    end 

    def method3 
    .. 
    end 
end 

... ma è in realtà OK per farlo? Do metodo1 e metodo2 finiscono per essere lo stesso tipo di cosa come metodo3? O c'è qualche idioma Ruby per fare ciò che non ho ancora visto?

risposta

6

Come altri hanno affermato, ciò non modifica la definizione del metodo.

Tuttavia, se si desidera etichettare gruppi di metodi, perché non utilizzare la semantica Ruby per etichettarli? Potresti usare i moduli per dividere il tuo codice in blocchi che appartengono insieme. Questa è una buona pratica per grandi classi, anche se non si riutilizza i moduli. Quando il codice cresce, sarà facile dividere i moduli in file separati per una migliore organizzazione.

class Example 
    module ExampleGroup 
    def method1 
     # .. 
    end 

    def method2 
     # .. 
    end 
    end 
    include ExampleGroup 

    def method3 
    # .. 
    end 
end 
1

Sì, è giusto farlo (cioè non cambia la semantica del codice).

Tuttavia, questo non è uno schema comune e potrebbe essere fonte di confusione per i lettori del codice che non capirebbero qual è lo scopo del blocco begin ... end.

2

Penso che dovrebbe essere OK. Non l'ho visto molto però. Un altro modo si potrebbe ottenere lo stesso risultato, mentre usando meno indentazione, è quello di chiudere e riaprire la classe, in questo modo:

class Example 
    def method1 
    .. 
    end 

    def method2 
    .. 
    end 
end 

# optionally put some other code here 

class Example 
    def method3 
    .. 
    end 
end 

Penso che questo è spesso usato in modo che si può mettere altro codice nel mezzo, come ad come quando c'è una costante definita nel primo blocco class Example, che viene utilizzato per definire una costante nel codice centrale, che viene utilizzato per definire una costante nel secondo blocco class Example. In questo modo non devi mai fare riferimento a una costante prima che sia definita.

6

Aggiunta codice Ruby arbitrario per piacere al tuo editore non mi sembra affatto ragionevole. Penso che si dovrebbe cercare di ottenere un editor di testo decente, uno che sarebbe in grado di configurare per utilizzare alcune parole chiave si mette nei vostri commenti per abilitare il codice lì pieghevole, ad esempio:

# region start AAA 

some(:code, :here) 

# region end AAA 

E se mi permetto di essere sarcastico: dovresti sapere che Ruby è molto più espressivo, elegante e carino di C#, ed è probabile che non ci sia alcun codice Ruby che dovrebbe essere nascosto in primo luogo! ;)

+0

Anche commenti formali come questo sono codice, IMHO. Quindi dalla tua logica sono anche irragionevoli;) – wdebeaum

+0

Formalmente, hai ragione. ;) –

+0

Rubymine ti consentirà di utilizzare #Regioni http://stackoverflow.com/questions/3204840/is-it-ok-to-use-begin-end-in-ruby-the-way-i-would- uso-regione-in-c – JamesDeHart

2

So che potrebbe essere un po 'vecchio, ma mi sono imbattuto in questo problema e ho trovato una soluzione killer. Se usi "Rubymine" puoi fare #regions.

Questo è dove si parla di navigazione regioni https://www.jetbrains.com/ruby/help/navigating-to-custom-region.html

#region Description 
Your code goes here... 
#endregion 

Quindi, con quanto sopra nel codice si vedrà il seguito:

editor di codice RubyMine - Con un metodo di esempio utilizzando le regioni un -folded Rubymine code editor - With a sample method using regions **un-folded**.

Editor codice Rubymine - Con un metodo di esempio che utilizza regioni piegate Rubymine code editor - With a sample method using **regions** folded.

Problemi correlati