do
y end
(ciertamente me recuerdan PASCAL), o en una sola linea {
y }
, esto es lo que llamamos convencionalmente bloques (de instrucciones).# método de configuración config :scope, do |bag| bag.set :key, 'value' end
Nada nuevo, tampoco para aburrirse, lo bonito de este lenguaje es la manera en que maneja estos conceptos de bloques. Pero también tiene una sintaxis poderosa, breve y bastante agradable de leer y escribir.
¿Hago mal en preferir un lenguaje también por su estética?
Tampoco voy a dar una clase de bloques en ruby, pero me interesa en concreto el concepto de
lambda
y su utilización como callback en algunos escenarios cotidianos en los lenguajes de programación de alto nivel como lo es también PHP.Y no hay que buscar demasiado, la versión mas reciente del pre-procesador de hipertexto ya venía con torta bajo el brazo, pues ofrece bastante potencial en la orientación a objetos así como con este bonito concepto que es un closure. De hecho, en php un closure por si mismo es un objeto, una clase.
// método de configuración config('scope', function ($bag) { $bag->set('key', 'value'); });
Finalmente me parece que su funcionalidad es la misma, contener un grupo de instrucciones en un contexto aislado, sin importar si devuelve un resultado o no.
Así como el ejemplo de un método de configuración cualquiera se pueden dar otras alternativas mas flexibles, aquí otra definición:
// agregamos un nuevo libro en alguna colección function add_book_to($user, Closure $describe) { $book = $user->books->build(); $describe($book); $book->save(); } // seleccionamos a un usuario $me = user::first_by_name('Alvaro'); // agregamos el libro add_book_to($me, function ($book) { $book->title = 'Fake title'; $book->description = 'Fake description'; });
Y la verdad es que una función anónima implementada en php tiene bastantes desventajas a comparación de otros lenguajes, pero tampoco es inútil. Se pueden conseguir features interesantes en cuanto a flexibilidad en php.
Chiro-liro