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
+83-55Lines changed: 83 additions & 55 deletions
Original file line number
Diff line number
Diff line change
@@ -6,76 +6,95 @@ 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
---
10
14
11
-
# Scala básico
15
+
En esta página, cubriremos lo básico 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. Pega `println("Hello, world!")` en el panel izquierdo.
23
+
3. Presiona el botón de "Run". El resultado aparece en el panel de la derecha.
12
24
25
+
Esta es una forma simple y con cero configuración de experimentar con piezas de código en Scala.
26
+
27
+
Many of the code examples in this documentation are also integrated with ScalaFiddle, so you
28
+
can directly experiment with them simply by clicking the Run-button.
29
+
Muchos de los ejemplos de código en esta documentación están integrados también con ScalaFiddle, para que puedas experimentar directamente con ellos simplemente presionando el botón de "Run".
13
30
14
31
## Expresiones
15
32
16
33
En Scala todo es una expresión (cada sentencia "devuelve" un valor).
17
34
18
-
```scala
35
+
```tut
19
36
1 + 1
20
37
```
21
38
22
-
Se puede ver el resultado de evaluar expresiones usando println.
39
+
Se puede ver el resultado de evaluar expresiones usando `println`.
23
40
24
-
```scala
41
+
{% scalafiddle %}
42
+
```tut
25
43
println(1) // 1
26
44
println(1 + 1) // 2
27
45
println("Hello!") // Hello!
28
46
println("Hello," + " world!") // Hello, world!
29
47
```
48
+
{% endscalafiddle %}
30
49
31
50
## Valores
32
51
33
-
Se puede nombrar el resultado de expresiones con la palabra clave *val*.
52
+
Se puede nombrar el resultado de expresiones con la palabra clave `val`.
34
53
35
-
```scala
54
+
```tut
36
55
val x = 1 + 1
37
56
println(x) // 2
38
57
```
39
58
40
-
Los resultados con nombre, como x en el ejemplo, son llamados *valores*. Referenciar un valor no lo vuelve a computar.
59
+
Los resultados con nombre, como `x` en el ejemplo, son llamados valores. Referenciar un valor no lo vuelve a computar.
41
60
42
61
Los valores no pueden ser reasignados.
43
62
44
-
```scala
63
+
```tut:fail
45
64
x = 3 // This does not compile.
46
65
```
47
66
48
-
Los tipos de los valores pueden ser inferidos, pero tambien se pueden anotar explicitamente de la siguiente forma:
67
+
Los tipos de los valores pueden ser inferidos, pero también se pueden anotar explicitamente de la siguiente forma:
49
68
50
-
```scala
69
+
```tut
51
70
val x: Int = 1 + 1
52
71
```
53
72
54
-
Noten como la declaración de tipo Int va después del identificador.
73
+
Noten como la declaración de tipo `Int` va después del identificador`x`. También necesitas un `:`.
55
74
56
75
## Variables
57
76
58
-
Las variables son como los valores, excepto que no es posible re-asignarlos. Las variables se definen con la palabra clave *var*.
77
+
Las variables son como los valores, excepto que no es posible re-asignarlos. Las variables se definen con la palabra clave `var`.
59
78
60
-
```scala
79
+
```tut
61
80
var x = 1 + 1
62
81
x = 3 // This compiles because "x" is declared with the "var" keyword.
63
82
println(x * x) // 9
64
83
```
65
84
66
85
Igual que con los valores, si queremos se puede especificar el tipo:
67
86
68
-
```scala
87
+
```tut
69
88
var x: Int = 1 + 1
70
89
```
71
90
72
91
## Bloques
73
92
74
-
Se pueden combinar expresiones rodeándolas con { y } . A esto le llamamos un *bloque*.
93
+
Se pueden combinar expresiones rodeándolas con `{}` . A esto le llamamos un bloque.
75
94
76
95
El resultado de la ultima expresión del bloque es también el resultado total del bloque.
77
96
78
-
```scala
97
+
```tut
79
98
println({
80
99
val x = 1 + 1
81
100
x + 1
@@ -88,56 +107,64 @@ Las funciones son expresiones que reciben parámetros.
88
107
89
108
Se pueden definir funciones anónimas, por ejemplo, una que retorne x + 1 para x entero:
90
109
91
-
```scala
110
+
```tut
92
111
(x: Int) => x + 1
93
112
```
94
113
95
114
A la izquierda de => esta la lista de parámetros. A la derecha esta el cuerpo de la función
96
115
97
116
También podemos asignarle un nombre a la función.
98
117
99
-
```scala
118
+
{% scalafiddle %}
119
+
```tut
100
120
val addOne = (x: Int) => x + 1
101
121
println(addOne(1)) // 2
102
122
```
123
+
{% endscalafiddle %}
103
124
104
125
Las funciones pueden tomar muchos parámetros.
105
126
106
-
```scala
127
+
{% scalafiddle %}
128
+
```tut
107
129
val add = (x: Int, y: Int) => x + y
108
130
println(add(1, 2)) // 3
109
131
```
132
+
{% endscalafiddle %}
110
133
111
134
O ninguno.
112
135
113
-
```scala
136
+
```tut
114
137
val getTheAnswer = () => 42
115
138
println(getTheAnswer()) // 42
116
139
```
117
140
118
-
119
141
## Métodos
120
142
121
143
Los métodos se parecen y se comportan de forma muy similar a las funciones, pero hay un par de diferencias clave entre ellos.
122
-
Los métodos se definen con la palabra clave *def*, seguida por un nombre, una lista de parámetros, un tipo de retorno (opcional pero recomendado), y el cuerpo del método.
123
144
124
-
```scala
145
+
Los métodos se definen con la palabra clave `def`, seguida por un nombre, una lista de parámetros, un tipo de retorno, y el cuerpo del método.
146
+
147
+
{% scalafiddle %}
148
+
```tut
125
149
def add(x: Int, y: Int): Int = x + y
126
150
println(add(1, 2)) // 3
127
151
```
152
+
{% endscalafiddle %}
128
153
129
-
Notar como el tipo de retorno es declarado después de la lista de parámetros y con dos puntos.
154
+
Notar como el tipo de retorno es declarado _después_ de la lista de parámetros y con dos puntos`: Int`.
130
155
131
156
Los métodos pueden tener mutiles listas de parámetros.
@@ -146,58 +173,58 @@ Hay otras diferencias, pero para simplificar, podemos pensar que son similares a
146
173
147
174
Los métodos también pueden tener expresiones de varias lineas.
148
175
149
-
```scala
176
+
```tut
150
177
def getSquareString(input: Double): String = {
151
178
val square = input * input
152
179
square.toString
153
180
}
154
181
```
155
182
156
183
La ultima expresión en el cuerpo del método es el valor de retorno del mismo.
157
-
(Scala tiene la palabra clave *return* pero no se usa y no hace lo que uds. piensan que hace)
184
+
(Scala tiene la palabra clave `return` pero raramente se usa)
158
185
159
186
## Clases
160
187
161
-
Se puede definir clases con la palabra clave *class* seguida del nombre y los parámetros del constructor.
188
+
Se puede definir clases con la palabra clave `class` seguida del nombre y los parámetros del constructor.
162
189
163
-
```scala
190
+
```tut
164
191
class Greeter(prefix: String, suffix: String) {
165
192
def greet(name: String): Unit =
166
193
println(prefix + name + suffix)
167
194
}
168
195
```
169
196
170
-
El tipo de retorno del método greet es Unit, que dice que no hay nada significativo que retornar. Se usa de forma similar al void de Java y C (con la diferencia de que como toda expresión en Scala debe retornar un valor, existe un valor singleton para el tipo Unit que se escribe `()` y no lleva información )
197
+
El tipo de retorno del método `greet` es `Unit`, que dice que no hay nada significativo que retornar. Se usa de forma similar al `void` de Java y C (Con la diferencia de que como toda expresión en Scala debe retornar un valor, existe un valor singleton para el tipo Unit que se escribe () y no lleva información )
171
198
172
199
Puedes crear una instancia de una clase con la palabra clave *new*.
Mas adelante, cubriremos las clases en profundidad.
206
+
Cubriremos las clases en profundidad[mas adelante](classes.html).
180
207
181
208
## Case Classes
182
209
183
210
Scala tiene un tipo especial de clases llamadas "case" classes. Por defecto, las case classes son inmutables y son comparadas por valor.
184
-
Las case classes se definen usando las palabras clave *case class*.
211
+
Las case classes se definen usando las palabras clave `case class`.
185
212
186
-
```scala
213
+
```tut
187
214
case class Point(x: Int, y: Int)
188
215
```
189
216
190
-
Se pueden instanciar sin necesidad de usar la palabra clave new.
217
+
Se pueden instanciar sin necesidad de usar la palabra clave `new`.
191
218
192
-
```scala
219
+
```tut
193
220
val point = Point(1, 2)
194
221
val anotherPoint = Point(1, 2)
195
222
val yetAnotherPoint = Point(2, 2)
196
223
```
197
224
198
225
Y son comparadas por valor.
199
226
200
-
```scala
227
+
```tut
201
228
if (point == anotherPoint) {
202
229
println(point + " and " + anotherPoint + " are the same.")
203
230
} else {
@@ -211,15 +238,15 @@ if (point == yetAnotherPoint) {
211
238
} // Point(1,2) and Point(2,2) are different.
212
239
```
213
240
214
-
Hay mucho mas sobre las case classes que queremos presentar, y estamos convencidos de que te vas a enamorar de ellas. Las cubriremos en profundidad mas adelante.
241
+
Hay mucho mas sobre las case classes que queremos presentar, y estamos convencidos de que te vas a enamorar de ellas. Las cubriremos en profundidad [mas adelante](case-classes.html).
215
242
216
243
## Objetos
217
244
218
245
Los objetos son instancias de una sola clase de su propia definición. Puedes pensar en ellos como singleton de sus propias clases
219
246
220
-
Puedes definir objectos con la palabra clave *object*.
247
+
Puedes definir objectos con la palabra clave `object`.
221
248
222
-
```scala
249
+
```tut
223
250
object IdFactory {
224
251
private var counter = 0
225
252
def create(): Int = {
@@ -231,39 +258,39 @@ object IdFactory {
231
258
232
259
Para acceder al objeto, lo referencias por su nombre.
233
260
234
-
```scala
261
+
```tut
235
262
val newId: Int = IdFactory.create()
236
263
println(newId) // 1
237
264
val newerId: Int = IdFactory.create()
238
265
println(newerId) // 2
239
266
```
240
267
241
-
Mas adelante, cubriremos los objetos en profundidad.
268
+
Cubriremos los objetos en profundidad[mas adelante](singleton-objects.html).
242
269
243
270
## Traits
244
271
245
272
Los traits son tipos que contienen campos y métodos. Se pueden combinar múltiples traits.
246
273
247
-
Los traits se definen con la palabra clave *trait*.
274
+
Los traits se definen con la palabra clave `trait`.
248
275
249
-
```scala
276
+
```tut
250
277
trait Greeter {
251
278
def greet(name: String): Unit
252
279
}
253
280
```
254
281
255
282
Los traits pueden también tener implementación por defecto.
256
283
257
-
```scala
284
+
{% scalafiddle %}
285
+
```tut
258
286
trait Greeter {
259
287
def greet(name: String): Unit =
260
288
println("Hello, " + name + "!")
261
289
}
262
-
```
263
290
264
-
También puedes extender traits con la palabra clave *extends* y sobrescribir una implementación con la palabra clave *override* .
291
+
También puedes extender traits con la palabra clave `extends` y sobrescribir una implementación con la palabra clave `override` .
265
292
266
-
```scala
293
+
```tut
267
294
class DefaultGreeter extends Greeter
268
295
269
296
class CustomizableGreeter(prefix: String, postfix: String) extends Greeter {
val customGreeter = new CustomizableGreeter("How are you, ", "?")
279
306
customGreeter.greet("Scala developer") // How are you, Scala developer?
280
307
```
308
+
{% endscalafiddle %}
281
309
282
-
Aquí, DefaultGreeter extiende un solo trait, pero puede extender múltiples traits.
310
+
Aquí, `DefaultGreeter` extiende un solo trait, pero puede extender múltiples traits.
283
311
284
-
Mas adelante, cubriremos los traits en profundidad.
312
+
Cubriremos los traits en profundidad[mas adelante](traits.html).
285
313
286
-
## Metodo principal (Main Method)
314
+
## Método principal (Main Method)
287
315
288
-
El metodo principal (main) es el punto de entrada de un programa. La maquina virtual de java (JVM) requiere que el método principal sea llamado `main` y que tome un solo argumento: un arrray de Strings.
316
+
El método principal (main) es el punto de entrada de un programa. La maquina virtual de java (JVM) requiere que el método principal sea llamado `main` y que tome un solo argumento: un arrray de Strings.
289
317
290
318
Usando un objeto, puedes definir el método principal de la siguiente forma:
0 commit comments