mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-05-20 13:20:58 +00:00
more
This commit is contained in:
parent
3b7b38ec34
commit
a2c6510c23
@ -442,101 +442,102 @@ object Perro {
|
|||||||
// A menudo tienen pocos métodos, y los métodos raramente tienen efectos secundarios.
|
// A menudo tienen pocos métodos, y los métodos raramente tienen efectos secundarios.
|
||||||
case class Persona(nombre: String, telefono: String)
|
case class Persona(nombre: String, telefono: String)
|
||||||
|
|
||||||
// Create a new instance. Note cases classes don't need "new"
|
// Para crear instancia nuevas, observa que las case clases no necesitan "new"
|
||||||
val george = Persona("George", "1234")
|
val george = Persona("George", "1234")
|
||||||
val kate = Persona("Kate", "4567")
|
val kate = Persona("Kate", "4567")
|
||||||
|
|
||||||
// With case classes, you get a few perks for free, like getters:
|
// Con las case clases tienes unas pocas ventajas, como el acceso a los campos:
|
||||||
george.phoneNumber // => "1234"
|
george.telefono // => "1234"
|
||||||
|
|
||||||
// Per field equality (no need to override .equals)
|
// Para la igualdad de campos no necesitas sobreescribir el método equals
|
||||||
Person("George", "1234") == Person("Kate", "1236") // => false
|
Persona("George", "1234") == Persona("Kate", "1236") // => false
|
||||||
|
|
||||||
// Easy way to copy
|
// Manera fácil de copiar
|
||||||
// otherGeorge == Person("George", "9876")
|
// otroGeorge == Persona("George", "9876")
|
||||||
val otherGeorge = george.copy(phoneNumber = "9876")
|
val otroGeorge = george.copy(telefono = "9876")
|
||||||
|
|
||||||
// And many others. Case classes also get pattern matching for free, see below.
|
// Y muchas otras. Las case clases también tienen comparación de patrones, que veremos más abajo.
|
||||||
|
|
||||||
// Traits
|
// Traits
|
||||||
// Similar to Java interfaces, traits define an object type and method
|
// De manera similar a las interfaces Java, los traits definen un tipo de objeto y métodos.
|
||||||
// signatures. Scala allows partial implementation of those methods.
|
// Scala permite la implementación parcial de dichos métodos.
|
||||||
// Constructor parameters are not allowed. Traits can inherit from other
|
// No se permiten parámetros de constructor. Los traits pueden heredar de otros traits o
|
||||||
// traits or classes without parameters.
|
// clases sin parámetros.
|
||||||
|
|
||||||
trait Dog {
|
trait Perro {
|
||||||
def breed: String
|
def raza: String
|
||||||
def color: String
|
def color: String
|
||||||
def bark: Boolean = true
|
def ladra: Boolean = true
|
||||||
def bite: Boolean
|
def muerde: Boolean
|
||||||
}
|
}
|
||||||
class SaintBernard extends Dog {
|
class SanBernardo extends Perro {
|
||||||
val breed = "Saint Bernard"
|
val raza = "San Bernardo"
|
||||||
val color = "brown"
|
val color = "marrón"
|
||||||
def bite = false
|
def muerde = false
|
||||||
}
|
}
|
||||||
|
|
||||||
scala> b
|
scala> b
|
||||||
res0: SaintBernard = SaintBernard@3e57cd70
|
res0: SanBernardo = SanBernardo@3e57cd70
|
||||||
scala> b.breed
|
scala> b.raza
|
||||||
res1: String = Saint Bernard
|
res1: String = San Bernardo
|
||||||
scala> b.bark
|
scala> b.ladra
|
||||||
res2: Boolean = true
|
res2: Boolean = true
|
||||||
scala> b.bite
|
scala> b.muerde
|
||||||
res3: Boolean = false
|
res3: Boolean = false
|
||||||
|
|
||||||
// A trait can also be used as Mixin. The class "extends" the first trait,
|
// Un trait tambien puede ser usado mezclado con otros traits.
|
||||||
// but the keyword "with" can add additional traits.
|
// La clase extiende el primer trait, pero la palabra "with"
|
||||||
|
// puede añadir traits adicionales.
|
||||||
|
|
||||||
trait Bark {
|
trait Ladra {
|
||||||
def bark: String = "Woof"
|
def ladra: String = "Guau"
|
||||||
}
|
}
|
||||||
trait Dog {
|
trait Perro {
|
||||||
def breed: String
|
def raza: String
|
||||||
def color: String
|
def color: String
|
||||||
}
|
}
|
||||||
class SaintBernard extends Dog with Bark {
|
class SanBernardo extends Perro with Ladra {
|
||||||
val breed = "Saint Bernard"
|
val raza = "San Bernardo"
|
||||||
val color = "brown"
|
val color = "marrón"
|
||||||
}
|
}
|
||||||
|
|
||||||
scala> val b = new SaintBernard
|
scala> val b = new SanBernardo
|
||||||
b: SaintBernard = SaintBernard@7b69c6ba
|
b: SanBernardo = SanBernardo@7b69c6ba
|
||||||
scala> b.bark
|
scala> b.ladra
|
||||||
res0: String = Woof
|
res0: String = Guau
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
||||||
// 6. Pattern Matching
|
// 6. Comparación de patrones
|
||||||
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
||||||
|
|
||||||
// Pattern matching is a powerful and commonly used feature in Scala. Here's how
|
// La comparación de patrones es una poderosa función de Scala.
|
||||||
// you pattern match a case class. NB: Unlike other languages, Scala cases do
|
// Ahora veremos como comparar patrones en una case clase.
|
||||||
// not need breaks, fall-through does not happen.
|
// Nota: A diferencia de otros lenguajes, Scala "cases" no necesitan
|
||||||
|
// "break", porque no ejecuta los "case" posteriores.
|
||||||
|
|
||||||
def matchPerson(person: Person): String = person match {
|
def comparaPersona(persona: Persona): String = persona match {
|
||||||
// Then you specify the patterns:
|
// Aqui especificas los patrones:
|
||||||
case Person("George", number) => "We found George! His number is " + number
|
case Persona("George", telefono) => "Hemos encontrado a George! Su número es " + telefono
|
||||||
case Person("Kate", number) => "We found Kate! Her number is " + number
|
case Persona("Kate", telefono) => "Hemos encontrado a Kate! Su número es " + telefono
|
||||||
case Person(name, number) => "We matched someone : " + name + ", phone : " + number
|
case Persona(nombre, telefono) => "Hemos encontrado alguien : " + nombre + ", teléfono : " + telefono
|
||||||
}
|
}
|
||||||
|
|
||||||
// Regular expressions are also built in.
|
// Las expresiones regulares también están incorporadas.
|
||||||
// Create a regex with the `r` method on a string:
|
// Creas una expresión regular con el método `r` en una cadena:
|
||||||
val email = "(.*)@(.*)".r
|
val email = "(.*)@(.*)".r
|
||||||
|
|
||||||
// Pattern matching might look familiar to the switch statements in the C family
|
// La comparación de patrones puede parecerse al bloque switch en la familia de lenguajes de C,
|
||||||
// of languages, but this is much more powerful. In Scala, you can match much
|
// pero aquí es mucho más poderosa. En Scala, puedes hacer más comparaciones:
|
||||||
// more:
|
def comparaTodo(obj: Any): String = obj match {
|
||||||
def matchEverything(obj: Any): String = obj match {
|
// Puedes comparar valores:
|
||||||
// You can match values:
|
case "Hola mundo" => "Tengo la cadena Hola mundo"
|
||||||
case "Hello world" => "Got the string Hello world"
|
|
||||||
|
|
||||||
// You can match by type:
|
// Puedes comparar tipos:
|
||||||
case x: Double => "Got a Double: " + x
|
case x: Double => "Tengo un double: " + x
|
||||||
|
|
||||||
// You can specify conditions:
|
// Puedes especificar condiciones:
|
||||||
case x: Int if x > 10000 => "Got a pretty big number!"
|
case x: Int if x > 10000 => "Tengo un número muy grande!"
|
||||||
|
|
||||||
// You can match case classes as before:
|
// You can match case classes as before:
|
||||||
case Person(name, number) => s"Got contact info for $name!"
|
case Person(name, number) => s"Got contact info for $name!"
|
||||||
|
Loading…
Reference in New Issue
Block a user