Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -1,8 +1,49 @@
---

name: Métodos
name: Objetos
theory: |

JavaScript admite la programación orientada a objetos (POO): de forma muy simplificada, es un enfoque en el que operamos no con datos y funciones, sino con objetos y métodos. No nos detendremos en detalle en este tema en este curso, porque es amplio y requiere cierta preparación. Pero no podemos ignorarlo por completo, porque los objetos aparecen en JavaScript casi de inmediato. Así que lo abordaremos solo en la medida en que lo requieran las tareas actuales.

Hasta ahora trabajábamos con datos y les aplicábamos funciones. En la POO, en lugar de datos tenemos objetos sobre los que se llaman métodos. Por ejemplo, las cadenas en JavaScript son objetos y tienen un método `toUpperCase()` que convierte todas las letras a mayúsculas.

```javascript
const name = 'Robb';
console.log(name.toUpperCase()); // => ROBB
```

A diferencia de las funciones, los métodos se llaman *sobre un objeto*. Primero se escribe el objeto (un valor, una variable o una constante), luego un punto y la llamada al método.

## Propiedades

Además de los métodos, los datos tienen propiedades. Una propiedad es un valor asociado a los datos, al que se accede con un punto después de la variable (o constante). Por ejemplo, las cadenas tienen una longitud: la propiedad `length`:

```javascript
const name = 'Robb';
const len = name.length;
console.log(len); // => 4
```

En muchos lenguajes la longitud de una cadena se calcula con una función especial, pero en JavaScript las propiedades están incorporadas directamente en el lenguaje. Las propiedades están asociadas a los datos de los que se obtienen. Para los tipos de datos primitivos, todas las propiedades están documentadas, como por ejemplo, las [cadenas de texto](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String). Sin embargo, los números no tienen propiedades.

JavaScript permite acceder a propiedades que no existen (por ejemplo, debido a errores de escritura). En este caso, el valor de esas propiedades es `undefined`:

```javascript
const name = 'Robb';
console.log(name.whatIsThat); // => undefined
```

*Pregunta de autoevaluación. ¿Qué imprimirá el código `console.log(name[name.length])` para `name`, definido anteriormente? ¿Por qué es esa la respuesta?*

<details>
<summary>Respuesta</summary>

El código imprimirá `undefined`, porque se está accediendo a un índice que está fuera de los límites de la cadena. En este caso, `name.length` es 4, pero el índice del último carácter en la cadena es 3.

</details>

## Métodos

Además de las propiedades, los datos también tienen métodos, los cuales son funciones que se encuentran dentro de las propiedades. Desde un punto de vista práctico, esto significa que un método funciona y se llama como una función, pero se accede a él como una propiedad, a través de un punto.

```javascript
Expand All @@ -11,7 +52,6 @@ theory: |
console.log(upperName); // => ROBB
```


Los métodos incorporados siempre operan en los datos con los que están asociados. El método `.toUpperCase()` devuelve la misma cadena, pero convierte todos los caracteres a mayúsculas. Por lo general, hay muchos más métodos que propiedades para los datos, por ejemplo, para las cadenas hay [varias docenas](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String). A primera vista, en la documentación se describen de manera un poco extraña: *String.prototype.toLowerCase()*. Esta descripción revela algunos detalles internos de implementación que no son importantes en este momento, y tampoco hemos estudiado toda la base necesaria para hablar sobre los prototipos.

