Scala no ha solucionado una forma estandarizada de anular los accesores y mutadores predeterminados; sin embargo, los usuarios de este lenguaje de programación usan un método específico y común para anular, que se analiza en detalle a continuación.
Antes de comenzar, ¿qué son los accesorios y los mutadores?
Accessors y Mutators simplemente se pueden decir como métodos get y set respectivamente. Los accesores se utilizan para acceder a los datos mediante el uso de variables o constantes, lo que ayuda a un usuario a recuperar la información, funciona de manera similar a un método ‘Obtener’ en Java y Mutators, lo que significa cambiar, donde las variables se cambian mediante una llamada a la función y se asignan un nuevo valor, funcionan de forma análoga al método ‘Set’ en Java.
Considere el siguiente código Java usando métodos set y get para una clase Employee:
Java
public class Employee { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
Si intenta escribir un código para una clase llamada Empleado con un parámetro de constructor llamado ‘nombre’ e intenta crear métodos de obtención y configuración, de acuerdo con las convenciones de Scala, su código no se compilará.
// error: this won't work class Employee(private var name: String) { def name = name def name_=(aName: String) { name = aName } }
Al compilar este código, se producen los siguientes errores:
Person.scala:3: error: el nombre del método sobrecargado necesita el tipo de resultado
def nombre = nombre
^
Person.scala:4: error: referencia ambigua a la definición sobrecargada,
ambos nombre del método_= en clase Empleado de tipo (aName: String) Unidad
y método nombre_= en clase Empleado de tipo (x$1: String)
Tipos de argumento de coincidencia de unidad (String)
def nombre_=(aNombre: String) { nombre = aNombre }
^
Person.scala:4: error: método nombre_= se define dos veces
def nombre_ =(aName: String) { name = aName }
^
tres errores encontrados
El compilador de Scala se queja de la colisión de nombres entre el campo ‘nombre’ y el método ‘nombre’. Una forma sencilla de resolver este error es agregar un guión bajo a la variable de campo. Esto resuelve la ambigüedad.
Nota: El guión bajo se usa en la posición de prefijo en lugar de la posición de sufijo para evitar el peligro de escribir por error ‘nombre _’ en lugar de ‘nombre_’. Un error al escribir al revés podría conducir potencialmente a un error muy confuso debido al uso intensivo de la inferencia de tipo de Scala.
class Employee(private var _name: String) { def name = _name // accessor def name_=(aName: String) { _name = aName } // mutator }
La forma de llamar a los métodos constructores es la siguiente:
val e = new Employee("Adelicia") e.name = "Alice" // setter println(e.name) // getter
También hay otros enfoques para nombrar métodos getter y setter.
Publicación traducida automáticamente
Artículo escrito por Vijayalakshmi_Bhagat y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA