Anatomía de un programa Dart y la función main

Anatomía de un programa Dart: el punto de entrada y su estructura

Todo programa en Dart tiene un punto de partida obligatorio: la función main. Imagina que tu código es un edificio complejo; sin una entrada principal claramente marcada, el sistema operativo no sabría por dónde empezar a trabajar. Por eso, Dart requiere que definas esta función; de lo contrario, el programa simplemente no arrancará.

Esta función es el “corazón” del proceso de ejecución. Cuando ejecutas un archivo mediante el comando dart run, la máquina virtual de Dart (VM) realiza tres pasos rápidos: primero, el parsing (analiza el texto de tu código para entender su estructura); segundo, la compilación JIT (Just-In-Time), que traduce ese código a instrucciones que tu procesador entiende mientras el programa se está preparando; y finalmente, la ejecución.

Existen dos formas de escribir este punto de entrada. La más simple es void main(), ideal para scripts que no necesitan información externa. Sin embargo, si estás creando una herramienta de línea de comandos (CLI) que deba reaccionar a parámetros que el usuario escribe (como --verbose o un nombre de archivo), necesitas void main(List<String> args). En este segundo caso, args es una lista que contiene esos textos que el usuario pasó por la terminal. Si intentas acceder a args sin haberlo declarado en la firma de la función, el compilador te detendrá de inmediato porque la variable no existe en ese ámbito.

Para comunicarte con el usuario, usamos la función print(). Es importante entender que print() no es un método que le pertenece a un objeto (como String.print()), sino una función global que pertenece a la biblioteca dart:core. Esta biblioteca es especial: Dart la importa automáticamente en cada archivo que creas, por eso puedes usar tipos básicos como String o int y funciones como print() sin tener que escribir un import al principio. El resto de las librerías, como dart:io para manejar archivos, deben importarse explícitamente.

// Comentarios: se usan para explicar el “porqué” de las cosas.
// Un comentario de una sola línea comienza con //
/
Un comentario multilínea
se usa para bloques más grandes
/

/// Los comentarios de documentación comienzan con tres barras.
/// Son vitales porque las herramientas de generación de documentación
/// los usan para crear guías de tu código automáticamente.

void main(List args) {
// Definimos un nombre por defecto
String usuario = “Visitante”;

// Si el usuario pasó argumentos en la terminal, usamos el primero
if (args.isNotEmpty) {
usuario = args[0];
}

// Mostramos el resultado
print(‘Hola, $usuario! Bienvenido a Dart.’);
print(‘Has pasado ${args.length} argumentos.’);
}

En el código anterior, hemos definido la función main con la firma que acepta una lista de cadenas (List<String> args). El tipo void al principio indica que la función realiza una tarea pero no devuelve ningún valor al sistema operativo al finalizar.

Cuando ejecutas este programa con dart run bin/mi_programa.dart Juan, la VM asigna la lista ['Juan'] al parámetro args. Dentro de la función, la propiedad isNotEmpty verifica si la lista tiene contenido; como en este caso sí lo tiene, la variable usuario se actualiza de “Visitante” a “Juan”. Finalmente, print() envía el texto a la consola. Fíjate que usamos $usuario dentro de las comillas; esto se llama interpolación de cadenas y permite insertar valores directamente en el texto de forma limpia.

El error frecuente
Un error muy común cuando se empieza es intentar usar los argumentos de la terminal sin declarar la variable en la función main.

// ESTO DARÁ ERROR DE COMPILACIÓN
void main() {
  // Error: 'args' no está definido en el ámbito.
  print('Argumento: $args'); 
}

Si quieres capturar lo que el usuario escribe, debes asegurar que la firma de tu función incluya (List<String> args). Si la dejas como main(), el compilador considerará que el programa no tiene capacidad de recibir parámetros externos.

9

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio