Skip to content

Commit ff6a56b

Browse files
authored
Update basics.md
1 parent 1e0fdda commit ff6a56b

File tree

1 file changed

+288
-0
lines changed

1 file changed

+288
-0
lines changed

_es/tour/basics.md

Lines changed: 288 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,291 @@ discourse: false
77
partof: scala-tour
88
language: es
99
---
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+
val x = 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+
val x: 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+
var x = 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+
var x: 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+
val x = 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+
val addOne = (x: Int) => x + 1
101+
println(addOne(1)) // 2
102+
```
103+
104+
Las funciones pueden tomar muchos parámetros.
105+
106+
```scala
107+
val add = (x: Int, y: Int) => x + y
108+
println(add(1, 2)) // 3
109+
```
110+
111+
O ninguno.
112+
113+
```scala
114+
val getTheAnswer = () => 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+
def add(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.
132+
133+
```scala
134+
def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = (x + y) * multiplier
135+
println(addThenMultiply(1, 2)(3)) // 9
136+
```
137+
138+
O ninguna.
139+
140+
```scala
141+
def name: String = System.getProperty("user.name")
142+
println("Hello, " + name + "!")
143+
```
144+
145+
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+
def getSquareString(input: Double): String = {
151+
val square = 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+
class Greeter(prefix: String, suffix: String) {
165+
def greet(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*.
173+
174+
```scala
175+
val greeter = new Greeter("Hello, ", "!")
176+
greeter.greet("Scala developer") // Hello, Scala developer!
177+
```
178+
179+
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+
case class Point(x: Int, y: Int)
188+
```
189+
190+
Se pueden instanciar sin necesidad de usar la palabra clave new.
191+
192+
```scala
193+
val point = Point(1, 2)
194+
val anotherPoint = Point(1, 2)
195+
val yetAnotherPoint = 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+
object IdFactory {
224+
private var counter = 0
225+
def create(): Int = {
226+
counter += 1
227+
counter
228+
}
229+
}
230+
```
231+
232+
Para acceder al objeto, lo referencias por su nombre.
233+
234+
```scala
235+
val newId: Int = IdFactory.create()
236+
println(newId) // 1
237+
val newerId: 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+
trait Greeter {
251+
def greet(name: String): Unit
252+
}
253+
```
254+
255+
Los traits pueden también tener implementación por defecto.
256+
257+
```scala
258+
trait Greeter {
259+
def greet(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* .
265+
266+
```scala
267+
class DefaultGreeter extends Greeter
268+
269+
class CustomizableGreeter(prefix: String, postfix: String) extends Greeter {
270+
override def greet(name: String): Unit = {
271+
println(prefix + name + postfix)
272+
}
273+
}
274+
275+
val greeter = new DefaultGreeter()
276+
greeter.greet("Scala developer") // Hello, Scala developer!
277+
278+
val customGreeter = new CustomizableGreeter("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:
291+
292+
```scala
293+
object Main {
294+
def main(args: Array[String]): Unit =
295+
println("Hello, Scala developer!")
296+
}
297+
```

0 commit comments

Comments
 (0)