Skip to content

Fixes spanish typos and translation errors #443

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 29 commits into from
Aug 24, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
d298a91
Update traits.md
fagossa Jul 28, 2015
d893c59
Update abstract-types.md
fagossa Jul 28, 2015
6a3d94f
Update annotations.md
fagossa Jul 28, 2015
e6f975a
Update anonymous-function-syntax.md
fagossa Jul 28, 2015
f2acb9d
Update automatic-closures.md
fagossa Jul 28, 2015
8337643
Update case-classes.md
fagossa Jul 28, 2015
57fdc1d
Update classes.md
fagossa Jul 28, 2015
783bfae
Update compound-types.md
fagossa Jul 28, 2015
c1a50f7
Update currying.md
fagossa Jul 28, 2015
17080a8
Update default-parameter-values.md
fagossa Jul 28, 2015
578a0c8
Update explicitly-typed-self-references.md
fagossa Jul 28, 2015
d520396
Update extractor-objects.md
fagossa Jul 28, 2015
9f369c3
Update generic-classes.md
fagossa Jul 28, 2015
9ffbf97
Update higher-order-functions.md
fagossa Jul 28, 2015
aabaa94
Update implicit-parameters.md
fagossa Jul 29, 2015
6967393
Create singleton-objects.md
fagossa Jul 29, 2015
d0b7d34
Update singleton-objects.md
fagossa Jul 29, 2015
9a0a648
Update tour-of-scala.md
fagossa Aug 3, 2015
a5e79c5
Update inner-classes.md
fagossa Aug 3, 2015
053eee3
Update mixin-class-composition.md
fagossa Aug 3, 2015
37dd3c3
Update nested-functions.md
fagossa Aug 3, 2015
8776f2d
Update pattern-matching.md
fagossa Aug 3, 2015
f22e7e6
Update polymorphic-methods.md
fagossa Aug 3, 2015
92591b6
Update local-type-inference.md
fagossa Aug 3, 2015
67b3f82
Update unified-types.md
fagossa Aug 3, 2015
e568cf8
Update variances.md
fagossa Aug 3, 2015
8f4fd11
Update views.md
fagossa Aug 3, 2015
642fb4c
Update xml-processing.md
fagossa Aug 3, 2015
a917f14
Update singleton-objects.md
fagossa Aug 3, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion es/tutorials/tour/abstract-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,4 @@ Es necesario notar que generalmente es posible transformar un tipo abstracto en
println("content = " + buf.element)
}

Nótese que es debido usar [variance annotations](variances.html) aquí; de otra manera no sería posible ocultar el tipo implementado por la secuencia concreta del objeto retornado por `newIntSeqBuf`. Además, existen casos en los cuales no es posible remplazar tipos abstractos con tipos parametrizados.
Nótese que es necesario usar [variance annotations](variances.html) aquí; de otra manera no sería posible ocultar el tipo implementado por la secuencia concreta del objeto retornado por `newIntSeqBuf`. Además, existen casos en los cuales no es posible remplazar tipos abstractos con tipos parametrizados.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remplazar must be changed to reemplazar (note the double e)

2 changes: 1 addition & 1 deletion es/tutorials/tour/annotations.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ Y después utilizarlo de la siguiente manera
mail = "support@coders.com")
public class MyClass extends HisClass ...

Una anotación en Scala aparenta como una invocación a un constructor. Para instanciar una anotación de Java es necesario usar los argumentos nombrados:
Una anotación en Scala se asemeja a una invocación a un constructor. Para instanciar una anotación de Java es necesario usar los argumentos nombrados:

@Source(URL = "http://coders.com/",
mail = "support@coders.com")
Expand Down
2 changes: 1 addition & 1 deletion es/tutorials/tour/anonymous-function-syntax.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ o sin parámetros:

() => { System.getProperty("user.dir") }

Esiste también una forma simple para escribir los tipos de las funciones. A continuación se muestran los tipos de las tre funciones escritas anteriormente:
Existe también una forma simple para escribir los tipos de las funciones. A continuación se muestran los tipos de las trés funciones escritas anteriormente:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need for an accent in trés, just tres


Int => Int
(Int, Int) => String
Expand Down
8 changes: 4 additions & 4 deletions es/tutorials/tour/automatic-closures.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ num: 16
language: es
---

