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/tour/basics.md
+315Lines changed: 315 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -6,4 +6,319 @@ discourse: false
6
6
7
7
partof: scala-tour
8
8
language: es
9
+
10
+
num: 2
11
+
next-page: unified-types
12
+
previous-page: tour-of-scala
9
13
---
14
+
15
+
En esta página, practicaremos conceptos básicos de Scala.
16
+
17
+
## Probando Scala en el navegador
18
+
19
+
Puedes ejecutar Scala en tu navegador con ScalaFiddle.
20
+
21
+
1. Ve a [https://scalafiddle.io](https://scalafiddle.io).
22
+
2. Escribe `println("Hello, world!")` en el panel a la izquierda.
23
+
3. Presiona el botón "Run". En el panel de la derecha aparecerá el resultado.
24
+
25
+
Así, de manera fácil y sin preparación, puedes probar fragmentos de código Scala.
26
+
27
+
Muchos ejemplos de código en esta documentación están integrados con ScalaFiddle, y así puedes probarlos directamente solo con pulsar el botón "Run".
28
+
29
+
## Expresiones
30
+
31
+
Las expresiones son sentencias computables.
32
+
33
+
```tut
34
+
1 + 1
35
+
```
36
+
37
+
Se puede ver el resultado de evaluar expresiones usando `println`.
38
+
39
+
{% scalafiddle %}
40
+
```tut
41
+
println(1) // 1
42
+
println(1 + 1) // 2
43
+
println("Hello!") // Hello!
44
+
println("Hello," + " world!") // Hello, world!
45
+
```
46
+
{% endscalafiddle %}
47
+
48
+
## Valores
49
+
50
+
Se puede dar un nombre al resultado de una expresión usando la palabra reservada `val`.
51
+
52
+
```tut
53
+
val x = 1 + 1
54
+
println(x) // 2
55
+
```
56
+
57
+
Los resultados con nombre, como `x` en el ejemplo, son llamados valores. Referenciar un valor no lo vuelve a computar.
58
+
59
+
Los valores no pueden ser reasignados.
60
+
61
+
```tut:fail
62
+
x = 3 // This does not compile.
63
+
```
64
+
65
+
Scala es capaz de inferir el tipo de un valor. Aun así, también se puede indicar el tipo usando una anotación:
66
+
67
+
```tut
68
+
val x: Int = 1 + 1
69
+
```
70
+
71
+
Nótese que la anotación del tipo `Int` sigue al identificador `x` de la variable, separado por dos puntos `:`.
72
+
73
+
## Variables
74
+
75
+
Una variable es como un valor, excepto que a una variable se le puede re-asignar un valor después de declararla. Una variable se declara con la palabra reservada `var`.
76
+
77
+
```tut
78
+
var x = 1 + 1
79
+
x = 3 // This compiles because "x" is declared with the "var" keyword.
80
+
println(x * x) // 9
81
+
```
82
+
83
+
Como con los valores, si se quiere se puede especificar el tipo de una variable mutable:
84
+
85
+
```tut
86
+
var x: Int = 1 + 1
87
+
```
88
+
89
+
## Bloques
90
+
91
+
Se pueden combinar expresiones rodeándolas con `{}` . A esto le llamamos un bloque.
92
+
93
+
El resultado de la última expresión del bloque es también el resultado total del bloque.
94
+
95
+
```tut
96
+
println({
97
+
val x = 1 + 1
98
+
x + 1
99
+
}) // 3
100
+
```
101
+
102
+
## Funciones
103
+
104
+
Una función es una expresión que acepta parámetros.
105
+
106
+
Una función se puede declarar anónima, sin nombre. Por ejemplo, ésta es una función que acepta un número entero `x`, y devuelve el resultado de incrementarlo:
107
+
108
+
```tut
109
+
(x: Int) => x + 1
110
+
```
111
+
112
+
La lista de parámetros de la función está a la izquierda de la flecha `=>`, y a su derecha está el cuerpo de la función.
113
+
114
+
También podemos asignarle un nombre a la función.
115
+
116
+
{% scalafiddle %}
117
+
```tut
118
+
val addOne = (x: Int) => x + 1
119
+
println(addOne(1)) // 2
120
+
```
121
+
{% endscalafiddle %}
122
+
123
+
Las funciones pueden tomar varios parámetros.
124
+
125
+
{% scalafiddle %}
126
+
```tut
127
+
val add = (x: Int, y: Int) => x + y
128
+
println(add(1, 2)) // 3
129
+
```
130
+
{% endscalafiddle %}
131
+
132
+
O ninguno.
133
+
134
+
```tut
135
+
val getTheAnswer = () => 42
136
+
println(getTheAnswer()) // 42
137
+
```
138
+
139
+
## Métodos
140
+
141
+
Los métodos se parecen y comportan casi como a las funciones, pero se diferencian en dos aspectos clave:
142
+
143
+
Un método se define con la palabra reservada `def`, seguida por el nombre del método, la lista de parámetros, el tipo de valores que el método devuelve, y el cuerpo del método.
144
+
145
+
{% scalafiddle %}
146
+
```tut
147
+
def add(x: Int, y: Int): Int = x + y
148
+
println(add(1, 2)) // 3
149
+
```
150
+
{% endscalafiddle %}
151
+
152
+
Observe que el tipo de retorno se declara _después_ de la lista de parámetros, y separado con dos puntos, p.ej. `: Int`.
153
+
154
+
Un método puede tener varias listas de parámetros.
Hay otras diferencias, pero para simplificar, podemos pensar que son similares a las funciones.
171
+
172
+
Los métodos también pueden tener expresiones de varias lineas.
173
+
174
+
```tut
175
+
def getSquareString(input: Double): String = {
176
+
val square = input * input
177
+
square.toString
178
+
}
179
+
```
180
+
181
+
La ultima expresión en el cuerpo del método es el valor de retorno del mismo.
182
+
(Scala tiene una palabra reservada `return`, pero se usa raramente y no se aconseja usarla)
183
+
184
+
## Clases
185
+
186
+
Una clase se define con la palabra reservada `class`, seguida del nombre, y la lista de parámetros del constructor.
187
+
188
+
```tut
189
+
class Greeter(prefix: String, suffix: String) {
190
+
def greet(name: String): Unit =
191
+
println(prefix + name + suffix)
192
+
}
193
+
```
194
+
195
+
El método `greet` tiene un tipo de retorno `Unit`, que indica que el método no tiene nada significativo que devolver. Esto es similar al tipo `void` en C, C++, o Java. La diferencia con estos lenguajes es que en Scala toda expresión debe devolver un valor. Por ello, se usa un tipo `Unit` que tiene con un solo valor que se escribe `()` y no lleva información.
196
+
197
+
Se puede crear una instancia de una clase con la palabra reservada *new*.
Las clases se tratan en profundidad [más adelante](classes.html).
205
+
206
+
## Case Classes
207
+
208
+
Hay un tipo especial de clases en Scala, las llamadas "case" classes. Por defecto, las instancias de una case class son inmutables, y se comparan con otras solo por los valores que contienen en cada campo.
209
+
Una case class se define con las palabras reservadas `case class`:
210
+
211
+
```tut
212
+
case class Point(x: Int, y: Int)
213
+
```
214
+
215
+
Se puede crear una instancia de una `case class`, sin usar la palabra reservada `new`.
216
+
217
+
```tut
218
+
val point = Point(1, 2)
219
+
val anotherPoint = Point(1, 2)
220
+
val yetAnotherPoint = Point(2, 2)
221
+
```
222
+
223
+
Y son comparadas por valor.
224
+
225
+
```tut
226
+
if (point == anotherPoint) {
227
+
println(point + " and " + anotherPoint + " are the same.")
228
+
} else {
229
+
println(point + " and " + anotherPoint + " are different.")
230
+
} // Point(1,2) and Point(1,2) are the same.
231
+
232
+
if (point == yetAnotherPoint) {
233
+
println(point + " and " + yetAnotherPoint + " are the same.")
234
+
} else {
235
+
println(point + " and " + yetAnotherPoint + " are different.")
236
+
} // Point(1,2) and Point(2,2) are different.
237
+
```
238
+
239
+
Hay mucho más sobre las case classes que queremos presentar, y estamos convencidos de que te vas a enamorar de ellas. Se tratan con más detalle [mas adelante](case-classes.html).
240
+
241
+
## Objetos
242
+
243
+
Los objetos son instancias de una sola clase de su propia definición. Puedes pensar en ellos como _singleton_ de sus propias clases.
244
+
245
+
Un objeto se define usando la palabra reservada `object`.
246
+
247
+
```tut
248
+
object IdFactory {
249
+
private var counter = 0
250
+
def create(): Int = {
251
+
counter += 1
252
+
counter
253
+
}
254
+
}
255
+
```
256
+
257
+
Para acceder al objeto, lo referencias por su nombre.
258
+
259
+
```tut
260
+
val newId: Int = IdFactory.create()
261
+
println(newId) // 1
262
+
val newerId: Int = IdFactory.create()
263
+
println(newerId) // 2
264
+
```
265
+
266
+
Cubriremos los objetos en profundidad [más adelante](singleton-objects.html).
267
+
268
+
## Traits
269
+
270
+
Los traits son tipos que contienen campos y métodos. Se pueden combinar múltiples traits.
271
+
272
+
Un trait se define usando la palabra reservada `trait`.
273
+
274
+
```tut
275
+
trait Greeter {
276
+
def greet(name: String): Unit
277
+
}
278
+
```
279
+
280
+
Un `trait` también puede definir un método, o un valor, con una implementación por defecto.
281
+
282
+
{% scalafiddle %}
283
+
```tut
284
+
trait Greeter {
285
+
def greet(name: String): Unit =
286
+
println("Hello, " + name + "!")
287
+
}
288
+
```
289
+
290
+
Un `trait` también puede extender otros traits, usando la palabra clave `extends`. Asimismo, en un `trait` se puede redefinir la implementación de un método heredado, usando la palabra reservada `override`.
291
+
292
+
```tut
293
+
class DefaultGreeter extends Greeter
294
+
295
+
class CustomizableGreeter(prefix: String, postfix: String) extends Greeter {
val customGreeter = new CustomizableGreeter("How are you, ", "?")
305
+
customGreeter.greet("Scala developer") // How are you, Scala developer?
306
+
```
307
+
{% endscalafiddle %}
308
+
309
+
Aquí, `DefaultGreeter` extiende un solo trait, pero puede extender múltiples traits.
310
+
311
+
Los `traits` se tratan con detalle [en otra página](traits.html).
312
+
313
+
## Método principal (Main Method)
314
+
315
+
El método principal (main) es el punto donde comienza la ejecución de un programa en Scala. La máquina virtual de java (_Java Virtual Machine_ or JVM) requiere, para ejecutar un código Scala, que éste tenga un método principal llamado `main` cuyo único parámetro sea un arrray de Strings.
316
+
317
+
Usando un objeto, puedes definir el método principal de la siguiente forma:
0 commit comments