Estudio

La clase Expando de Groovy

¿Te imaginas una clase de Groovy a la que le puedes añadir, en tiempo de ejecución, propiedades y métodos? Pues eso es lo que te ofrece su clase Expando, cuyo uso es muy similar al modo en el que, en JavaScript, se usan objetos instanciando la variable Object.

// Define la classe Expando con dos propiedades:
def blog = new Expando(titulo : "metroSetenta", subtitulo : "Arquitectura y diseño de software")
// Añade una nueva propiedad a Expando:
blog.url="metrosetenta.es"
// Incluye un método con un cierre:
blog.toString={
  return """
    Título del blog:    ${titulo}
    Subtítulo del blog: ${subtitulo}
    URL del blog:       ${url}
  """
}
println (blog)

Observa en el pequeño ejemplo de arriba que el constructor usa una notación similar a los mapas Groovy y, que los métodos, son implementados usando cierres (closures). Puedes probar este pequeño ejemplo guardándolo en un archivo para ejecutarlo con el comando groovy.

Patrones creacionales

Los patrones de diseño creacionales son aquellos que nos proponen soluciones para problemas relacionados con la instanciación de objetos. Automatizar el proceso de construcción de un objeto complejo, limitar la instaciación de una clase a un único objeto al que se pueda acceder de manera global o usar un objeto como prototipo para crear otros objetos similares son algunos de los usos de los patrones de diseño creacionales.

  • Factory Method (Método de fabricación): Si necesitamos un objeto de un tipo, pero desconocemos cual es el objeto concreto que vamos a necesitar en el momento del diseño, este es nuestro patrón. Donde dije tipo puedes poner, por ejemplo, conexión a base de datos, y puedes sustituir objeto concreto por conexión a Oracle Database, conexión a MySQL, conexión a PostgreSQL…

Subcomandos de Deno

Hoy voy a ampliar los artículos sobre Deno que hay en el blog comentandote los subcomandos disponibles en esta herramienta. Si ya has instalado y configurado Deno, y dispones del comando deno en tu consola, el primer subcomando que debes probar es help.

$ deno help

Entre otras cosas, te va a facilitar un listado de subcomandos similar al que sigue:

  bundle         Bundle module and dependencies into single file
  cache          Cachea las dependencias
  completions    Genera autocompletados de la consola de comandos
  doc            Muestra la documentación para un módulo
  eval           Evalúa un script
  fmt            Formatea archivos fuente
  help           Imprime la ayuda general o la de un subcommando dado
  info           Muestra información sobre el caché o información relacionada con un archivo fuente
  install        Instalar script como un ejecutable
  lint           Aplicar resaltado de código a archivos fuente
  repl           Bucle leer, evaluar e imprimir
  run            Ejecuta un programa desde un nombre de archivo o una URL. Usa '-' como nombre de archivos para leer de la entrada estandar
  test           Ejecuta las pruebas
  types          Imprime las declaraciones de TypeScripts en tiempo de ejecución
  upgrade        Actualiza el ejecutable deno a una versión dada

Algo más sobre el subcomando help es que si lo usas con cualquiera de los subcomandos listados más arriba, te facilitará información más detallada sobre dicho subcomando y su sobre uso. Por ejemplo, si queremos saber algo más sobre el subcomando eval, podemos ejecutar el siguiente comando:

¿Qué es Docker?

Docker es, posiblemente, la herramienta que revolucionó el modo en el que desplegamos y distribuimos aplicaciones. Asegurarnos de que el entorno en el que se van a ejecutar nuestras aplicaciones es óptimo para ellas ha sido siempre un esfuerzo asociado al desarrollo de software. El uso de máquinas virtuales supuso el acercamiento más satisfactorio antes de Docker, pero el rendimiento se veía comprometido por el esfuerzo que suponía, para el sistema operativo huesped, levantar y gestionar un sistema operativo completo en el que ajustar el entorno deseado y ejecutar nuestra aplicación. Con Docker, ejecutamos nuestras aplicaciones en entornos aislados, contenedores, que si bien no son máquinas virtuales, se asemejan muchísimo, pero con la ventaja de aprovechar nuestro sistema operativo todo lo posible en lugar de tener que gestionar un completo sistema operativo inquilino.