Et en Scala, comme d'habitude c'est super simple :
case class Numero(value: Int) {
require(value > 0, "Le numéro doit être positif")
}
case class Rue(value: String) {
require(value.length > 0, "La rue ne doit pas être une chaîne vide")
}
case class Ville(value: String) {
require(value.length > 0, "La ville ne doit pas être une chaîne vide")
}
case class Adresse(numero: Numero, rue: Rue, ville: Ville) {
override def toString = numero.value + " " + rue.value + " " + ville.value
}
val adresse_de_jean = Adresse(Numero(44), Rue("de la mairie"), Ville("Paris"))
println("Jean habite au " + adresse_de_jean);
val adresse_de_bob = Adresse(Numero(44), Rue("de la mairie"), Ville("Paris"))
if (adresse_de_bob == adresse_de_jean) {
println("Adresses identiques");
} else {
println("Adresses différentes");
}