13.10.11

Blocks, closures y objetos

Cuando ando de paseo por el mundo Ruby (especialmente RoR) me suelo encontrar con bastantes 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

5 comentarios:

Bet Bhai dijo...

Live cricket betting adds a new level of excitement compared to pre-match betting. With fairplay cricket live, users can:
• Analyze match momentum
• Adjust strategies during gameplay
• Hedge bets to reduce risk
• Take advantage of sudden odds changes
fairplay cricket live

Silverexchange dijo...

Cricket fans look for stability and quick odds updates. From what I observed on Silver Exchange, the platform performs consistently well.

fairplay dijo...

When performance meets smart design, engagement becomes effortless. Fairplay Club offers a fluid, responsive, and user-friendly experience.

WinBuzz dijo...

A dependable platform makes online engagement much smoother. After checking Winbuzz Login, I liked how responsive and stable the overall system feels.

radhe exchange dijo...

A smartly structured interface improves online reliability. After accessing radhe exchange login, the process remained steady.