Los números también tienen métodos, como se muestra en [este enlace](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Number):
Expand Down Expand Up @@ -42,8 +82,9 @@ theory: |
En cuanto a los métodos en general, no todo es tan claro. Hay lenguajes en los que no hay métodos y todo funciona bien; hay lenguajes en los que los métodos son la forma principal de trabajar con funciones, pero incluso en estos lenguajes siempre se utilizan funciones normales junto con los métodos. JavaScript es un lenguaje en el que ambos enfoques han prosperado; se utilizan tanto funciones normales como métodos de manera activa. Los pros y los contras de estos enfoques se explican en detalle en los cursos [dedicados a la POO](https://ru.hexlet.io/programs/js-oop).

instructions: |
Convierte la cadena `text` a minúsculas e imprímela en la pantalla.

Convierte la cadena `text` a minúsculas e imprímela en la pantalla. En la teoría se muestra un ejemplo de un método que realiza esta tarea.

tips:
- |
[Método toLowerCase() de la cadena](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase)
[Métodos de cadena](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String#instance_methods)
1 change: 1 addition & 0 deletions modules/38-objects/100-objects/en/EXERCISE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Convert the string `text` to lowercase and print it.
Original file line number Diff line number Diff line change
@@ -1,3 +1,36 @@
JavaScript supports object-oriented programming (OOP) — very simply, an approach where we operate not with data and functions, but with objects and methods. We won't dwell on this in detail in this course, because the topic is large and requires some background. But we can't ignore it completely, because objects appear in JavaScript almost immediately. So we'll touch on it only as much as the current tasks require.

Up to this point we worked with data and applied functions to it. In OOP, instead of data we have objects on which methods are called. For example, strings in JavaScript are objects, and they have a `toUpperCase()` method that converts all letters to uppercase.

```javascript
const name = 'Robb';
console.log(name.toUpperCase()); // => ROBB
```

Unlike functions, methods are called *on an object*. First comes the object (a value, a variable, or a constant), then a dot, then the method call.

## Properties

Besides methods, data also has properties. A property is a value linked with the data, accessed with a dot right after a variable (or a constant). For example, strings have a length — the `length` property:

```javascript
const name = 'Robb';
const len = name.length;
console.log(len); // => 4
```

In many languages, string length is calculated with a special function, but in JavaScript properties are built into the language. Properties are linked with the data they are taken from. For primitive types, e.g. [strings](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String), all property descriptions are in the documentation. However, numbers have no properties at all.

JavaScript allows you to access properties that do not exist (e.g. in the case of typos). In this case their value is `undefined`:

```javascript
const name = 'Robb';
console.log(name.whatIsThat); // => undefined
```

_Self-check. What will `console.log(name[name.length])` print for the variable `name` above? Why is the result like that?_

## Methods

In addition to properties, data has methods - functions within properties. Basically, it means that methods work and are called like functions, but do it like a property using a dot notation.

Expand Down
5 changes: 5 additions & 0 deletions modules/38-objects/100-objects/en/data.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
name: Objects
tips:
- >
[String methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#instance_methods)
1 change: 1 addition & 0 deletions modules/38-objects/100-objects/es/EXERCISE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Convierte la cadena `text` a minúsculas e imprímela en la pantalla. En la teoría se muestra un ejemplo de un método que realiza esta tarea.
Original file line number Diff line number Diff line change
@@ -1,3 +1,43 @@
JavaScript admite la programación orientada a objetos (POO): de forma muy simplificada, es un enfoque en el que operamos no con datos y funciones, sino con objetos y métodos. No nos detendremos en detalle en este tema en este curso, porque es amplio y requiere cierta preparación. Pero no podemos ignorarlo por completo, porque los objetos aparecen en JavaScript casi de inmediato. Así que lo abordaremos solo en la medida en que lo requieran las tareas actuales.

Check notice on line 1 in modules/38-objects/100-objects/es/README.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] modules/38-objects/100-objects/es/README.md#L1

Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’. (EN_A_VS_AN) Suggestions: `an` URL: https://languagetool.org/insights/post/indefinite-articles/ Rule: https://community.languagetool.org/rule/show/EN_A_VS_AN?lang=en-US Category: MISC
Raw output
modules/38-objects/100-objects/es/README.md:1:44: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’. (EN_A_VS_AN)
 Suggestions: `an`
 URL: https://languagetool.org/insights/post/indefinite-articles/ 
 Rule: https://community.languagetool.org/rule/show/EN_A_VS_AN?lang=en-US
 Category: MISC

Hasta ahora trabajábamos con datos y les aplicábamos funciones. En la POO, en lugar de datos tenemos objetos sobre los que se llaman métodos. Por ejemplo, las cadenas en JavaScript son objetos y tienen un método `toUpperCase()` que convierte todas las letras a mayúsculas.

```javascript
const name = 'Robb';
console.log(name.toUpperCase()); // => ROBB
```

A diferencia de las funciones, los métodos se llaman *sobre un objeto*. Primero se escribe el objeto (un valor, una variable o una constante), luego un punto y la llamada al método.

## Propiedades

Además de los métodos, los datos tienen propiedades. Una propiedad es un valor asociado a los datos, al que se accede con un punto después de la variable (o constante). Por ejemplo, las cadenas tienen una longitud: la propiedad `length`:

```javascript
const name = 'Robb';
const len = name.length;
console.log(len); // => 4
```

En muchos lenguajes la longitud de una cadena se calcula con una función especial, pero en JavaScript las propiedades están incorporadas directamente en el lenguaje. Las propiedades están asociadas a los datos de los que se obtienen. Para los tipos de datos primitivos, todas las propiedades están documentadas, como por ejemplo, las [cadenas de texto](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String). Sin embargo, los números no tienen propiedades.

JavaScript permite acceder a propiedades que no existen (por ejemplo, debido a errores de escritura). En este caso, el valor de esas propiedades es `undefined`:

Check notice on line 24 in modules/38-objects/100-objects/es/README.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] modules/38-objects/100-objects/es/README.md#L24

Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’. (EN_A_VS_AN) Suggestions: `an` URL: https://languagetool.org/insights/post/indefinite-articles/ Rule: https://community.languagetool.org/rule/show/EN_A_VS_AN?lang=en-US Category: MISC
Raw output
modules/38-objects/100-objects/es/README.md:24:58: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’. (EN_A_VS_AN)
 Suggestions: `an`
 URL: https://languagetool.org/insights/post/indefinite-articles/ 
 Rule: https://community.languagetool.org/rule/show/EN_A_VS_AN?lang=en-US
 Category: MISC

```javascript
const name = 'Robb';
console.log(name.whatIsThat); // => undefined
```

*Pregunta de autoevaluación. ¿Qué imprimirá el código `console.log(name[name.length])` para `name`, definido anteriormente? ¿Por qué es esa la respuesta?*

<details>
<summary>Respuesta</summary>

El código imprimirá `undefined`, porque se está accediendo a un índice que está fuera de los límites de la cadena. En este caso, `name.length` es 4, pero el índice del último carácter en la cadena es 3.

Check notice on line 36 in modules/38-objects/100-objects/es/README.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] modules/38-objects/100-objects/es/README.md#L36

Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’. (EN_A_VS_AN) Suggestions: `an` URL: https://languagetool.org/insights/post/indefinite-articles/ Rule: https://community.languagetool.org/rule/show/EN_A_VS_AN?lang=en-US Category: MISC
Raw output
modules/38-objects/100-objects/es/README.md:36:33: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’. (EN_A_VS_AN)
 Suggestions: `an`
 URL: https://languagetool.org/insights/post/indefinite-articles/ 
 Rule: https://community.languagetool.org/rule/show/EN_A_VS_AN?lang=en-US
 Category: MISC

</details>

## Métodos

Además de las propiedades, los datos también tienen métodos, los cuales son funciones que se encuentran dentro de las propiedades. Desde un punto de vista práctico, esto significa que un método funciona y se llama como una función, pero se accede a él como una propiedad, a través de un punto.

Expand Down
5 changes: 5 additions & 0 deletions modules/38-objects/100-objects/es/data.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
name: Objetos
tips:
- >
[Métodos de cadena](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String#instance_methods)
1 change: 1 addition & 0 deletions modules/38-objects/100-objects/ru/EXERCISE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Пользователь ввёл текст с включённым caps lock — буквы в разном регистре. Перед сохранением программа приводит текст к нижнему регистру. Приведите строку из переменной `text` к нижнему регистру и выведите на экран. Пример метода, выполняющего эту задачу, приведён в теории.
Loading
Loading