Funciones, estructuras de control y ciclos en Dart

Este es el segundo tutorial de la serie 'Mis apuntes Dart' en el cual nos adentraremos al lenguaje Dart desde lo más básico hasta conocer lo necesario para crear aplicaciones moviles con Flutter.

En este tutorial prenderemos sobre funciones y algunos conceptos del paradigma de programación orientado a objetos.

Índice

  1. Funciones
  2. Funciones anonimas
  3. Funciones flecha
  4. Sobre los parametros de una función

1. Funciones

La forma de declarar funciones en Dart es de la siguiente forma.

void add(){
  print(3+3);
}

void addParam(int a, int b){
  print(a + b);
}

int addReturn(int a, int b){
  return a+b;
}

Como ya debes saber si tienes algo de experiencia en la programación. En Dart puedes entregar parametros a una función usando los parentesis despues del nombre de la función. Además una función puede devolver algun valor. El tipo de dato que devuelve una función debe ser declarada antes del nombre de la función.

2. Funciones anonimas

Este tipo de función es muy similar a las funciones normales la única diferencia es que no tienen nombre por lo cual no pueden ser llamadas desde otras funciones. Por este motivo su uso se limita al lugar donde se las declara. Como por ejemplo, para ser entregados como parametro a cambio de un valor.

//funcion anonima
(){

}

//funcion que utiliza una funcion anonima como paramtreo
funcion((val){
  // ...
}, segundo_parametro){
  //Codigo de la funcion
}

Más adelante veremos una función forEach() que recorre una lista y hace uso de una función flecha como parametro. Asi como esta función en Flutter veremos muchas funciones que reciben como parametro otra función, para el cual deberemos hacer uso de una función anónima.

3. Funciones flecha

Las funciones flecha o arrow functions son una forma de abreviar la declaración de una función. Estas funciones no usand las llaves {} ni la palabra return para retornar algun valor.

void funcionFlecha(int a, int b) => print('El resultado es ${a+b}');

int suma(int a, int b) => a + b;

4. Sobre los parametros de una función

En Dart tenemos varios tipos de parametros uno de ellos son los parametros necesarios. Estos parametros tienen que ser entregados si o si a la función para que no haya errores en la compilación de nuestro proyecto.

void parametroNecesario(int a, int b){
  print('Imprime el número: ${a}');
  print('Imprime el número: ${b}');
}

Otro tipo de parametro que tenemos son los parametros opcionales. Estos parametros no necesariamente tienen que ser enviados a la función.

void parametroOpcional(int a, [int b]){
  print('Imprime el número: ${a}');
  print('Imprime el número: ${b}');
}

void parametroOpcionales(int a, [int b, int c]){
  print('Imprime el número: ${a}');
  print('Imprime el número: ${b}');
  print('Imprime el número: ${c}');
}

Otro tipo de parametro que tenemos en Dart son los parametros opcionales nombrados. Este tipo de parametro lo veremos en Flutter. Son parametros que no necesariamente deben ser enviados pero además tenemos que nombrarlos al enviarlos.

void paramOptionalNombrado(int a, {int param2}){
  print('Imprime el número: ${a}');
  print('Imprime el número: ${param2}');
}

A estos parametros opcionales nombrados les podemos dar un valor por defecto ya que son opcionales cabe la posibilidad de que no sean enviados.

void param(int a, {int b = 2}){
  print('Imprime el número: ${a}');
  print('Imprime el número: ${b}');
}

5. Estructuras de control

Ahora hablemos de las estructuras de control en Dart, si tienes experiencia en la programación estas estructuras de control ya las debes de conocer son el if y switch.

La estructura If la podemos definir de la misma manera que en otros lenguajes de programación.

  var edad = 18;
  if(edad == 18){
    print('adulto');
  }else{
    print('infante');
  }

También podemos crear un If de una linea o también conocida como operación ternaria.

edad == 19 ? 'Correcto' : 'False';

También tenemos un operador especial ??. Usando este operador junto a una variable podemos hacer que dicha variable cambie a un valor específico cuando este llega a ser nulo.

print(name ?? 'Invitado')
// si el name es nulo imprimirá Invitado

Una estructura switch en Dart tiene la siguiente forma.

var option = 2;
switch(option){
  case 1:
    print('Es 1');
    break;
  case 2:
    print('Es 2');
    break;
  default:
    print('No es ninguno');
}

6. Ciclo For

En Dart el ciclo for tiene la siguiente forma.

for(int i = 0; i<=10; i++){
  //Si i es par
  if(i.isEven){
    print(i);
  }
}

Si queremos recorrer una lista definida podemos usar el siguiente código.

List<String> list = ['Rojo','Verde','Rosa'];
for(String color in list){
  print(color);
}

O podemos usar un forEach que recorrerá una lista y podemos pedirle que ejecute una función en cada iteración. Para esto podemos hacer uso de una función anónima o de flecha.

// Usando función flecha
list.forEach((color)=>print(color));

// Usando función anonima
list.forEach((color){
  print(color);
});

7. Ciclo While

En Dart al igual que en la mayoria de lenguajes de programación podemos hacer uso de ciclos while y do while. En ambos casos el ciclo continua hasta que la condición indicada sea falsa.

// while
int i = 0;
while(i<=10){
  print('Valor actual $i');
  i++;
}

// do while
int i = 10;
do{
  print('Valor actual es $i');
  i--;
}while(i>=0);

Fin de este segundo tutorial sobre fundamentos de Dart, como ves Dart es bastante intuitivo asi que te animo a seguir el siguiente tutorial donde aprenderemos más sobre este fabuloso lenguaje de programación.