Scala permite pasar a un método como parámetro funciones que no reciban parámetros. Cuando un método así es invocado, los parámetros reales de la función enviada sin parámetros no son evaluados y una función "nularia" (de aridad creo, 0-aria, o sin parámetros) es pasada en su llugar la cual encapsula el comportamiento del parámetro correspondiente (comunmente conocido como "llamada por nombre").
Scala permite pasar funciones sin parámetros como parámetros de un método. Cuando un método así es invocado, los parámetros reales de la función enviada sin parámetros no son evaluados y una función "nularia" (de aridad cero, 0-aria, o sin parámetros) es pasada en su lugar. Esta función encapsula el comportamiento del parámetro correspondiente (comunmente conocido como "llamada por nombre").

Para aclarar un poco esto aquí se muestra un ejemplo:

Expand All @@ -26,9 +26,9 @@ Para aclarar un poco esto aquí se muestra un ejemplo:
}
}

La función `whileLoop` recibe dos parámetros `cond` y `body`. Cuando la función es llamada, los parámetros reales no son evaluados en ese momento. Pero cuando los parámetros son utilizados en el cuerpo de la función `whileLoop`, las funciones nularias creadas implicitamente serán evaluadas en su lugar. Así, nuestro método `whileLoop` implementa un bucle tipo Java mediante una implementación recursiva.
La función `whileLoop` recibe dos parámetros `cond` y `body`. Cuando la función es llamada, los parámetros reales no son evaluados en ese momento. Pero cuando los parámetros son utilizados en el cuerpo de la función `whileLoop`, las funciones nularias creadas implícitamente serán evaluadas en su lugar. Así, nuestro método `whileLoop` implementa un bucle tipo Java mediante una implementación recursiva.

Es posible combinar el uso de [operadores de infijo y postfijo (infix/postfix)](operators.html) con este mecanismo para crear declaraciones más complejas (con una sintaxis agrdadable).
Es posible combinar el uso de [operadores de infijo y postfijo (infix/postfix)](operators.html) con este mecanismo para crear declaraciones más complejas (con una sintaxis agradadable).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

agradadable must be changed to agradable


Aquí mostramos la implementación de una declaración tipo repetir-a-menos-que (repetir el bucle a no ser que se cumpla X condición):

Expand All @@ -48,7 +48,7 @@ Aquí mostramos la implementación de una declaración tipo repetir-a-menos-que
} unless (i == 0)
}

La función `loop` solo acepta el cuerpo de un bucle y retorna una instancia de la clase `LoopUnlessCond` (la cual encapsula el cuerpo del objeto). Es importante notar que en este punto el cuerpo del bucle no ha sido evaluado aun. La clase `LoopUnlessCond` tiene un método `unless` el cual puede ser usado como un *operador de infijo (infix)*. De esta manera podemos lograr una sintaxis muy natural para nuestro nuevo bucle `repetir { <estas declaraciones> a_menos_que ( <condición>)`.
La función `loop` solo acepta el cuerpo de un bucle y retorna una instancia de la clase `LoopUnlessCond` (la cual encapsula el cuerpo del objeto). Es importante notar que en este punto el cuerpo del bucle no ha sido evaluado aún. La clase `LoopUnlessCond` tiene un método `unless` el cual puede ser usado como un *operador de infijo (infix)*. De esta manera podemos lograr una sintaxis muy natural para nuestro nuevo bucle `repetir { <estas declaraciones> a_menos_que ( <condición>)`.

A continuación se expone el resultado de la ejecución de `TargetTest2`:

Expand Down
2 changes: 1 addition & 1 deletion es/tutorials/tour/case-classes.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ imprime
Var(x) == Var(x) => true
Var(x) == Var(y) => false

Solo tiene sentido definir una clase Case si el reconocimiento de patrones es usado para descomponer la estructura de los datos de la clase. El siguiente objeto define define una linda función que imprime en pantalla nuestra representación del cálculo lambda:
Solo tiene sentido definir una clase Case si el reconocimiento de patrones es usado para descomponer la estructura de los datos de la clase. El siguiente objeto define define una función de impresión `elegante` (en inglés `pretty`) que imprime en pantalla nuestra representación del cálculo lambda:

