Dart — Funciones


Las funciones en los lenguajes de programación son un grupo de sentencias que dato unos parámetros devuelve un resultado de cierto tipo o incluso sin retorno como los void.


Funciones en Dart

Las funciones en Dart son objetos que se pueden asignar a variables, enviar como parámetros y como resultado, Dart también admite funciones anónimas y funciones de flecha.

Dart es un lenguaje orientado a objetos, como dijimos inicialmente las funciones también son objetos que se identifican por el tipo Function.

bool isEvenOrOddNumber(num number) {
  return number % 2 == 0;
}

void main() {
  // validar si un número es par o impar
  int number = 3;
  var evenNumber = isEvenOrOddNumber(number);
  print(evenNumber ? 'Es par' : 'Es impar');
}

Aunque Dart siempre recomienda las funciones de tipo, si quitamos el tipo de retorno sigue funcionando y siendo una función.

isEvenOrOddNumber(num number) {
  return number % 2 == 0;
}

Para el tipo de funciones como los ejemplos que vimos anteriormente, se puede abreviar como una función de flecha con la siguiente estructura: <tipe name() => print(‘nombre’);>.

// Abreviar la función anterior
bool isEvenOrOddNumber(num number) => number % 2 == 0;

Parámetros

Una función puede tener cualquier número de parámetros obligatorios, también puede tener opcionales y con nombre.

int add({required int number1, required int number2}) => number1 + number2;

int add2(int number1, {int? number2}) => number1;

int add3(int number1, int number2) => number1 + number2;

Parámetros con nombre

Los parámetros con nombre son opcionales a menos que se indique que serán obligatorios con la palabra clave required. En caso de no marcarlos como required, entonces se debe colocar opcionales con <?> después del tipo de dato.

void main() {
  var res = addOptional(num1: 1, num2: 3);
  print(res); // 4
}

/// Suma con parámetros opcionales
int addOptional({int? num1, int? num2}) {
  if (num1 == null || num2 == null) return 0;
  return num1 + num2;
}

También se pueden definir valores por defecto.

void main() {
  var res = addOptional(num1: 1, num2: 3);
  print(res); // 4
}
/// Suma con parámetros con valores por defecto
int addOptional({int num1 = 0, int num2 = 0}) {
  return num1 + num2;
}

Y como habíamos visto antes, tenemos los obligatorios con required.

void main() {
  var res = addRequired(num1: 1, num2: 3);
  print(res); // 4
}

/// Suma con parámetros obligatorios
int addRequired({ required int num1, required int num2}) => num1 + num2;

Parámetros posicionales opcionales

Cuando veamos parámetros dentro de [], es porque son parámetros posicionales opcionales sino se agrega un valor por defecto se debe anotar como opcional con ?.

void main() {
  var res = buildMessage(
    'Bob', 'Pep', 'Este es un mensaje de agradecimiento.', 'Colombia');
  print(res);
}

String buildMessage(String from, String to, String msg, [String? postal]) {
  var result = '''
    Buen día $to
    $msg
    Cordial saludo $from
  ''';

  if (postal != null) {
    result = '${result}Enviado desde $postal';
  }

  return result;
}

Función main()

Todas las aplicaciones en Dart deben tener una función main() superior, que es donde arranca la aplicación, devuelve void y tiene como parámetros opcional List<String> para los argumentos. Ya hemos visto algunos ejemplos de esta función anteriormente.

// ejemplo básico
void main() {
  print('Hola Mundo!');
}

// ejecutar app con el comando:
// dart args.dart 1 test
void main(List<String> arguments) {
  print(arguments);

  assert(arguments.length == 2);
  assert(int.parse(arguments[0]) == 1);
  assert(arguments[1] == 'test');
}

Funciones como objetos de primera clase

Esto se refiere a la forma de poder pasar una función dentro de otra función.

int addElement(int element) {
  return element + element;
}

void main() {
  var list = [1, 2, 3];

  // pasamos la función addElement como parámetro.
  var newList = list.map(addElement);

  print(newList); // (2, 4, 6)
}

Funciones anónimas

La mayoría de las funciones tienen nombre como las que hemos visto durante nuestro aprendizaje sobre funciones, pero también podemos crear funciones sin nombre llamadas funciones anónimas o lambdas.

void main() {
  // imprimimos la cantidad de letras que tiene cada color
  const colors = ['red', 'blue', 'green'];
  colors.map((color) {
    return color.toUpperCase();
  }).forEach((color) {
    print('$color: ${color.length}');
  });

}

Para aprender más sobre funciones en Dart, podemos acceder a la documentación oficial, donde hay más detalle al respecto.

Conclusión

Para finalizar, vimos los diferentes tipos de funciones que usa Dart y algunas formas de aplicarlas en nuestras aplicaciones, esto nos ayudará mucho cuando estemos trabajando con Flutter.

Siguientes pasos

En la siguiente publicación aprenderemos un poco sobre las declaraciones o sentencias de control en Dart.

Fuentes

Deja un comentario

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