🪁 En Dart a diferencia de varios lenguajes de programación, las variables simplemente pueden ser públicas ó privadas.
Bienvenida e Introducción
Introducción y Bienvenida
Dart vs. Go vs. JavaScript vs. Kotlin
DartPad y qué editores utlizar
Básicos 1: Variables y Operadores
Variables: Números (int,double), String y booleanos
Colecciones
Diccionarios
Constantes (final y const)
Operadores aritméticos, de asignacion y lógicos
Básicos 2: Funciones y Parámetros
Declaración de funciones y la función Main()
Funciones de sintaxis corta (Arrow) y Anónimas (Lambda)
Parámetros requeridos, opcionales, posicionados, nombrados y por defecto
Básicos 3: Flujos de Control
If-Else y Expresiones Condicionales
Switch y Case
For
While y do-while
Break y Continue
Clases
Definición de clases y miembros
Constructores por defecto, por parámetro o nombrados
Métodos Getter y Setter y variables privadas
Herencia
Clases Abstractas
Interfaces implícitas
Utilizar Flutter en Dart
Iniciar y estructurar un proyecto en Flutter
Contenedores
Creando un botón personalizado con el Widget Container
Modelos de datos y peticiones http
Trabajando datos http y Widget Future Builder
Ejecutando el mismo código en Android y iOS
Conclusiones
Dart en el futuro
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 33
Preguntas 4
🪁 En Dart a diferencia de varios lenguajes de programación, las variables simplemente pueden ser públicas ó privadas.
RESUMEN DE LA CLASE
Getter y Setter: son métodos especiales para la lectura y escritura de los atributos de un objeto. Forman parte del concepto de “encapsulamiento” de la programación orientada a objetos, y permite manipular atributos privados sin acceder directamente a ellos.
Ejemplo:
class Empleado{
String nombre;
double _horas;
void set horasL(double horas) => _horas = horas;
double get horasL => _horas;
}
import 'empleado.dart'
main(){
Empleado emp = Empleado();
emp.horasL = 35;
print("El trabajador hizo ${emp.horasL} días esta semana");
}
Nota: El guión bajo (_) antepuesto a una variable, indica que es de tipo privada. Esto solo funciona si la clase está en un archivo distinto del cual es llamada.
Una breve explicación de lo tratado en esta clase
Los constructores son métodos especiales que proveen acceso de lectura y escritura a las propiedades de un objeto.
Existen dos tipos
Por defecto
Personalizados
Las **variables privadas ** que se definen empiezan con un _
class Empleado
{
String nombre;
double _horas;
}
Al querer intentar acceder a esta variable no se podrá a exepción que la clase está en el mismo archivo
Establecemos los set y getters así:
void set horasLaboradas(double horas )
{
_horas= horas/8;
}
double get horasLaboradas
{
return _horas;
}
Y luego para su instancia sería así:
Empleado emp= Empleado();
emp.horasLaboradas=35;
print ('El trabajador laboró ${emp.horasLaboradas} dias esta semana');
También podemos optimizar el código para que quede así y su funcionamiento será el mismo
void set horasLaboradas (double horas) => _horas=horas/8;
double get horasLaboradas=>_horas;
A diferencia de otros lenguajes, el concepto de encapsulamiento en Dart se hace a nivel biblioteca, en vez de a nivel de clase. Si una variable se declara como privada, es decir, con un underscore, quiere decir que solamente va a ser visible dentro de la biblioteca. Para accederla fuera de ella, se deberám recurrir a métodos como el getter y setter.
Para importar bibliotecas, se antepone la palabra import al nombre de la biblioteca correspondiente.
Para los que utilizamos intellij les comparto shortcuts con el que podrán generar constructores con parámetros y setter y getter.
Alt + Insert
interesante …
pero hace falta que se esfuercen mas en explicar bien claro.
siempre pienso que los docentes de platzi hacen los cursos apurados sin explicar completo como se debe…
Las variable privadas se declaran con un guión bajo(_) antes del nombre.
algo que me di cuenta, es que tu setter y getter personalizado tienen que tener el mismo nombre y accedes a ellos como si fueran atributos comunes y no en forma de funcion
Excelente, es encapsulamiento
Usos de get y set
Comienza a tomar mejor forma el concepto de encapsulamiento para este lenguaje, muy importante, las variables privadas se definen con un _ como prefijo.
ejemplos de variables privadas:
<code>
double _horas;
int _id;
String _grupoSanguineo;
int _numeroTarjeta;
int _pinDeRetiro:
</code>
Por otro lado los métodos Getter y Setter tienen formas concretas y particulares de ser llamada en diferencia a otros lenguajes como Java o C++
<code>
//Setter
void set valorDeTransaccion(int cantidad){
_cant = cantidad;
}
//Getter
int get valorDeTransaccion {
return _cant;
}
</code>
Es muy importante tener en cuenta que el método get comparte el mismo tipo de el valor que va a retornar, si el valor de retorno es Int, el método es Int. y NO lleva los paréntesis para declaración de métodos.
El metodo set es de tipo void
Qué extraño que una variable private pueda ser accedida desde el mismo archivo como si fuera una variable pública. Bueno… A acostumbrarse 😛
¿Qué sentido tiene obtener o dar (obviamente mediante los métodos mencionados) los valores de una variable privada, si lo que se quiere es eso: que esté privada y no pueda ser “tratada”?
Definicion de getter y setter
Crear variables ocultas o privadas
muy buen aporte sobre el uso de los metodos Get/Set.
Esta clase esta rota no me deja cargarla y solo me musetra el servidor C
Que triste, no me carga con ninguno de los servidores
variables por defecto
Condiciones para que una variable se comporte como privada
Diferencia con otros métodos
Si parece mas facil
MUY IMPORTANTE, el encapsulamiento de variables en Dart (publicas o privadas) se puede realizar con la sintaxis "_nombreVariable" El guion bajo indica que es una variable privada.
considero como buena practica en los get y set, que siempre recibiera o retornara un valor determinado, sin operaciones dentro por recursividad.
por si es necesario utilizarlos desde otro punto.
<// Variables privadas
double _horas; // Para hacer variables privadas se debe poner un _ y definiendo el nombre que llevaria.>
Ya no es necesario colocar el void verdad? en el caso del set
set horasLaboradas (double horas)=>_horas =horas /8;```
las llaves en los strings tambien sirven para poner expresiones por dentro
import 'empleado.dart';
main(List<String> args) {
Empleado emp = Empleado();
emp.horasLaboradas=35;
print('El trabajador laboro ${emp.horasLaboradas} Dias esta semana');
}
class Empleado{
String nombre;
double _horas;
/*void set horasLaboradas(double horas){
_horas =horas /8;
}
double get horasLaboradas{
return _horas;
}
*/
void set horasLaboradas(double horas ) => _horas = horas / 8;
double get horasLaboradas => _horas;
}
Codigo de la clase mas el nombre del empleado:
main.dart
//Llamamos al archivo empleado
import 'empleado.dart';
void main() {
//Metodos getter y setter
//Son metodos especiales que proveen acceso de lectura y escritura a las propiedades de un objeto
//Existen dos tipos: Por defecto y personalizados
//Instanciamos un objeto
Empleado emp = Empleado();
emp.nombre = 'Pepe';
//Le pasamos el numero de horas laboradas
emp.horasLaboradas = 35;
//Interpolacion especial por el uso de una variable de la clase empleado
print("El trabajador ${emp.nombre} laboro ${emp.horasLaboradas} dias esta semana");
}
empleado.dart
class Empleado {
//Variable de instancia que por defecto es un getter y un setter, es decir que se puede asignar un valor y tomar ese valor de regreso
String nombre;
//Variable privada
double _horas;
//Metodo tipo void set para calcular los dias laborados por personas
//Unicamente para asignar valor, y no para tomarlo
/* void set horasLaboradas(double horas) {
_horas = horas / 8;
} */
//Metodo get para obtener el total de numero de horas, este metodo utiliza unicamente llaves
//Tomamos el valor de horas laboradas mediante la funcion get del mismo tipo de mi variable que contiene el dato
/* double get horasLaboradas {
return _horas;
} */
//Optimizamos los metodos con fat arrow
//Metodo set
void set horasLaboradas(double horas) => _horas = horas / 8;
//Metodo get
double get horasLaboradas => _horas;
}
Chicos/as, les comparto un pequeño ejercicio de setters y getters dentro de un mismo archivo para las personas que no les quedó muy claro el asunto.
Espero y les sirva!
void main() {
//Creamos una instancia de cuadrado
Cuadrado cuadrado1 = new Cuadrado();
cuadrado1.ladoDelCuadrado = 10;
print(cuadrado1); //Metodo de impresion 1
//print(cuadrado1.result()); //Metodo de impresion 2
//Area
print('El area es: ${cuadrado1.areaDelCuadrado}');
}
//Nueva clase
class Cuadrado {
//Variables de instancia
double _lado;
//Set para establecer informacion
set ladoDelCuadrado(double value) {
//Realizamos una validacion
if (value <= 0) {
throw ("El lado no puede ser menor o igual a cero"); //Lanzamos el error
}
//Asigamos ese valor recibido a mi variable lado
_lado = value;
}
//Metodo de impresion uno
toString() => 'El lado es: $_lado';
//Metodo de impresion dos
//result() => 'El lado es: $_lado';
//Get para calcular el area de cuadrado: l*l para obtener informacion
double get areaDelCuadrado => _lado * _lado;
}
Programacion orientada a objetos
Usé el this porque cuando hacia el setter no me estaba funcionando.
void main() {
Empleado emp = Empleado();
emp._horas = 20;
print("${emp.Horas_Laboradas}");
emp.Horas_laboradaspordia = 34;
print("${emp.Horas_Laboradas}");
}
class Empleado{
var _Id;
var _nombre;
double _horas;
void set Horas_laboradaspordia( double _horas) => this._horas = _horas / 8;
double get Horas_Laboradas => _horas;
No se puede visualizar la clase.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?