object TermTest extends scala.App {
def printTerm(term: Term) {
Expand Down
8 changes: 4 additions & 4 deletions es/tutorials/tour/classes.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ Aquí se presenta una clase la cual define la clase `Point`:
override def toString(): String = "(" + x + ", " + y + ")";
}

Esta clase define dos variables `x` e `y`, y dos métodos: `move` y `toString`. El método `move` recibe dos argumentos de tipo entero, pero no retorna ningún valor (implicitamente se retorna el tipo `Unit`, el cual se corresponde a `void` en lenguajes tipo Java). `toString`, por otro lado, no recibe ningún parámetro pero retorna un valor tipo `String`. Ya que `toString` sobreescribe el método `toString` predefinido en una superclase, tiene que ser anotado con `override`.
Esta clase define dos variables `x` e `y`, y dos métodos: `move` y `toString`. El método `move` recibe dos argumentos de tipo entero, pero no retorna ningún valor (implícitamente se retorna el tipo `Unit`, el cual se corresponde a `void` en lenguajes tipo Java). `toString`, por otro lado, no recibe ningún parámetro pero retorna un valor tipo `String`. Ya que `toString` sobreescribe el método `toString` predefinido en una superclase, tiene que ser anotado con `override`.

Las clases en Scala son parametrizadas con argumentos constructores (inicializadores). En el código anterior se definen dos argumentos contructores, `xc` y `yc`; ambos son visibles en toda la clase. En nuestro ejemplo son utilizzados para inicializar las variables `x` e `y`.
Las clases en Scala son parametrizadas con argumentos constructores (inicializadores). En el código anterior se definen dos argumentos contructores, `xc` y `yc`; ambos son visibles en toda la clase. En nuestro ejemplo son utilizados para inicializar las variables `x` e `y`.

Para instanciar una clase es necesario usar la primitiva new, como se muestra en el siguiente ejemplo:
Para instanciar una clase es necesario usar la primitiva `new`, como se muestra en el siguiente ejemplo:

object Classes {
def main(args: Array[String]) {
Expand All @@ -36,7 +36,7 @@ Para instanciar una clase es necesario usar la primitiva new, como se muestra en
}
}

El programa define una aplicación ejecutable a través del método `main` del objeto singleton Classes. El método `main` crea un nuevo `Point` y lo almacena en `pt`. _Note que valores definidos con la signatura `val` son distintos de los definidos con `var` (véase la clase `Point` arriba) ya que los primeros (`val`) no permiten reasignaciones; es decir, que el valor es una constante._
El programa define una aplicación ejecutable a través del método `main` del objeto singleton `Classes`. El método `main` crea un nuevo `Point` y lo almacena en `pt`. _Note que valores definidos con la signatura `val` son distintos de los definidos con `var` (véase la clase `Point` arriba) ya que los primeros (`val`) no permiten reasignaciones; es decir, que el valor es una constante._

Aquí se muestra la salida del programa:

Expand Down
2 changes: 1 addition & 1 deletion es/tutorials/tour/compound-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Ahora suponga que queremos escribir una función `cloneAndReset` la cual recibe
cloned
}

La pregunta que surge es cuál es el tipo del parámetro `obj`. Si este fuera `Cloneable` entonces el objeto puede ser clonado mediante el método `clone`, pero no puede usarse el método `reset`; Si fuera `Resetable` podríamos resetearlo mediante el método `reset`, pero no sería posible clonarlo. Para evitar casteos (refundiciones) de tipos en situaciones como la descripta, podemos especificar que el tipo del objeto `obj` sea tanto `Clonable` como `Resetable`. En tal caso estaríamos creando un tipo compuesto; de la siguiente manera:
La pregunta que surge es cuál es el tipo del parámetro `obj`. Si este fuera `Cloneable` entonces el objeto puede ser clonado mediante el método `clone`, pero no puede usarse el método `reset`; Si fuera `Resetable` podríamos resetearlo mediante el método `reset`, pero no sería posible clonarlo. Para evitar casteos (refundiciones, en inglés `casting`) de tipos en situaciones como la descrita, podemos especificar que el tipo del objeto `obj` sea tanto `Clonable` como `Resetable`. En tal caso estaríamos creando un tipo compuesto; de la siguiente manera:
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about restablecerlo rather than resetearlo?


