You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _es/tutorials/scala-for-java-programmers.md
+11-10
Original file line number
Diff line number
Diff line change
@@ -1,13 +1,14 @@
1
1
---
2
-
layout: overview
2
+
layout: singlepage-overview
3
3
title: Tutorial de Scala para programadores Java
4
-
overview: scala-for-java-programmers
4
+
5
+
partof: scala-for-java-programmers
5
6
6
7
discourse: true
7
8
language: es
8
9
---
9
10
10
-
Por Michel Schinz y Philipp Haller.
11
+
Por Michel Schinz y Philipp Haller.
11
12
Traducción y arreglos Santiago Basulto.
12
13
13
14
## Introducción
@@ -75,7 +76,7 @@ La declaración `import` en la tercer línea por lo tanto importa todos los miem
75
76
Dentro del método `main` primero creamos una instancia de la clase `Date` la cual por defecto contiene la fecha actual. A continuación definimos un formateador de fechas utilizando el método estático `getDateInstance` que importamos previamente. Finalmente, imprimimos la fecha actual formateada de acuerdo a la instancia de `DateFormat` que fue "localizada". Esta última línea muestra una propiedad interesante de la sintaxis de Scala. Los métodos que toman un solo argumento pueden ser usados con una sintaxis de infijo Es decir, la expresión
76
77
77
78
df format ahora
78
-
79
+
79
80
es solamente otra manera más corta de escribir la expresión:
80
81
81
82
df.format(ahora)
@@ -129,7 +130,7 @@ En el siguiente programa, la función del temporizador se llama `unaVezPorSegund
129
130
unaVezPorSegundo(tiempoVuela)
130
131
}
131
132
}
132
-
133
+
133
134
_Nota: si nunca tuviste experiencias previas con programación funcional te recomiendo que te tomes unos segundos para analizar cuando se utilizan paréntesis y cuando no en los lugares donde aparece *callback*. Por ejemplo, dentro de la declaración de `unaVezPorSegundo` no aparece, ya que se trata de la función como un "valor", a diferencia de cómo aparece dentro del método, ya que en ese caso se la está invocando (por eso los paréntesis)._
134
135
Note that in order to print the string, we used the predefined method
135
136
`println` instead of using the one from `System.out`.
@@ -163,7 +164,7 @@ Como hemos visto anteriormente, Scala es un lenguaje orientado a objetos, y como
163
164
Esta clase compleja toma dos argumentos, que son las partes real e imaginarias de un número complejo. Estos argumentos deben ser pasados cuando se crea una instancia de la clase `Complejo`, de la siguiente manera:
164
165
165
166
new Complejo(1.5, 2.3)
166
-
167
+
167
168
La clase contiene dos métodos llamados `re` e `im`, que proveen acceso a las dos partes del número.
168
169
169
170
Debe notarse que el tipo de retorno de estos dos métodos no está expresado explícitamente. Será inferido automáticamente por el compilador, que primero mira la parte derecha de estos métodos y puede deducir que ambos retornan un valor de tipo `Double`.
@@ -198,7 +199,7 @@ Es posible sobreescribir métodos heredados de una superclase en Scala. Aunque e
198
199
class Complejo(real: Double, imaginaria: Double) {
199
200
def re = real
200
201
def im = imaginaria
201
-
override def toString() =
202
+
override def toString() =
202
203
"" + re + (if (im < 0) "" else "+") + im + "i"
203
204
}
204
205
@@ -224,11 +225,11 @@ El hecho de que las clases `Sum`, `Var` y `Const` sean declaradas como clases ca
224
225
en lugar de `new Const(5)`),
225
226
- se crea automáticamente un "getter" (un método para obtener el valor)
226
227
para los parámetros utilizados en el constructor (por ejemplo es posible
227
-
obtener el valor de `v` de una instancia `c` de la clase `Const` de la
228
+
obtener el valor de `v` de una instancia `c` de la clase `Const` de la
228
229
siguiente manera: `c.v`),
229
230
- se proveen definiciones por defecto de los métodos `equals` y `hashCode`,
230
231
que trabajan sobre la estructura de las instancias y no sobre su identidad,
231
-
- se crea una definición por defecto del método `toString` que
232
+
- se crea una definición por defecto del método `toString` que
232
233
imprime el valor de una forma "tipo código) (ej: la expresión
233
234
del árbol `x+1` se imprimiría `Sum(Var(x),Const(1))`),
234
235
- las instancias de estas clases pueden ser descompuestas
@@ -377,7 +378,7 @@ La última característica de Scala que exploraremos en este tutorial es la de l
377
378
378
379
Los tipos genéricos proveen al programador la habilidad de escribir código parametrizado por tipos. Por ejemplo, escribir una librería para listas enlazadas se enfrenta al problema de decidir qué tipo darle a los elementos de la lista. Ya que esta lista está pensada para ser usada en diferentes contextos, no es posible decidir que el tipo de elementos sea, digamos, `Int`. Esto sería completamente arbitrario y muy restrictivo.
379
380
380
-
Los programadores Java cuentan como último recurso con `Object`, que es el supertipo de todos los objetos. Esta solución de todas maneras está lejos de ser ideal, ya que no funciona con tipos primitivos (`int`, `long`, `float`, etc.) e implica que el programador tenga que realizar muchos casteos de tipos en su programa.
381
+
Los programadores Java cuentan como último recurso con `Object`, que es el supertipo de todos los objetos. Esta solución de todas maneras está lejos de ser ideal, ya que no funciona con tipos primitivos (`int`, `long`, `float`, etc.) e implica que el programador tenga que realizar muchos casteos de tipos en su programa.
381
382
382
383
Scala hace posible definir clases genéricas (y métodos) para resolver este problema. Examinemos esto con un ejemplo del contenedor más simple posible: una referencia, que puede estar tanto vacía como apuntar a un objeto de algún tipo.
0 commit comments