10 julio 2012
2
10
/07
/julio
/2012
00:15
Estaba navegando y me encontre con un articulo que indicaban erroneamente no recomendar utilizar "and" y "or" y a la vez utilizar solo "&&" y "||", aqui el ejemplo que exponían:
a = true
b = false
c = a and b
puts c # true
c = a && b
puts c # false
c = b or a
puts c # false
c = b || a
puts c # true
Trate de contactarlos pero al parecer su mecanismo de comentarios no funciona.
El error en el ejemplo y conceptos
Bueno lo que trate de contestar es lo siguiente:
Hay que realizar una aclaración el problema aquí no es del and, sino es de la sintaxis
c = a and b
debería ser
c = (a and b)
porque?
porque sin los parentesis, en ruby lo que hace es asignar "a" a c, osea asi
"c = a" (hace una asignacion) y luego ejecuta el "and b" (hace una comparacion)
Hay que recordar que el uso de parentesis no es necesario en Ruby, siempre y cuando el contenido no sea trivial, en este caso "and" es un objeto.
En el caso de c = a && b, aqui es distinto porque && es un método operador de a, que recibe el parametro de b, (que sería a.send('&',b)) osea ejecuta primero la comparacion y luego el resultado lo almacena en c.
Para que se den una idea entre la diferencia del objeto and y del metodo &&:
puedo escribir: c=a&&b (funciona)
puedo escribir: c=a and b (funciona, pero mal)
puedo escribir: c=(a and b) (funciona)
no puedo escribir: c=aandb (no funciona)
no puedo escribir: c=(aandb) (no funciona)
Por si desean o puedan comentar el articulo erroneo esta es la direccion: http://www.boliviaonrails.com/2012/02/21/pequenas-instrucciones-para-aplicaciones-mas-estables-con-ruby/
Pueden comentar libremente, aquí si funcionan los comentarios.