Qual è il modo più veloce e preferibile per l'assegnazione di variabili in ruby? [chiuso]

1

Sono uno sviluppatore del RoR e voglio chiarire qualche dubbio sull'assegnazione delle variabili ruby.

Nel ruby abbiamo due modi per assegnare le variabili.

str, arr, num = "Hi", [1, 2], 3

e

str = "Hi"
arr = [1, 2]
num = 3

So che il primo modo sarà più lento del secondo, ma voglio sapere che, come per il linguaggio ruby, quale è il metodo preferibile e le prestazioni affidabili?

    
posta RAJ ... 30.08.2012 - 07:48
fonte

2 risposte

4

"Scrivere un codice Ruby efficiente" di Dr. Stefan Kaes ha da dire sull'assegnazione parallela (il tuo primo esempio):

Like any other Ruby expression, a value needs to be returned from a parallel assignment. The value returned by a parallel assignment is the value of the expression on the right-hand side of the assignment. This means Ruby needs to create an array if the right-hand side is a list of expressions:

$ irb
>> a,b = 1,2
=> [1, 2]

Of course, if the assignment isn’t the last statement of a method, the created array becomes garbage immediately. It’s therefore advisable to avoid the use of parallel assignment in performance-critical code sections.

Dr. Kaes continua a ipotizzare che Ruby 1.9 possa cambiare la semantica delle assegnazioni parallele per restituire sempre true per motivi di prestazioni.

Ai miei occhi, l'assegnazione parallela non aiuta né chiarezza né manutenibilità, quindi, per motivi di prestazioni a parte, lo eviterei naturalmente.

    
risposta data 30.08.2012 - 08:15
fonte
0

La seconda opzione è preferibile nella maggior parte dei casi. Tuttavia, il primo caso è più leggibile in alcune situazioni.

Se hai un tipo comune di variabili o un array puoi usare il primo caso. Esempio:

arr1, arr2, arr3 ... arr20 = 1, 2, 3 ... 20

In questo caso usare 1 linea di codice è più preferibile usando 20 affermazioni diverse. Il codice è più leggibile.

Se intendi utilizzare assegnazioni parallele, devi occuparti di flusso di assegnazione

    
risposta data 30.08.2012 - 08:25
fonte