No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Dart

Curso de Dart

Argel Franco Bejarano de la Cruz

Argel Franco Bejarano de la Cruz

Métodos Getter y Setter y variables privadas

19/29
Recursos

Aportes 33

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

🪁 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.