Constructores por defecto, por parámetro o nombrados
Clase 18 de 29 • Curso de Dart
Contenido del curso
Clase 18 de 29 • Curso de Dart
Contenido del curso
Claudio Renato Montufar Donis
Usuario anónimo
Facundo Nicolás García Martoni
Alvaro Ruben Hurtado Maldonado
Pablo Domínguez Durán
José Esteban Romero Nitsch
Marcela Cernelli
Marcela Cernelli
Marcela Cernelli
Luis Enrique Rendon Cortez
Fernando Castelan
Carlos Isaac Rosales Castellanos
Fernando Pioli Martínez
Usuario anónimo
Diego Armando Calero Galvis
Elvis Moreira
JuanFe Peralta
Félix Alejandro Zelaya Orellana
WILDER GUTIERREZ QUISPE
Harley Alexander Zapata Hernandez
Marcela Cernelli
Félix Alejandro Zelaya Orellana
Juan Carlos Leal
Diego Forero
Pablo Domínguez Durán
Luis Davaria
No existe la sobrecarga de constructores en Dart entonces
Efectivamente Dart no admite la sobrecarga de constructores pero podemos manejar la situación, utilizando un constructor con parámetros nombrados opcionales:
class Empleado{ var id; var nombre; var trabajo; //constructor con parametros nombrados opcionales Empleado({this.id, this.nombre, this.trabajo}); }
++RESUMEN DE LA CLASE++
Constructores:
Constructor por defecto: ya existe cuando se crea una clase y se define creando un método con el mismo nombre de la clase.
**Sintaxis **
nombreClase(){}
Constructor por parámetro: no puede existir si ya está establecido un constructor por defecto.
Sintaxis
nombreClase(int param1, int param2){ this.param1 = param1; this.param2 = param2; } //Puede resumirse de la siguiente manera nombreClase(this.param1, this.param2);
Constructor nombrado: posee un nombre definido por nosotros. Pueden existir múltiples de ellos.
Sintaxis
nombreClase.constructorNom(this.param1, this.param2);
Nota: La palabra reservada this hace referencia al objeto actual. Por lo tanto, cuando se hace por ejemplo la sentencia this.id = id, debe diferenciarse el primer "id", ya que este es un ++atributo del objeto++, y el segundo un ++parametro del constructor++. Y es mediante ese parametro del constructor que inicializamos el atributo del objeto, no son las mismas variables (aunque se llamen igual).
Siento que C++ y Python tuvieron un hijo perfecto...
Si quieren profundizar en la documentación => https://dart.dev/guides/language/language-tour#using-constructors
No explica muy claro :/
Constructor por defecto
Constructores por parámetros
Constructores por nombre o nombrados
Entonces, no hay sobrecarga para el constructor y tampoco para métodos
En Dart no hay sobrecarga de métodos constructores
Código de la clase comentado:
// Clase sobre Constructores // ? Qué es un constructor // * Son métodos utilizados para inicializar una clase, es decir, // * Son lo primero que se ejecuta cuando instanciamos un objeto. main(List<String> args) { Empleado juan = Empleado(); Gerente jose = Gerente(103, "José"); Guardia roberto = Guardia.trabajo(303, "Roberto", false); } // ! Existen tres tipos de constructores: class Empleado{ var id; var nombre; // ? Constructores por defecto // * Ya existe cuando se crea una clase y se define creando un método // * con el mismo nombre de la clase "nombreClase(){}" Empleado(){ print("Contratamos a un empleado."); } bool cumpleHorario(){ return true; } void trabajar(){ print("$nombre realizó su trabajo..."); } } class Gerente { var id; var nombre; // ? Constructores con parámetros // * Son constructores que reciben parámetros para ya sea inicializar // * sus miembros o para realizar acciones durante la inicializacion // * de otras acciones Gerente(int id, String nombre){ this.id = id; this.nombre = nombre; print("Contratamos a un gerente llamado $nombre y su id es $id"); } // * Otra forma de inicializar parámetros, es: // Gerente(this.id, this.nombre); bool cumpleHorario(){ return true; } void trabajar(){ print("$nombre realizó su trabajo..."); } } class Guardia{ var id; var nombre; var trabajo; // ? Constructores nombrados. // * Tambien podemos definir constructores con un nombre definido por // * nosotros y de estos pueden existir múltiples constructores. Guardia.trabajo(this.id, this.nombre, this.trabajo){ if(trabajo){ print("Contratamos a un guardia de seguridad llamado $nombre y ya hizo su trabajo."); }else{ print("Contratamos a un guardia de seguridad llamado $nombre, pero aun no ha hecho su trabajo."); } } bool cumpleHorario(){ return trabajo; } void trabajar(){ print("$nombre realizó su trabajo..."); } }
**++Mi ejemplo de CONSTRUCTOR NOMBRADO. Creo que no lo usé nunca en FLUTTER. El que usé mucho es el CONSTRUCTOR CON PARÁMETROS por eso no lo practiqué esta vez.
¡Buen aporte!
No conocía la manera de crear un constructor de la forma
Empleados(this.a, this.b);
Genial!
Una breve explicación en texto de lo explicado en esta clase La clase que hemos definido en el ejemplo se llama Empleado
class Empleado { var id; var nombre; bool cumpleHorario() { return true; } void trabajar() { print ('El trabajador con el nombre $nombre trabajó hoy'); } }
Por lo tanto el constructor por defecto tiene el mismo nombre de la clase así:
Empleado() { print ('Hola me ejecuté al inicio'); }
Al instanciar la clase se ejecutará este constructor por defecto, mostrando el mensaje que querramos colocar.
Luego para usar el constructor por defecto de forma correcta lo hacemos así
Empleado(int id, String nombre) { this.id=id; this.nombre=nombre; }
Y para ser instanciado este constructor se lo hace así:
Empleado emp= Empleado(1,"Roberto"); emp.trabajar();
También se puede simplificar el código de la siguiente manera
Empleado(this.id,this.nombre);
Los **constructores nombrados ** funcionan de la siguiente manera
Se coloca otro nombre al constructor un nombre a nuestra elección
Empleado.trabajo(this.id,this.nombre,this.trabajo);
Y luego cambiamos una función para probar su funcionamiento
bool cumpleHorario() { return trabajo; }
y se instancia este constructor así
se lo hace así emp3.cumpleHorario()? print ("Cumplió horario"): print("No cumplió horario");
¿Cúal es la combinación de teclas para comentar un bloque de código? Por favor.
En IntelliJ es "ctrl + /", espero te sirva!
en Visual Studio es crtl+}
Con Dart se puede ahorrar mucho código
Cuando se ejecuta el constructor
Genial! Muchas opciones!
Hola estoy en dartpad y no me aparece el menú para crear el nuevo archivo de empleado.
Hola, el profesor no usa dartpad en el curso, el usa un ide de jetbrains, probablemente webstorm. Dartpad te sirve para correr scripts de código y verificar que funcionen, pero no es para crear un proyecto completo.
Utiliza un IDE IntelliJ de Jetbrains, es sobre el cual está construido Android Studio.
A veces me confundo la sintaxis de Dart cuando estoy haciendo código con C++ y viceversa :D Interesante la clase