Skip to content

Commit bf9e769

Browse files
authored
Merge pull request scala#1322 from gclaramunt/patch-1
Update Spanish translation of basics.md
2 parents dc5d9e0 + e70979e commit bf9e769

File tree

1 file changed

+315
-0
lines changed

1 file changed

+315
-0
lines changed

_es/tour/basics.md

Lines changed: 315 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,319 @@ discourse: false
66

77
partof: scala-tour
88
language: es
9+
10+
num: 2
11+
next-page: unified-types
12+
previous-page: tour-of-scala
913
---
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.
155+
156+
{% scalafiddle %}
157+
```tut
158+
def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = (x + y) * multiplier
159+
println(addThenMultiply(1, 2)(3)) // 9
160+
```
161+
{% endscalafiddle %}
162+
163+
O ninguna lista de parámetros.
164+
165+
```tut
166+
def name: String = System.getProperty("user.name")
167+
println("Hello, " + name + "!")
168+
```
169+
170+
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*.
198+
199+
```tut
200+
val greeter = new Greeter("Hello, ", "!")
201+
greeter.greet("Scala developer") // Hello, Scala developer!
202+
```
203+
204+
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 {
296+
override def greet(name: String): Unit = {
297+
println(prefix + name + postfix)
298+
}
299+
}
300+
301+
val greeter = new DefaultGreeter()
302+
greeter.greet("Scala developer") // Hello, Scala developer!
303+
304+
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:
318+
319+
```tut
320+
object Main {
321+
def main(args: Array[String]): Unit =
322+
println("Hello, Scala developer!")
323+
}
324+
```

0 commit comments

Comments
 (0)