def cloneAndReset(obj: Cloneable with Resetable): Cloneable = {
//...
Expand Down
2 changes: 1 addition & 1 deletion es/tutorials/tour/currying.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ language: es

_Nota de traducción: Currying es una técnica de programación funcional nombrada en honor al matemático y lógico Haskell Curry. Es por eso que no se intentará hacer ninguna traducción sobre el término Currying. Entiendase este como una acción, técnica base de PF. Como una nota al paso, el lenguaje de programación Haskell debe su nombre a este eximio matemático._

Métodos pueden definir múltiples listas de parámetros. Cuando un método es invocado con un número menor de listas de parámetros, en su lugar se devolverá una función que toma las listas faltantes como sus argumentos.
Los métodos pueden definir múltiples listas de parámetros. Cuando un método es invocado con un número menor de listas de parámetros, en su lugar se devolverá una función que toma las listas faltantes como sus argumentos.

Aquí se muestra un ejemplo:

Expand Down
8 changes: 4 additions & 4 deletions es/tutorials/tour/default-parameter-values.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ num: 34
language: es
---

Scala tiene la capacidad de de dar a los parámetros valores por defecto que pueden ser usados para permitir a quien invoca el método o función que omita dichos parámetros.
Scala tiene la capacidad de dar a los parámetros valores por defecto que pueden ser usados para permitir a quien invoca el método o función que omita dichos parámetros.

En Java, uno tiende a ver muchos métodos sobrecargados que solamente sirven para proveer valores por defecto para ciertos parámetros de un método largo. En especial se ve este comportamiento en contstructores:
En Java, uno tiende a ver muchos métodos sobrecargados que solamente sirven para proveer valores por defecto para ciertos parámetros de un método largo. En especial se ve este comportamiento en constructores:

public class HashMap<K,V> {
public HashMap(Map<? extends K,? extends V> m);
Expand All @@ -24,9 +24,9 @@ En Java, uno tiende a ver muchos métodos sobrecargados que solamente sirven par
public HashMap(int initialCapacity, float loadFactor);
}

Existen realmente dos constructores aquí; uno que toma otro mapa y uno que toma una capacidad y un factor de carga. El tercer y cuarto constructores están ahí para premitir a los usuarios de la clase <code>HashMap</code> crear instancias con el valor por defecto que probablemente sea el mejor para ambos, el factor de carga y la capacidad.
Existen realmente dos constructores aquí; uno que toma otro mapa y uno que toma una capacidad y un factor de carga. Los constructores tercero y cuarto están ahí para premitir a los usuarios de la clase <code>HashMap</code> crear instancias con el valor por defecto que probablemente sea el mejor para ambos, el factor de carga y la capacidad.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

premitir must be changed to permitir


Más problemático es que los valores usados para ser por defecto están tanto en la documentación (Javadoc) y en el código. Mantener esto actualizado es fácil de olvidar. Un típico patrón utilizado para no cometer estos errores es agregar constantes públicas cuyo valor será mostrado en el Javadoc:
Más problemático es que los valores usados para ser por defecto están tanto en la documentación (Javadoc) como en el código. Mantener ambos actualizado es dificil. Un patrón típico utilizado para no cometer estos errores es agregar constantes públicas cuyo valor será mostrado en el Javadoc:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Mantener ambos actualizado" must be changed to "Mantener ambos actualizados"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dificil must be changed to difícil


public class HashMap<K,V> {
public static final int DEFAULT_CAPACITY = 16;
Expand Down
8 changes: 5 additions & 3 deletions es/tutorials/tour/explicitly-typed-self-references.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ num: 27
language: es
---

Cuando se está construyendo software extensible, algunas veces resulta útil declarar el tipo de la variable `this` explicitamente. Para motivar esto, realizaremos una pequeña representación de una estructura de datos Grafo, en Scala.
Cuando se está construyendo software extensible, algunas veces resulta útil declarar el tipo de la variable `this` explícitamente. Para motivar esto, realizaremos una pequeña representación de una estructura de datos Grafo, en Scala.

Aquí hay una definición que sirve para describir un grafo:

Expand Down Expand Up @@ -52,7 +52,9 @@ Una posible implementación de la clase `Grafo`es dada en el siguiente programa:
}
}

La clase `GrafoDirigido` especializa la clase `Grafo` al proveer una implementación parcial. La implementación es solamente parcial, porque queremos que sea posible extender `GrafoDirigido` aun más. Por lo tanto, esta clase deja todos los detalles de implementación abiertos y así tanto los tipos vértice como nodo son abstractos. De todas maneras, la clase `GrafoDirigido` revela algunos detalles adicionales sobre la implementación del tipo vértice al acotar el límite a la clase `VerticeImpl`. Además, tenemos algunas implementaciones preliminares de vértices y nodos representados por las clases `VerticeImpl` y `NodoImpl`. Ya que es necesario crear nuevos objetos nodo y vértice con nuestra implementación parcial del grafo, también debimos agregar los métodos constructores `nuevoNodo` y `nuevoVertice`. Los métodos `agregarNodo` y `conectarCon` están ambos definidos en términos de estos métodos constructores. Una mirada más cercana a la implementación del método `conectarCon` revela que para crear un vértice es necesario pasar la auto-referencia `this` al método constructor `newEdge`. Pero a `this` en ese contexto le es asignado el tipo `NodoImpl`, por lo tanto no es compatible con el tipo `Nodo` el cual es requerido por el correspondiente método constructor. Como consecuencia, el programa superior no está bien definido y compilador mostrará un mensaje de error.
La clase `GrafoDirigido` especializa la clase `Grafo` al proveer una implementación parcial. La implementación es solamente parcial, porque queremos que sea posible extender `GrafoDirigido` aun más. Por lo tanto, esta clase deja todos los detalles de implementación abiertos y así tanto los tipos vértice como nodo son abstractos. De todas maneras, la clase `GrafoDirigido` revela algunos detalles adicionales sobre la implementación del tipo vértice al acotar el límite a la clase `VerticeImpl`. Además, tenemos algunas implementaciones preliminares de vértices y nodos representados por las clases `VerticeImpl` y `NodoImpl`.

