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
+288Lines changed: 288 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -7,3 +7,291 @@ discourse: false
7
7
partof: scala-tour
8
8
language: es
9
9
---
10
+
11
+
# Scala básico
12
+
13
+
14
+
## Expresiones
15
+
16
+
En Scala todo es una expresión (cada sentencia "devuelve" un valor).
17
+
18
+
```scala
19
+
1+1
20
+
```
21
+
22
+
Se puede ver el resultado de evaluar expresiones usando println.
23
+
24
+
```scala
25
+
println(1) // 1
26
+
println(1+1) // 2
27
+
println("Hello!") // Hello!
28
+
println("Hello,"+" world!") // Hello, world!
29
+
```
30
+
31
+
## Valores
32
+
33
+
Se puede nombrar el resultado de expresiones con la palabra clave *val*.
34
+
35
+
```scala
36
+
valx=1+1
37
+
println(x) // 2
38
+
```
39
+
40
+
Los resultados con nombre, como x en el ejemplo, son llamados *valores*. Referenciar un valor no lo vuelve a computar.
41
+
42
+
Los valores no pueden ser reasignados.
43
+
44
+
```scala
45
+
x =3// This does not compile.
46
+
```
47
+
48
+
Los tipos de los valores pueden ser inferidos, pero tambien se pueden anotar explicitamente de la siguiente forma:
49
+
50
+
```scala
51
+
valx:Int=1+1
52
+
```
53
+
54
+
Noten como la declaración de tipo Int va después del identificador.
55
+
56
+
## Variables
57
+
58
+
Las variables son como los valores, excepto que no es posible re-asignarlos. Las variables se definen con la palabra clave *var*.
59
+
60
+
```scala
61
+
varx=1+1
62
+
x =3// This compiles because "x" is declared with the "var" keyword.
63
+
println(x * x) // 9
64
+
```
65
+
66
+
Igual que con los valores, si queremos se puede especificar el tipo:
67
+
68
+
```scala
69
+
varx:Int=1+1
70
+
```
71
+
72
+
## Bloques
73
+
74
+
Se pueden combinar expresiones rodeándolas con { y } . A esto le llamamos un *bloque*.
75
+
76
+
El resultado de la ultima expresión del bloque es también el resultado total del bloque.
77
+
78
+
```scala
79
+
println({
80
+
valx=1+1
81
+
x +1
82
+
}) // 3
83
+
```
84
+
85
+
## Funciones
86
+
87
+
Las funciones son expresiones que reciben parámetros.
88
+
89
+
Se pueden definir funciones anónimas, por ejemplo, una que retorne x + 1 para x entero:
90
+
91
+
```scala
92
+
(x: Int) => x +1
93
+
```
94
+
95
+
A la izquierda de => esta la lista de parámetros. A la derecha esta el cuerpo de la función
96
+
97
+
También podemos asignarle un nombre a la función.
98
+
99
+
```scala
100
+
valaddOne= (x: Int) => x +1
101
+
println(addOne(1)) // 2
102
+
```
103
+
104
+
Las funciones pueden tomar muchos parámetros.
105
+
106
+
```scala
107
+
valadd= (x: Int, y: Int) => x + y
108
+
println(add(1, 2)) // 3
109
+
```
110
+
111
+
O ninguno.
112
+
113
+
```scala
114
+
valgetTheAnswer= () =>42
115
+
println(getTheAnswer()) // 42
116
+
```
117
+
118
+
119
+
## Métodos
120
+
121
+
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
+
124
+
```scala
125
+
defadd(x: Int, y: Int):Int= x + y
126
+
println(add(1, 2)) // 3
127
+
```
128
+
129
+
Notar como el tipo de retorno es declarado después de la lista de parámetros y con dos puntos.
130
+
131
+
Los métodos pueden tener mutiles listas de parámetros.
Hay otras diferencias, pero para simplificar, podemos pensar que son similares a las funciones.
146
+
147
+
Los métodos también pueden tener expresiones de varias lineas.
148
+
149
+
```scala
150
+
defgetSquareString(input: Double):String= {
151
+
valsquare= input * input
152
+
square.toString
153
+
}
154
+
```
155
+
156
+
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)
158
+
159
+
## Clases
160
+
161
+
Se puede definir clases con la palabra clave *class* seguida del nombre y los parámetros del constructor.
162
+
163
+
```scala
164
+
classGreeter(prefix: String, suffix: String) {
165
+
defgreet(name: String):Unit=
166
+
println(prefix + name + suffix)
167
+
}
168
+
```
169
+
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 )
171
+
172
+
Puedes crear una instancia de una clase con la palabra clave *new*.
Mas adelante, cubriremos las clases en profundidad.
180
+
181
+
## Case Classes
182
+
183
+
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*.
185
+
186
+
```scala
187
+
caseclassPoint(x: Int, y: Int)
188
+
```
189
+
190
+
Se pueden instanciar sin necesidad de usar la palabra clave new.
191
+
192
+
```scala
193
+
valpoint=Point(1, 2)
194
+
valanotherPoint=Point(1, 2)
195
+
valyetAnotherPoint=Point(2, 2)
196
+
```
197
+
198
+
Y son comparadas por valor.
199
+
200
+
```scala
201
+
if (point == anotherPoint) {
202
+
println(point +" and "+ anotherPoint +" are the same.")
203
+
} else {
204
+
println(point +" and "+ anotherPoint +" are different.")
205
+
} // Point(1,2) and Point(1,2) are the same.
206
+
207
+
if (point == yetAnotherPoint) {
208
+
println(point +" and "+ yetAnotherPoint +" are the same.")
209
+
} else {
210
+
println(point +" and "+ yetAnotherPoint +" are different.")
211
+
} // Point(1,2) and Point(2,2) are different.
212
+
```
213
+
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.
215
+
216
+
## Objetos
217
+
218
+
Los objetos son instancias de una sola clase de su propia definición. Puedes pensar en ellos como singleton de sus propias clases
219
+
220
+
Puedes definir objectos con la palabra clave *object*.
221
+
222
+
```scala
223
+
objectIdFactory {
224
+
privatevarcounter=0
225
+
defcreate():Int= {
226
+
counter +=1
227
+
counter
228
+
}
229
+
}
230
+
```
231
+
232
+
Para acceder al objeto, lo referencias por su nombre.
233
+
234
+
```scala
235
+
valnewId:Int=IdFactory.create()
236
+
println(newId) // 1
237
+
valnewerId:Int=IdFactory.create()
238
+
println(newerId) // 2
239
+
```
240
+
241
+
Mas adelante, cubriremos los objetos en profundidad.
242
+
243
+
## Traits
244
+
245
+
Los traits son tipos que contienen campos y métodos. Se pueden combinar múltiples traits.
246
+
247
+
Los traits se definen con la palabra clave *trait*.
248
+
249
+
```scala
250
+
traitGreeter {
251
+
defgreet(name: String):Unit
252
+
}
253
+
```
254
+
255
+
Los traits pueden también tener implementación por defecto.
256
+
257
+
```scala
258
+
traitGreeter {
259
+
defgreet(name: String):Unit=
260
+
println("Hello, "+ name +"!")
261
+
}
262
+
```
263
+
264
+
También puedes extender traits con la palabra clave *extends* y sobrescribir una implementación con la palabra clave *override* .
valcustomGreeter=newCustomizableGreeter("How are you, ", "?")
279
+
customGreeter.greet("Scala developer") // How are you, Scala developer?
280
+
```
281
+
282
+
Aquí, DefaultGreeter extiende un solo trait, pero puede extender múltiples traits.
283
+
284
+
Mas adelante, cubriremos los traits en profundidad.
285
+
286
+
## Metodo principal (Main Method)
287
+
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.
289
+
290
+
Usando un objeto, puedes definir el método principal de la siguiente forma:
0 commit comments