Como hablábamos al comienzo Flutter utiliza el lenguaje de desarrollo Dart. Por eso le haremos un capitulo entero, para que conozcamos algunas características relevantes.
Para crear esta pequeña descripción del lenguaje espero que tengas los conceptos de programación orientada a objetos claros y que tengas experiencia en algún otro lenguaje.
Este apartado esta basado fuertemente de la documentación oficial, por tanto te recomiendo fuertemente profundizar más en este tema leyéndolo de la fuente oficial (enlace). En este capitulo resaltaré los puntos que comenzaremos a utilizar en los siguientes. A lo largo del curso iremos profundizando en más detalles de este lenguaje.
A lo largo de tu aprendizaje en este lenguaje de programación debes tener presente lo siguiente:
La clase base de todo el lenguaje es Object (enlace). Esto quiere decir que desde un número hasta una función extienden de esta clase. Todo aquello que puedas almacenar en una variable es una instancia de Object. Solo hay un grupo al que no se le aplica esta regla y es para aquellos que puedan llegar a ser nulos (o en ingles aquellos llamados nullable).
Dart es un lenguaje fuertemente tipado. Sin embargo, puede inferir el valor de alguna variable, por ejemplo en el siguiente código infiere que la variable edad es tipo int :
var edad = 29; //infiere que es del tipo int
La función de nivel superior de Dart por defecto es main( ).
También puedes crear funciones vinculadas a una clase u objeto (métodos estáticos y de instancia, respectivamente). También puede crear funciones dentro de funciones (funciones anidadas o locales).
De manera similar, Dart admite variables de nivel superior, así como variables vinculadas a una clase u objeto (variables estáticas y de instancia). Las variables de instancia a veces se conocen como campos o propiedades.
Toda aplicación Dart es una librería aunque no veas la directiva library.
Para los desarrolladores Java es muy natural ver palabras clave como las siguientes public, protected y private. Sin embargo en Dart si algún elemento comienza con guión bajo (_) es privado para la librería. Si por ejemplo en una clase creamos una función llamada _getInfo() no será alcanzable fuera de la clase.
Aunque Dart es fuertemente tipado, admite la asignación de objetos genéricos por ejemplo List<Object> sería una lista de cualquier tipo de objetos.
En Dart no existen las interfaces por lo que debemos trabajar con clases abstractas en los escenarios que las necesitemos.
En Dart como vemos en la sección anterior podemos inferir el tipo de nuestras variables. Esto indica que para un uso local hay que tener cuidado con no ser redundantes. Por ejemplo estaría mal el siguiente código:
List<List<Ingredient>> desserts = <List<Ingredient>>[];