Ya que es necesario crear nuevos objetos nodo y vértice con nuestra implementación parcial del grafo, también debimos agregar los métodos constructores `nuevoNodo` y `nuevoVertice`. Los métodos `agregarNodo` y `conectarCon` están ambos definidos en términos de estos métodos constructores. Una mirada más cercana a la implementación del método `conectarCon` revela que para crear un vértice es necesario pasar la auto-referencia `this` al método constructor `newEdge`. Pero a `this` en ese contexto le es asignado el tipo `NodoImpl`, por lo tanto no es compatible con el tipo `Nodo` el cual es requerido por el correspondiente método constructor. Como consecuencia, el programa superior no está bien definido y compilador mostrará un mensaje de error.

En Scala es posible atar a una clase otro tipo (que será implementado en el futuro) al darle su propia auto-referencia `this` el otro tipo explicitamente. Podemos usar este mecanismo para arreglar nuestro código de arriba. El tipo the `this` explícito es especificado dentro del cuerpo de la clase `GrafoDirigido`.

Expand All @@ -71,7 +73,7 @@ Este es el progama arreglado:
...
}

En esta nueva definición de la clase `NodoImpl`, `this` tiene el tipo `Nodo`. Ya que `Nodo` es abstracta y por lo tanto todavía no sabemos si `NodoImpl` es realmente un subtipo de `Nodo`, el sistema de tipado de Scala no permitirá instanciar esta clase. Pero de todas maneras, estipulamos con esta anotación explicita de tipo que que en algún momento en el tiempo , una subclase de `NodeImpl` tiene que denotar un subtipo del tipo `Nodo` de forma de ser instanciable.
En esta nueva definición de la clase `NodoImpl`, `this` tiene el tipo `Nodo`. Ya que `Nodo` es abstracta y por lo tanto todavía no sabemos si `NodoImpl` es realmente un subtipo de `Nodo`, el sistema de tipado de Scala no permitirá instanciar esta clase. Pero de todas maneras, estipulamos con esta anotación explicita de tipo que en algún momento en el tiempo, una subclase de `NodeImpl` tiene que denotar un subtipo del tipo `Nodo` de forma de ser instanciable.

Aquí presentamos una especialización concreta de `GrafoDirigido` donde todos los miembros abstractos son definidos:

Expand Down
2 changes: 1 addition & 1 deletion es/tutorials/tour/extractor-objects.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ num: 8
language: es
---

En Scala pueden ser definidos patrones independientemente de las clases Caso. Para este fin exite un método llamado `unapply` que proveera el ya dicho extractor. Por ejemplo, en el código siguiente se define el objeto extractor `Twice`
En Scala pueden ser definidos patrones independientemente de las clases Caso (en inglés case classes, desde ahora clases Case). Para este fin exite un método llamado `unapply` que proveera el ya dicho extractor. Por ejemplo, en el código siguiente se define el objeto extractor `Twice`

object Twice {
def apply(x: Int): Int = x * 2
Expand Down
2 changes: 1 addition & 1 deletion es/tutorials/tour/generic-classes.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ num: 9
language: es
---

Tal como en Java 5 ([JDK 1.5](http://java.sun.com/j2se/1.5/)), Scala provee soporte nativo para parametrizar clases con tipos. Eso es llamado clases genéricas y son especialmente importantes para el desarrollo de clases tipo colección.
Tal como en Java 5 ([JDK 1.5](http://java.sun.com/j2se/1.5/)), Scala provee soporte nativo para clases parametrizados con tipos. Eso es llamado clases genéricas y son especialmente importantes para el desarrollo de clases tipo colección.

A continuación se muestra un ejemplo:

Expand Down
Loading