# Evaluación dinámica

Si las variables de marcador de posición como `${file.meta.width}` no son suficientes para implementar la lógica de tu aplicación, también puedes usar todas las funciones de JavaScript moderno para crear instrucciones dinámicas deAssembly. Estos scripts se ejecutarán en nuestra infraestructura y tendrán acceso a todas las[variables de Assembly](/es/docs/topics/assembly-instructions.md#assembly-variables). Esto incluye los metadatos de un archivo que Transloadit determina automáticamente, información básica sobre el entorno de ejecución de la Assembly y[campos que puedes completar como desarrollador al crear la Assembly](/es/docs/api/assemblies-post.md#fields).

Por ejemplo, quizás quieras cambiar el tamaño de las imágenes para que cumplan con el principio de diseño de la[proporción áurea](https://en.wikipedia.org/wiki/Golden%5Fratio):

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_3z41v8VuCJJKgtsQfSKB6o2uiSXL)

```json
{
  "robot": "/image/resize",
  "height": "${file.meta.width / (1 + Math.sqrt(5))/2}",
  "resize_strategy": "crop"
}

```

O quizás quieras convertir a mayúsculas el nombre del archivo de salida al[subirlo a S3](/docs/robots/s3-store.md):

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_3z41v8VuCJJKgtsQfSKB6o2uiSXL)

```json
{
  "robot": "/s3/store",
  "path": "my-folder/${file.name.toUpperCase()}"
}

```

Todo lo que esté dentro de `${...}` se evaluará y tendrás disponibles todas las funciones del lenguaje JavaScript, siempre que tu script no realice ninguna operación asincrónica. Por ejemplo, puedes usar los métodos de [Math](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global%5FObjects/Math),[Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global%5FObjects/Date) o[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global%5FObjects/String).

## Consulta de variables

La evaluación dinámica no tiene costo cuando consiste en una consulta simple, como `${file.name}` o`${file.meta.faces[0]}`.

Las evaluaciones más complejas, como `${Math.max(10, file.meta.width)}`, tienen un costo. Esto se debe a que invocamos [🤖/script/run](/docs/robots/script-run.md) para interpretar JavaScript, lo que hace que las evaluaciones exijan más a nuestras máquinas y sean unos milisegundos más lentas, pero, al tener a tu disposición un lenguaje de programación completo, también sean mucho más potentes.
