No sé a qué llamar mis "setters" en objetos inmutables?Convención de nombres Scala para "setters" en objetos inmutables
para una persona objeto mutable, los emisores funcionan así:
class Person(private var _name: String) {
def name = "Mr " + _name
def name_=(newName: String) {
_name = newName
}
}
val p = new Person("Olle")
println("Hi "+ p.name)
p.name = "Pelle"
println("Hi "+ p.name)
Esto es todo muy bien, pero lo que si la persona es inmutable?
class Person(private val _name: String) {
def name = "Mr " + _name
def whatHereName(newName: String): Person = new Person(newName)
}
val p = new Person("Olle")
println("Hi "+ p.name)
val p2 = p.whatHereName("Pelle")
println("Hi "+ p2.name)
¿Cómo debería llamarse whatHereName
?
EDIT: que necesito para poner cosas en el método "setter", así:
class Person(private val _name: String) {
def name = "Mr " + _name
def whatHereName(newName: String): Person = {
if(name.length > 3)
new Person(newName.capitalize)
else
throw new Exception("Invalid new name")
}
}
El código real es mucho más grande que esto, por lo que una simple llamada al método copy
no lo hará hacer.
EDIT 2:
Ya que hay muchos comentarios sobre mi ejemplo falsa (que es incorrecto) que será mejor que dé la link a la clase real (Avatar
).
Los métodos "setter" no sé cómo llamarlo son updateStrength
, updateWisdom
... pero probablemente va a cambiar eso a withStrength
pronto ..
¿Has echado un vistazo a http://davetron5000.github.com/scala-style/ScalaStyleGuide.pdf 3.4.1 Accessors/Mutators – oluies
+100 @oluies GRACIAS! Este documento será mi biblia a partir de ahora. –
Entonces, se conformó con 'con' :) Se ve bastante bien cuando la actualización del estado del objeto es lo único que sucede aquí. Pero, ¿y si esta acción de 'actualización' tiene un efecto secundario? Digamos que es un objeto ActiveRecord inmutable, y el estado de la base de datos 'muttator' devuelve una nueva instancia inmutable. ¿Tiene "con" un aspecto lógico también en este caso? ¿Qué piensas? – tuxSlayer