diff --git a/modules/38-properties/100-properties-syntax/Makefile b/modules/38-objects/100-objects/Makefile
similarity index 100%
rename from modules/38-properties/100-properties-syntax/Makefile
rename to modules/38-objects/100-objects/Makefile
diff --git a/modules/38-properties/200-properties-methods/description.es.yml b/modules/38-objects/100-objects/description.es.yml
similarity index 57%
rename from modules/38-properties/200-properties-methods/description.es.yml
rename to modules/38-objects/100-objects/description.es.yml
index cb9ff512..1fcc93ae 100644
--- a/modules/38-properties/200-properties-methods/description.es.yml
+++ b/modules/38-objects/100-objects/description.es.yml
@@ -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?*
+
+
+ Respuesta
+
+ 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.
+
+
+
+ ## 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
@@ -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):
@@ -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)
diff --git a/modules/38-objects/100-objects/en/EXERCISE.md b/modules/38-objects/100-objects/en/EXERCISE.md
new file mode 100644
index 00000000..c9115b1b
--- /dev/null
+++ b/modules/38-objects/100-objects/en/EXERCISE.md
@@ -0,0 +1 @@
+Convert the string `text` to lowercase and print it.
diff --git a/modules/38-properties/200-properties-methods/en/README.md b/modules/38-objects/100-objects/en/README.md
similarity index 60%
rename from modules/38-properties/200-properties-methods/en/README.md
rename to modules/38-objects/100-objects/en/README.md
index ac581964..bb77da5a 100644
--- a/modules/38-properties/200-properties-methods/en/README.md
+++ b/modules/38-objects/100-objects/en/README.md
@@ -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.
diff --git a/modules/38-objects/100-objects/en/data.yml b/modules/38-objects/100-objects/en/data.yml
new file mode 100644
index 00000000..a4c7e7e1
--- /dev/null
+++ b/modules/38-objects/100-objects/en/data.yml
@@ -0,0 +1,5 @@
+---
+name: Objects
+tips:
+ - >
+ [String methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#instance_methods)
diff --git a/modules/38-objects/100-objects/es/EXERCISE.md b/modules/38-objects/100-objects/es/EXERCISE.md
new file mode 100644
index 00000000..9c60efba
--- /dev/null
+++ b/modules/38-objects/100-objects/es/EXERCISE.md
@@ -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.
diff --git a/modules/38-properties/200-properties-methods/es/README.md b/modules/38-objects/100-objects/es/README.md
similarity index 59%
rename from modules/38-properties/200-properties-methods/es/README.md
rename to modules/38-objects/100-objects/es/README.md
index d4665122..32b2e187 100644
--- a/modules/38-properties/200-properties-methods/es/README.md
+++ b/modules/38-objects/100-objects/es/README.md
@@ -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.
+
+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?*
+
+
+Respuesta
+
+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.
+
+
+
+## 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.
diff --git a/modules/38-objects/100-objects/es/data.yml b/modules/38-objects/100-objects/es/data.yml
new file mode 100644
index 00000000..39c820af
--- /dev/null
+++ b/modules/38-objects/100-objects/es/data.yml
@@ -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)
diff --git a/modules/38-properties/200-properties-methods/index.js b/modules/38-objects/100-objects/index.js
similarity index 100%
rename from modules/38-properties/200-properties-methods/index.js
rename to modules/38-objects/100-objects/index.js
diff --git a/modules/38-objects/100-objects/ru/EXERCISE.md b/modules/38-objects/100-objects/ru/EXERCISE.md
new file mode 100644
index 00000000..2276a023
--- /dev/null
+++ b/modules/38-objects/100-objects/ru/EXERCISE.md
@@ -0,0 +1 @@
+Пользователь ввёл текст с включённым caps lock — буквы в разном регистре. Перед сохранением программа приводит текст к нижнему регистру. Приведите строку из переменной `text` к нижнему регистру и выведите на экран. Пример метода, выполняющего эту задачу, приведён в теории.
diff --git a/modules/38-objects/100-objects/ru/README.md b/modules/38-objects/100-objects/ru/README.md
new file mode 100644
index 00000000..bf7c66de
--- /dev/null
+++ b/modules/38-objects/100-objects/ru/README.md
@@ -0,0 +1,119 @@
+JavaScript поддерживает объектно-ориентированное программирование (ООП) — это, очень упрощённо, подход, при котором мы оперируем не данными и функциями, а объектами и методами. Мы не планируем подробно останавливаться на этом в данном курсе, потому что тема объёмная и для понимания требует определённого уровня подготовки. Совсем игнорировать её невозможно, потому что объекты появляются буквально сразу, как только мы начинаем писать код на JavaScript. Поэтому мы коснёмся этой темы, но только на том уровне, на котором это нужно для текущих задач.
+
+До этого момента мы работали с данными и применяли к ним функции. В ООП у нас вместо данных объекты, на которых вызываются методы. Например, строки в JavaScript являются объектами, и у них есть метод `toUpperCase()`, который переводит все буквы в верхний регистр.
+
+```javascript
+const name = 'Robb';
+console.log(name.toUpperCase()); // => ROBB
+```
+
+В отличие от функций, методы вызываются *на объекте*. Сначала записывается объект (значение, переменная или константа), затем, через точку, вызов метода. Несмотря на то что метод `toUpperCase()` не принимает аргументов, он внутри себя знает, на каком объекте вызывается, и у него есть доступ к самому объекту.
+
+## Свойства
+
+Кроме методов, у данных есть свойства. Свойство — это связанное с данными значение, к которому обращаются через точку сразу после переменной или константы. Например, у строк есть длина — свойство `length`:
+
+```javascript
+const name = 'Robb';
+const len = name.length;
+console.log(len); // => 4
+```
+
+Во многих языках длину строки получают через специальную функцию, а в JavaScript свойства встроены прямо в язык. Свойства связаны с данными, у которых они берутся. Для примитивных типов все свойства описаны в документации, как, например, у [строк](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String). При этом у чисел свойств нет.
+
+JavaScript позволяет обращаться к свойствам, которые не существуют (например, при опечатках). В таком случае их значением является `undefined`:
+
+```javascript
+const name = 'Robb';
+console.log(name.whatIsThat); // => undefined
+```
+
+*Вопрос для самопроверки. Что распечатает код `console.log(name[name.length])` для `name`, определённого выше? Почему ответ такой?*
+
+
+Ответ
+
+Код распечатает `undefined`, потому что происходит обращение по индексу, который выходит за границу строки. В этом случае `name.length` — 4, а индекс последнего символа в строке — 3.
+
+
+
+## Методы строк
+
+Методов у данных обычно значительно больше, чем свойств. У строк их несколько десятков, вот некоторые из них.
+
+```javascript
+// Перевод всех букв в верхний регистр
+console.log('hexlet'.toUpperCase()); // => HEXLET
+
+// Перевод всех букв в нижний регистр
+console.log('HeXleT'.toLowerCase()); // => hexlet
+
+// Удаление пробелов в начале и конце строки
+console.log(' hi '.trim()); // => hi
+```
+
+Некоторые методы принимают параметры. Например, у метода `replace()` первый параметр содержит подстроку, которую нужно заменить, а второй — строку-замену.
+
+```javascript
+const text = 'abracadabra';
+
+// Заменяется только первое вхождение
+console.log(text.replace('a', 'o')); // => obracadabra
+console.log(text.replace('abra', '!')); // => !cadabra
+```
+
+Методов в JavaScript действительно много, и их не учат наизусть. Обычно программисты в процессе работы запоминают, какие операции им вообще нужны и как примерно называются такие методы. При возникновении задачи они либо вспоминают подходящий метод, либо быстро находят его в документации.
+
+## Методы есть и у чисел
+
+```javascript
+const temperature = 22.93;
+// Округление до одного знака после запятой
+const roundedTemperature = temperature.toFixed(1);
+// Метод возвращает строку, которая содержит преобразованное число
+console.log(roundedTemperature); // => 22.9
+
+// Напрямую можно вызывать так
+// Скобки нужны обязательно, иначе не заработает
+(22.93).toFixed(1); // 22.9
+```
+
+*Хозяйке на заметку. Технически всё несколько сложнее. Методы есть не у самих чисел, а у данных (объектов) типа Number. Числа, записанные в переменные или константы, автоматически преобразуются к данному типу во время обращения к ним — в это время происходит так называемый boxing.*
+
+## Метод и функция: сравнение
+
+С точки зрения кода методы и функции ведут себя похоже. Они принимают значения и возвращают результат. Отличаются только **синтаксисом** вызова.
+
+```javascript
+// Вызов функции
+Math.min(3, 5);
+
+// Вызов метода
+'hexlet'.toUpperCase();
+```
+
+Функция вызывается снаружи и получает аргументы в скобках. Метод представляет собой операцию, встроенную в само значение. Под капотом значение передаётся внутрь, но это скрыто от нас.
+
+Возникает закономерный вопрос: зачем нужны методы, почему не просто функции? Есть две причины, почему так сложилось:
+
+1. Исторически так получилось. JavaScript разрабатывался слишком быстро, поэтому не всё было продумано хорошо.
+2. Далеко не все функции имеют отношение к конкретному значению. Возьмём для примера `Math.min()` — она находит минимальное среди переданных чисел. Делать её методом конкретного числа, например `(1).min()`, нелогично: она не связана с одним конкретным числом.
+
+С другой стороны, функции, работающие с конкретным значением, для единообразия логично реализовывать как методы. JavaScript — язык, в котором прижились оба подхода: в нём активно используются как обычные функции, так и методы. Подробнее о плюсах и минусах этих подходов рассказывается в курсах, [посвящённых ООП](https://ru.hexlet.io/programs/js-oop).
+
+## Методы возвращают значения
+
+Как и функции, методы **возвращают результат**. Их можно использовать в составе выражений.
+
+```javascript
+const name = 'hexlet';
+console.log(name.toUpperCase() + '!'); // => HEXLET!
+```
+
+Методы строк всегда возвращают новую строку, оставляя исходную без изменений. Это поведение называется иммутабельностью. Мы ещё поговорим об этом в следующем уроке, но пока важно понимать, что строка остаётся прежней, а результат метода является новым значением.
+
+```javascript
+const name = 'hexlet';
+console.log(name.toUpperCase()); // => HEXLET
+console.log(name); // => hexlet
+```
diff --git a/modules/38-objects/100-objects/ru/data.yml b/modules/38-objects/100-objects/ru/data.yml
new file mode 100644
index 00000000..21d713ec
--- /dev/null
+++ b/modules/38-objects/100-objects/ru/data.yml
@@ -0,0 +1,5 @@
+---
+name: Объекты
+tips:
+ - >
+ [Методы строки](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String#instance_methods)
diff --git a/modules/38-properties/200-properties-methods/test.js b/modules/38-objects/100-objects/test.js
similarity index 100%
rename from modules/38-properties/200-properties-methods/test.js
rename to modules/38-objects/100-objects/test.js
diff --git a/modules/38-properties/200-properties-methods/Makefile b/modules/38-objects/200-methods-immutability/Makefile
similarity index 100%
rename from modules/38-properties/200-properties-methods/Makefile
rename to modules/38-objects/200-methods-immutability/Makefile
diff --git a/modules/38-properties/300-properties-immutability/description.es.yml b/modules/38-objects/200-methods-immutability/description.es.yml
similarity index 100%
rename from modules/38-properties/300-properties-immutability/description.es.yml
rename to modules/38-objects/200-methods-immutability/description.es.yml
diff --git a/modules/38-properties/300-properties-immutability/en/EXERCISE.md b/modules/38-objects/200-methods-immutability/en/EXERCISE.md
similarity index 100%
rename from modules/38-properties/300-properties-immutability/en/EXERCISE.md
rename to modules/38-objects/200-methods-immutability/en/EXERCISE.md
diff --git a/modules/38-properties/300-properties-immutability/en/README.md b/modules/38-objects/200-methods-immutability/en/README.md
similarity index 100%
rename from modules/38-properties/300-properties-immutability/en/README.md
rename to modules/38-objects/200-methods-immutability/en/README.md
diff --git a/modules/38-properties/300-properties-immutability/en/data.yml b/modules/38-objects/200-methods-immutability/en/data.yml
similarity index 100%
rename from modules/38-properties/300-properties-immutability/en/data.yml
rename to modules/38-objects/200-methods-immutability/en/data.yml
diff --git a/modules/38-properties/300-properties-immutability/es/EXERCISE.md b/modules/38-objects/200-methods-immutability/es/EXERCISE.md
similarity index 100%
rename from modules/38-properties/300-properties-immutability/es/EXERCISE.md
rename to modules/38-objects/200-methods-immutability/es/EXERCISE.md
diff --git a/modules/38-properties/300-properties-immutability/es/README.md b/modules/38-objects/200-methods-immutability/es/README.md
similarity index 100%
rename from modules/38-properties/300-properties-immutability/es/README.md
rename to modules/38-objects/200-methods-immutability/es/README.md
diff --git a/modules/38-properties/300-properties-immutability/es/data.yml b/modules/38-objects/200-methods-immutability/es/data.yml
similarity index 100%
rename from modules/38-properties/300-properties-immutability/es/data.yml
rename to modules/38-objects/200-methods-immutability/es/data.yml
diff --git a/modules/38-properties/300-properties-immutability/index.js b/modules/38-objects/200-methods-immutability/index.js
similarity index 100%
rename from modules/38-properties/300-properties-immutability/index.js
rename to modules/38-objects/200-methods-immutability/index.js
diff --git a/modules/38-properties/300-properties-immutability/ru/EXERCISE.md b/modules/38-objects/200-methods-immutability/ru/EXERCISE.md
similarity index 100%
rename from modules/38-properties/300-properties-immutability/ru/EXERCISE.md
rename to modules/38-objects/200-methods-immutability/ru/EXERCISE.md
diff --git a/modules/38-properties/300-properties-immutability/ru/README.md b/modules/38-objects/200-methods-immutability/ru/README.md
similarity index 100%
rename from modules/38-properties/300-properties-immutability/ru/README.md
rename to modules/38-objects/200-methods-immutability/ru/README.md
diff --git a/modules/38-properties/300-properties-immutability/ru/data.yml b/modules/38-objects/200-methods-immutability/ru/data.yml
similarity index 100%
rename from modules/38-properties/300-properties-immutability/ru/data.yml
rename to modules/38-objects/200-methods-immutability/ru/data.yml
diff --git a/modules/38-properties/300-properties-immutability/test.js b/modules/38-objects/200-methods-immutability/test.js
similarity index 100%
rename from modules/38-properties/300-properties-immutability/test.js
rename to modules/38-objects/200-methods-immutability/test.js
diff --git a/modules/38-properties/300-properties-immutability/Makefile b/modules/38-objects/500-method-chain/Makefile
similarity index 100%
rename from modules/38-properties/300-properties-immutability/Makefile
rename to modules/38-objects/500-method-chain/Makefile
diff --git a/modules/38-properties/500-properties-chain-of-methods/description.es.yml b/modules/38-objects/500-method-chain/description.es.yml
similarity index 100%
rename from modules/38-properties/500-properties-chain-of-methods/description.es.yml
rename to modules/38-objects/500-method-chain/description.es.yml
diff --git a/modules/38-properties/500-properties-chain-of-methods/en/EXERCISE.md b/modules/38-objects/500-method-chain/en/EXERCISE.md
similarity index 100%
rename from modules/38-properties/500-properties-chain-of-methods/en/EXERCISE.md
rename to modules/38-objects/500-method-chain/en/EXERCISE.md
diff --git a/modules/38-properties/500-properties-chain-of-methods/en/README.md b/modules/38-objects/500-method-chain/en/README.md
similarity index 100%
rename from modules/38-properties/500-properties-chain-of-methods/en/README.md
rename to modules/38-objects/500-method-chain/en/README.md
diff --git a/modules/38-properties/500-properties-chain-of-methods/en/data.yml b/modules/38-objects/500-method-chain/en/data.yml
similarity index 100%
rename from modules/38-properties/500-properties-chain-of-methods/en/data.yml
rename to modules/38-objects/500-method-chain/en/data.yml
diff --git a/modules/38-properties/500-properties-chain-of-methods/es/EXERCISE.md b/modules/38-objects/500-method-chain/es/EXERCISE.md
similarity index 100%
rename from modules/38-properties/500-properties-chain-of-methods/es/EXERCISE.md
rename to modules/38-objects/500-method-chain/es/EXERCISE.md
diff --git a/modules/38-properties/500-properties-chain-of-methods/es/README.md b/modules/38-objects/500-method-chain/es/README.md
similarity index 100%
rename from modules/38-properties/500-properties-chain-of-methods/es/README.md
rename to modules/38-objects/500-method-chain/es/README.md
diff --git a/modules/38-properties/500-properties-chain-of-methods/es/data.yml b/modules/38-objects/500-method-chain/es/data.yml
similarity index 100%
rename from modules/38-properties/500-properties-chain-of-methods/es/data.yml
rename to modules/38-objects/500-method-chain/es/data.yml
diff --git a/modules/38-properties/500-properties-chain-of-methods/index.js b/modules/38-objects/500-method-chain/index.js
similarity index 100%
rename from modules/38-properties/500-properties-chain-of-methods/index.js
rename to modules/38-objects/500-method-chain/index.js
diff --git a/modules/38-properties/500-properties-chain-of-methods/ru/EXERCISE.md b/modules/38-objects/500-method-chain/ru/EXERCISE.md
similarity index 100%
rename from modules/38-properties/500-properties-chain-of-methods/ru/EXERCISE.md
rename to modules/38-objects/500-method-chain/ru/EXERCISE.md
diff --git a/modules/38-properties/500-properties-chain-of-methods/ru/README.md b/modules/38-objects/500-method-chain/ru/README.md
similarity index 100%
rename from modules/38-properties/500-properties-chain-of-methods/ru/README.md
rename to modules/38-objects/500-method-chain/ru/README.md
diff --git a/modules/38-properties/500-properties-chain-of-methods/ru/data.yml b/modules/38-objects/500-method-chain/ru/data.yml
similarity index 100%
rename from modules/38-properties/500-properties-chain-of-methods/ru/data.yml
rename to modules/38-objects/500-method-chain/ru/data.yml
diff --git a/modules/38-properties/500-properties-chain-of-methods/test.js b/modules/38-objects/500-method-chain/test.js
similarity index 100%
rename from modules/38-properties/500-properties-chain-of-methods/test.js
rename to modules/38-objects/500-method-chain/test.js
diff --git a/modules/38-properties/description.en.yml b/modules/38-objects/description.en.yml
similarity index 100%
rename from modules/38-properties/description.en.yml
rename to modules/38-objects/description.en.yml
diff --git a/modules/38-properties/description.es.yml b/modules/38-objects/description.es.yml
similarity index 100%
rename from modules/38-properties/description.es.yml
rename to modules/38-objects/description.es.yml
diff --git a/modules/38-properties/description.ru.yml b/modules/38-objects/description.ru.yml
similarity index 95%
rename from modules/38-properties/description.ru.yml
rename to modules/38-objects/description.ru.yml
index 89d53d78..1dfad900 100644
--- a/modules/38-properties/description.ru.yml
+++ b/modules/38-objects/description.ru.yml
@@ -1,5 +1,5 @@
---
-name: Свойства и Методы
+name: Свойства и методы
description: |
Данные, которыми мы оперируем в своих программах, могут обладать важными свойствами. В JavaScript свойства встроены прямо в язык. Кроме свойств у данных существуют методы — функции, находящиеся внутри свойств. Свойства и методы — такие же выражения, как переменные, константы или вызовы функции, а значит, их можно всячески комбинировать. Глубже эти темы разбираются на отдельных курсах, посвященных объектно-ориентированным возможностям JavaScript. Мы же в этом модуле изучим основы.
diff --git a/modules/38-properties/100-properties-syntax/description.es.yml b/modules/38-properties/100-properties-syntax/description.es.yml
deleted file mode 100644
index 36624b63..00000000
--- a/modules/38-properties/100-properties-syntax/description.es.yml
+++ /dev/null
@@ -1,48 +0,0 @@
----
-
-name: Propiedades
-theory: |
-
- Los datos con los que operamos en nuestros programas pueden tener propiedades importantes, por ejemplo, las cadenas de texto tienen una longitud. Como veremos más adelante, esta propiedad es muy importante para implementar algoritmos relacionados con la manipulación de cadenas (como invertir una cadena). ¿Cómo podemos obtener la longitud de una cadena? En muchos lenguajes de programación, la longitud de una cadena se calcula utilizando una función especial, algo así:
-
- ```javascript
- import { length } from 'hexlet-basics/string';
-
- const name = 'Robb';
- console.log(length(name)); // => 4
- ```
-
- En JavaScript, las propiedades están incorporadas directamente en el lenguaje. Se acceden utilizando un punto después de la variable (o constante):
-
- ```javascript
- const name = 'Robb';
- const len = name.length;
- console.log(len); // => 4
- ```
-
-
- 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?*
-
-
- Respuesta
-
- 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.
-
-
-
-instructions: |
-
- Imprime en la pantalla la longitud de la cadena `text`.
-
-tips:
- - |
- Consulta la documentación de [String.length](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/length). Ten en cuenta que la longitud de una cadena es igual al número de caracteres que contiene. La longitud de una cadena vacía `''` es 0.
diff --git a/modules/38-properties/100-properties-syntax/en/EXERCISE.md b/modules/38-properties/100-properties-syntax/en/EXERCISE.md
deleted file mode 100644
index ff1e453c..00000000
--- a/modules/38-properties/100-properties-syntax/en/EXERCISE.md
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Print the length of a string `text`.
diff --git a/modules/38-properties/100-properties-syntax/en/README.md b/modules/38-properties/100-properties-syntax/en/README.md
deleted file mode 100644
index b315c694..00000000
--- a/modules/38-properties/100-properties-syntax/en/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-
-The data we use in our programs can have important properties, such as strings having length. As you will see later, this property is required to implement string conversion algorithms (e.g., string reversal). So how do you find out the length of a string? In many languages, string length is calculated with a special function, and it looks a bit like this:
-
-```javascript
-import { length } from 'hexlet-basics/string';
-
-const name = 'Robb';
-console.log(length(name)); // => 4
-```
-
-In JavaScript, properties are built into the language. They are written with a dot right after a variable (or a constant):
-
-```javascript
-const name = 'Robb';
-const len = name.length;
-console.log(len); // => 4
-```
-
-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 described in the documentation. However, numbers have no properties at all.
-
-JavaScript allows you to call 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-сheck. What will `console.log(name[name.length])` print for the variable `name` above? Why is the result like that?_
diff --git a/modules/38-properties/100-properties-syntax/en/data.yml b/modules/38-properties/100-properties-syntax/en/data.yml
deleted file mode 100644
index 33df5a00..00000000
--- a/modules/38-properties/100-properties-syntax/en/data.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: Properties
-tips:
- - >
- Read the
- [String.length](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length)
- documentation. Note that the length of a string is equal to the number of
- characters in it. The length of an empty string, `''`, is 0.
diff --git a/modules/38-properties/100-properties-syntax/es/EXERCISE.md b/modules/38-properties/100-properties-syntax/es/EXERCISE.md
deleted file mode 100644
index a3b2c7fd..00000000
--- a/modules/38-properties/100-properties-syntax/es/EXERCISE.md
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Imprime en la pantalla la longitud de la cadena `text`.
diff --git a/modules/38-properties/100-properties-syntax/es/README.md b/modules/38-properties/100-properties-syntax/es/README.md
deleted file mode 100644
index 9dc4a3f2..00000000
--- a/modules/38-properties/100-properties-syntax/es/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-
-Los datos con los que operamos en nuestros programas pueden tener propiedades importantes, por ejemplo, las cadenas de texto tienen una longitud. Como veremos más adelante, esta propiedad es muy importante para implementar algoritmos relacionados con la manipulación de cadenas (como invertir una cadena). ¿Cómo podemos obtener la longitud de una cadena? En muchos lenguajes de programación, la longitud de una cadena se calcula utilizando una función especial, algo así:
-
-```javascript
-import { length } from 'hexlet-basics/string';
-
-const name = 'Robb';
-console.log(length(name)); // => 4
-```
-
-En JavaScript, las propiedades están incorporadas directamente en el lenguaje. Se acceden utilizando un punto después de la variable (o constante):
-
-```javascript
-const name = 'Robb';
-const len = name.length;
-console.log(len); // => 4
-```
-
-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?*
-
-
-Respuesta
-
-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.
-
-
diff --git a/modules/38-properties/100-properties-syntax/es/data.yml b/modules/38-properties/100-properties-syntax/es/data.yml
deleted file mode 100644
index 1c201568..00000000
--- a/modules/38-properties/100-properties-syntax/es/data.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: Propiedades
-tips:
- - >
- Consulta la documentación de
- [String.length](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/length).
- Ten en cuenta que la longitud de una cadena es igual al número de caracteres
- que contiene. La longitud de una cadena vacía `''` es 0.
diff --git a/modules/38-properties/100-properties-syntax/index.js b/modules/38-properties/100-properties-syntax/index.js
deleted file mode 100644
index b962a3fe..00000000
--- a/modules/38-properties/100-properties-syntax/index.js
+++ /dev/null
@@ -1,6 +0,0 @@
-const text =
- 'a mind needs books as a sword needs a whetstone, if it is to keep its edge.';
-
-// BEGIN
-console.log(text.length);
-// END
diff --git a/modules/38-properties/100-properties-syntax/ru/EXERCISE.md b/modules/38-properties/100-properties-syntax/ru/EXERCISE.md
deleted file mode 100644
index 85dabdd1..00000000
--- a/modules/38-properties/100-properties-syntax/ru/EXERCISE.md
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Напечатайте на экран длину строки `text`.
diff --git a/modules/38-properties/100-properties-syntax/ru/README.md b/modules/38-properties/100-properties-syntax/ru/README.md
deleted file mode 100644
index a8bf6e8e..00000000
--- a/modules/38-properties/100-properties-syntax/ru/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-
-Данные, которыми мы оперируем в своих программах, могут обладать важными свойствами — например, у строк есть длина. Как вы увидите далее, это свойство очень важно для реализации алгоритмов, связанных с преобразованием строки (как пример — переворот строки). Как узнать длину строки? Во многих языках длина строки вычисляется с помощью специальной функции и выглядит это примерно так:
-
-```javascript
-import { length } from 'hexlet-basics/string';
-
-const name = 'Robb';
-console.log(length(name)); // => 4
-```
-
-В JavaScript свойства встроены прямо в язык. Они указываются через точку сразу после переменной (или константы):
-
-```javascript
-const name = 'Robb';
-const len = name.length;
-console.log(len); // => 4
-```
-
-Свойства связаны с данными, у которых они берутся. Для примитивных типов все свойства описаны в документации, как например, у [строк](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String). При этом у чисел вообще нет свойств.
-
-JavaScript позволяет обращаться к свойствам, которые не существуют (например, при опечатках). В таком случае их значением является `undefined`:
-
-```javascript
-const name = 'Robb';
-console.log(name.whatIsThat); // => undefined
-```
-
-*Вопрос для самопроверки. Что распечатает код `console.log(name[name.length])` для `name`, определенного выше? Почему ответ такой?*
-
-
-Ответ
-
-Код распечатает `undefined`, потому что происходит обращение по индексу, который выходит за границу строки. В этом случае `name.length` — 4, а индекс последнего символа в строке — 3.
-
-
diff --git a/modules/38-properties/100-properties-syntax/ru/data.yml b/modules/38-properties/100-properties-syntax/ru/data.yml
deleted file mode 100644
index 7e94ef16..00000000
--- a/modules/38-properties/100-properties-syntax/ru/data.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: Свойства
-tips:
- - >
- Ознакомьтесь с документацией
- [String.length](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/length).
- Обратите внимание, что длина строки равна количеству символов в ней. Длина
- пустой строки `''` равна 0.
diff --git a/modules/38-properties/100-properties-syntax/test.js b/modules/38-properties/100-properties-syntax/test.js
deleted file mode 100644
index df9758b1..00000000
--- a/modules/38-properties/100-properties-syntax/test.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// @ts-check
-
-import { expect, test, vi } from 'vitest';
-
-test('hello world', async () => {
- const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
- await import('./index.js');
-
- const firstArg = consoleLogSpy.mock.calls.join('\n');
-
- expect(firstArg).toBe('75');
-});
diff --git a/modules/38-properties/200-properties-methods/en/EXERCISE.md b/modules/38-properties/200-properties-methods/en/EXERCISE.md
deleted file mode 100644
index e431441d..00000000
--- a/modules/38-properties/200-properties-methods/en/EXERCISE.md
+++ /dev/null
@@ -1 +0,0 @@
-Convert the string text to lowercase and print it.
diff --git a/modules/38-properties/200-properties-methods/en/data.yml b/modules/38-properties/200-properties-methods/en/data.yml
deleted file mode 100644
index 388373b9..00000000
--- a/modules/38-properties/200-properties-methods/en/data.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-name: Methods
-tips:
- - >
- [String.prototype.toLowerCase()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase)
diff --git a/modules/38-properties/200-properties-methods/es/EXERCISE.md b/modules/38-properties/200-properties-methods/es/EXERCISE.md
deleted file mode 100644
index a0c04f82..00000000
--- a/modules/38-properties/200-properties-methods/es/EXERCISE.md
+++ /dev/null
@@ -1 +0,0 @@
-Convierte la cadena `text` a minúsculas e imprímela en la pantalla.
diff --git a/modules/38-properties/200-properties-methods/es/data.yml b/modules/38-properties/200-properties-methods/es/data.yml
deleted file mode 100644
index 83ee1948..00000000
--- a/modules/38-properties/200-properties-methods/es/data.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-name: Métodos
-tips:
- - >
- [Método toLowerCase() de la
- cadena](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase)
diff --git a/modules/38-properties/200-properties-methods/ru/EXERCISE.md b/modules/38-properties/200-properties-methods/ru/EXERCISE.md
deleted file mode 100644
index 897869e7..00000000
--- a/modules/38-properties/200-properties-methods/ru/EXERCISE.md
+++ /dev/null
@@ -1 +0,0 @@
-Приведите строку `text` к нижнему регистру и напечатайте её на экран.
diff --git a/modules/38-properties/200-properties-methods/ru/README.md b/modules/38-properties/200-properties-methods/ru/README.md
deleted file mode 100644
index 66c81485..00000000
--- a/modules/38-properties/200-properties-methods/ru/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-
-Кроме свойств, у данных существуют методы — функции, находящиеся внутри свойств. С практической точки зрения это значит, что метод работает и вызывается как функция, но делает это как свойство, через точку.
-
-```javascript
-const name = 'Robb';
-const upperName = name.toUpperCase();
-console.log(upperName); // => ROBB
-```
-
-Встроенные методы всегда оперируют теми данными, с которыми они связаны. Метод `.toUpperCase()` возвращает ту же строку, но преобразуя все символы в верхний регистр. Методов у данных обычно значительно больше, чем свойств, например, для строк их [несколько десятков](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String). В документации, на первый взгляд, они описаны немного странно: *String.prototype.toLowerCase()*. Это описание раскрывает некоторые внутренние детали реализации, которые сейчас не важны, да и мы не изучили всей необходимой базы для разговора о прототипах.
-
-Методы есть и у [чисел](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Number):
-
-```javascript
-const temperature = 22.93;
-// Округление до одного знака после запятой
-const roundedTemperature = temperature.toFixed(1);
-// Метод возвращает строку, которая содержит преобразованное число
-console.log(roundedTemperature); // => 22.9
-
-// Напрямую можно вызывать так
-// Скобки нужны обязательно, иначе не заработает
-(22.93).toFixed(1); // 22.9
-```
-
-*Хозяйке на заметку. Технически всё несколько сложнее. Методы есть не у самих чисел, а у данных (объектов) типа Number. Числа, записанные в переменные или константы, автоматически преобразуются к данному типу во время обращения к ним, в это время происходит так называемый boxing.*
-
-Возникает закономерный вопрос: зачем нужны методы, почему не просто функции? С числами ситуация ещё сложнее. Часть операций реализована в виде методов самих чисел, например, `.toFixed()`, а ещё большая часть — в виде методов, доступных через `Math`.
-
-Есть две причины почему так сделано:
-
-1. Исторически так сложилось. JavaScript разрабатывался слишком быстро и поэтому не все было продумано хорошо
-2. Далеко не все функции имеют отношение к конкретному значению. Возьмем для примера `Math.min()`. Эта функция находит минимальное число среди всех, которые ему были переданы. Эту функцию нелогично делать методом конкретного числа, например, так — `(1).min()`. Она не имеет никакой связи с конкретным числом
-
-С другой стороны, функции, работающие с конкретным числом, для единообразия должны быть реализованы как методы. К таким функциям относится получение модуля числа. То есть вместо такого вызова `Math.abs(-10)`, логично иметь такой: `(-10).abs()`.
-
-Что касается методов в целом, то не все так однозначно. Есть языки, в которых методов нет и там всё прекрасно, есть языки, где методы — это основной способ работы с функциями, но даже в этих языках всегда, наряду с методами, используются обычные функции. JavaScript — язык, в котором прижились оба подхода, в нём активно используются как обычные функции, так и методы. О плюсах и минусах подобных подходов подробно рассказывается в курсах [посвященных ООП](https://ru.hexlet.io/programs/js-oop).
diff --git a/modules/38-properties/200-properties-methods/ru/data.yml b/modules/38-properties/200-properties-methods/ru/data.yml
deleted file mode 100644
index be8ecae2..00000000
--- a/modules/38-properties/200-properties-methods/ru/data.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-name: Методы
-tips:
- - >
- [Метод строки
- toLowerCase()](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase)
diff --git a/modules/38-properties/400-properties-expressions/Makefile b/modules/38-properties/400-properties-expressions/Makefile
deleted file mode 100644
index d0d0a48c..00000000
--- a/modules/38-properties/400-properties-expressions/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-test:
- @ test.sh
diff --git a/modules/38-properties/400-properties-expressions/description.es.yml b/modules/38-properties/400-properties-expressions/description.es.yml
deleted file mode 100644
index 28cefa19..00000000
--- a/modules/38-properties/400-properties-expressions/description.es.yml
+++ /dev/null
@@ -1,45 +0,0 @@
----
-
-name: Propiedades y métodos como expresiones
-theory: |
-
- Las propiedades y métodos son expresiones al igual que las variables, constantes o llamadas a funciones, por lo tanto, se pueden combinar de diversas formas.
-
- Uso en operaciones:
-
- ```javascript
- const name = 'Shaya';
- name.length + 5; // 10
- `Hello, ${name.toUpperCase()}!`; // Hello, SHAYA!
- ```
-
- Uso en parámetros de funciones:
-
- ```javascript
- const name1 = 'Robb';
- const name2 = 'Shaya';
- console.log(name2.length); // => 5
- console.log(name2.toLowerCase()); // => shaya
- console.log(Math.min(name1.length, name2.length)); // => 4
- ```
-
-
-instructions: |
-
- Muestra en la pantalla la primera y última letra de la oración almacenada en la constante `text`, en el siguiente formato:
-
- ```text
- First: N
- Last: t
- ```
-
- Tu tarea es extraer estos caracteres de la cadena y colocarlos dentro de `console.log()`, sin utilizar variables intermedias.
-
-tips:
- - |
- [un poco sobre el método .trim()](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)
-
-definitions:
- - name: Método
- description: |
- es una función o procedimiento que pertenece a una clase u objeto.
diff --git a/modules/38-properties/400-properties-expressions/en/EXERCISE.md b/modules/38-properties/400-properties-expressions/en/EXERCISE.md
deleted file mode 100644
index 8b27e441..00000000
--- a/modules/38-properties/400-properties-expressions/en/EXERCISE.md
+++ /dev/null
@@ -1,9 +0,0 @@
-
-Print the first and the last letters of the sentence from the constant `text` in the following format:
-
-```text
-First: N
-Last: t
-```
-
-Your task is to extract these characters from a string and paste them into `console.log()` without using any intermediate variables.
diff --git a/modules/38-properties/400-properties-expressions/en/README.md b/modules/38-properties/400-properties-expressions/en/README.md
deleted file mode 100644
index 84a68e7f..00000000
--- a/modules/38-properties/400-properties-expressions/en/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-
-Properties and methods are expressions just like variables, constants, or function calls, which means they can be combined in many different ways.
-
-In operations:
-
-```javascript
-const name = 'Shaya';
-name.length + 5; // 10
-`hi, ${name.toUpperCase()}!`; // hi, SHAYA!
-```
-
-In function parameters:
-
-```javascript
-const name1 = 'Robb';
-const name2 = 'Shaya';
-console.log(name2.length); // => 5
-console.log(name2.toLowerCase()); // => shaya
-console.log(Math.min(name1.length, name2.length)); // => 4
-```
diff --git a/modules/38-properties/400-properties-expressions/en/data.yml b/modules/38-properties/400-properties-expressions/en/data.yml
deleted file mode 100644
index 0fc4547e..00000000
--- a/modules/38-properties/400-properties-expressions/en/data.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-name: Properties and methods as expressions
-tips:
- - >
- [About
- String.prototype.trim()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)
diff --git a/modules/38-properties/400-properties-expressions/es/EXERCISE.md b/modules/38-properties/400-properties-expressions/es/EXERCISE.md
deleted file mode 100644
index 2bca3162..00000000
--- a/modules/38-properties/400-properties-expressions/es/EXERCISE.md
+++ /dev/null
@@ -1,9 +0,0 @@
-
-Muestra en la pantalla la primera y última letra de la oración almacenada en la constante `text`, en el siguiente formato:
-
-```text
-First: N
-Last: t
-```
-
-Tu tarea es extraer estos caracteres de la cadena y colocarlos dentro de `console.log()`, sin utilizar variables intermedias.
diff --git a/modules/38-properties/400-properties-expressions/es/README.md b/modules/38-properties/400-properties-expressions/es/README.md
deleted file mode 100644
index 02b21da0..00000000
--- a/modules/38-properties/400-properties-expressions/es/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-
-Las propiedades y métodos son expresiones al igual que las variables, constantes o llamadas a funciones, por lo tanto, se pueden combinar de diversas formas.
-
-Uso en operaciones:
-
-```javascript
-const name = 'Shaya';
-name.length + 5; // 10
-`Hello, ${name.toUpperCase()}!`; // Hello, SHAYA!
-```
-
-Uso en parámetros de funciones:
-
-```javascript
-const name1 = 'Robb';
-const name2 = 'Shaya';
-console.log(name2.length); // => 5
-console.log(name2.toLowerCase()); // => shaya
-console.log(Math.min(name1.length, name2.length)); // => 4
-```
diff --git a/modules/38-properties/400-properties-expressions/es/data.yml b/modules/38-properties/400-properties-expressions/es/data.yml
deleted file mode 100644
index ca1eed57..00000000
--- a/modules/38-properties/400-properties-expressions/es/data.yml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-name: Propiedades y métodos como expresiones
-tips:
- - >
- [un poco sobre el método
- .trim()](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)
-definitions:
- - name: Método
- description: |
- es una función o procedimiento que pertenece a una clase u objeto.
diff --git a/modules/38-properties/400-properties-expressions/index.js b/modules/38-properties/400-properties-expressions/index.js
deleted file mode 100644
index e9dd7d9c..00000000
--- a/modules/38-properties/400-properties-expressions/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-const text = 'Never forget what you are, for surely the world will not';
-
-// BEGIN
-console.log(`First: ${text[0]}\nLast: ${text[text.length - 1]}`);
-// END
diff --git a/modules/38-properties/400-properties-expressions/ru/EXERCISE.md b/modules/38-properties/400-properties-expressions/ru/EXERCISE.md
deleted file mode 100644
index bc01b906..00000000
--- a/modules/38-properties/400-properties-expressions/ru/EXERCISE.md
+++ /dev/null
@@ -1,9 +0,0 @@
-
-Выведите на экран первую и последнюю буквы предложения, записанного в константу `text`, в следующем формате:
-
-```text
-First: N
-Last: t
-```
-
-Ваша задача извлечь эти символы из строки и вставить в `console.log()`, не используя промежуточные переменные.
diff --git a/modules/38-properties/400-properties-expressions/ru/README.md b/modules/38-properties/400-properties-expressions/ru/README.md
deleted file mode 100644
index efe722c9..00000000
--- a/modules/38-properties/400-properties-expressions/ru/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-
-Свойства и методы — такие же выражения, как переменные, константы или вызовы функции, а значит, их можно всячески комбинировать.
-
-Использование в операциях:
-
-```javascript
-const name = 'Shaya';
-name.length + 5; // 10
-`hi, ${name.toUpperCase()}!`; // hi, SHAYA!
-```
-
-Использование в параметрах функций:
-
-```javascript
-const name1 = 'Robb';
-const name2 = 'Shaya';
-console.log(name2.length); // => 5
-console.log(name2.toLowerCase()); // => shaya
-console.log(Math.min(name1.length, name2.length)); // => 4
-```
diff --git a/modules/38-properties/400-properties-expressions/ru/data.yml b/modules/38-properties/400-properties-expressions/ru/data.yml
deleted file mode 100644
index fe5d60d2..00000000
--- a/modules/38-properties/400-properties-expressions/ru/data.yml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-name: Свойства и методы как выражения
-tips:
- - >
- [немного о методе
- .trim()](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)
-definitions:
- - name: Метод
- description: |
- это функция или процедура, принадлежащая какому-то классу или объекту.
diff --git a/modules/38-properties/400-properties-expressions/test.js b/modules/38-properties/400-properties-expressions/test.js
deleted file mode 100644
index 19426705..00000000
--- a/modules/38-properties/400-properties-expressions/test.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// @ts-check
-
-import { expect, test, vi } from 'vitest';
-
-test('hello world', async () => {
- const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
- await import('./index.js');
-
- const firstArg = consoleLogSpy.mock.calls.join('\n');
-
- expect(firstArg).toBe('First: N\nLast: t');
-});
diff --git a/modules/38-properties/500-properties-chain-of-methods/Makefile b/modules/38-properties/500-properties-chain-of-methods/Makefile
deleted file mode 100644
index d0d0a48c..00000000
--- a/modules/38-properties/500-properties-chain-of-methods/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-test:
- @ test.sh
diff --git a/modules/ignored_languagetool_errors b/modules/ignored_languagetool_errors
index df1ba674..44df060f 100755
--- a/modules/ignored_languagetool_errors
+++ b/modules/ignored_languagetool_errors
@@ -530,98 +530,6 @@ La tilde es innecesaria según la norma actual. Con el sentido de «solamente»
Предлагаемые варианты:
solo, solamente, únicamente
------------------------
-38-properties/500-properties-chain-of-methods/es/README.md:35:43:1
-...o normal se anidan unas dentro de otras f(f(f())), lo que dificulta mucho el anál...
-Se ha encontrado un posible error ortográfico.
-------------------------
-38-properties/500-properties-chain-of-methods/es/README.md:35:43:1
-...normal se anidan unas dentro de otras f(f(f())), lo que dificulta mucho el anális...
-Se ha encontrado un posible error ortográfico.
-------------------------
-38-properties/500-properties-chain-of-methods/es/README.md:35:43:1
-...rmal se anidan unas dentro de otras f(f(f())), lo que dificulta mucho el análisis...
-Se ha encontrado un posible error ortográfico.
-------------------------
-38-properties/500-properties-chain-of-methods/es/EXERCISE.md:3:43:5
-...na sin crear variables intermedias. * [slice()](https://developer.mozilla.org/es/doc...
-Se ha encontrado un posible error ortográfico.
-Предлагаемые варианты:
-Sílice, Alice
-------------------------
-38-properties/500-properties-chain-of-methods/es/EXERCISE.md:4:43:4
-...ference/Global_Objects/String/slice) * [trim()](https://developer.mozilla.org/es/doc...
-Se ha encontrado un posible error ortográfico.
-Предлагаемые варианты:
-tris, tría, Rim, Tim, trío
-------------------------
-38-properties/400-properties-expressions/es/EXERCISE.md:4:43:5
-...to:
First: N Last: t
Tu tarea es extraer ...
-Se ha encontrado un posible error ortográfico.
-Предлагаемые варианты:
-Fiesta, Firma, Firmó, Firme, Irse, Friso, Farsa, Firmo, Oírse, Fiarse, Karst, Cirat, Tirso, Firmé, Frisa, Frise, Fíes, Firmat, Fort, Miret, Farsi, Fias, Fiase, Fiaste, Firmá, Fis, Fista, Fisto, Flirt, Flirts, Frisá, Frisé, Frisó, Fías, Fíat, Fíats, Fíese, Feist, Fiat, Typst
-------------------------
-38-properties/400-properties-expressions/es/EXERCISE.md:4:43:1
-...re class='hexlet-basics-output'> First: N Last: t Tu tarea es extraer est...
-Se ha encontrado un posible error ortográfico.
-------------------------
-38-properties/400-properties-expressions/es/EXERCISE.md:5:43:4
-... class='hexlet-basics-output'> First: N Last: t Tu tarea es extraer estos ca...
-Se ha encontrado un posible error ortográfico.
-Предлагаемые варианты:
-Las, Lasa, Laso, Laste, Lasta, Lasto, Lastá, Lasté, Lastó, Lat, Lats
-------------------------
-38-properties/400-properties-expressions/es/EXERCISE.md:5:43:1
-...='hexlet-basics-output'> First: N Last: t Tu tarea es extraer estos carac...
-Se ha encontrado un posible error ortográfico.
-------------------------
-38-properties/200-properties-methods/es/README.md:8:43:2
-...ripción revela algunos detalles internos de implementación que no son importantes...
-Posible error tipográfico: múltiples espacios en blanco
-Предлагаемые варианты:
-
-------------------------
-38-properties/200-properties-methods/es/README.md:15:43:6
-...í, sino en los datos (objetos) del tipo Number. Los números que se asignan a variables...
-Se ha encontrado un posible error ortográfico.
-Предлагаемые варианты:
-Nombre, Número, Nueve, Cumbre, Nube, Nubes, Numero, Lumbar, Lumbre, Tumbar, Numen, Numera, Numeró, Púber, Rumbera, Rumbero, Tumbe, Rumbea, Rumbeo, Tumben, Zumbar, Zumben, Rumbear, Rumbeó, Zumbe, Denver, Gúmer, Humbert, Lumbier, Uber, Yumbel, Cumbe, Cumbes, Cumbé, Cumbés, Lamber, Nimbar, Nimbe, Nimben, Nimbes, Nimbé, Numbat, Numere, Numerá, Numeré, Rumbee, Rumbeá, Rumbeé, Súber, Tumbes, Tumbé, Zumbel, Zumbes, Zumbé, Tumblr
-------------------------
-38-properties/200-properties-methods/es/README.md:15:43:6
-...este momento se produce lo que se llama boxing.* Surge una pregunta lógica: ¿por qué ...
-Se ha encontrado un posible error ortográfico.
-Предлагаемые варианты:
-Boeing
-------------------------
-38-properties/200-properties-methods/es/README.md:26:43:3
-...n detalle en los cursos [dedicados a la POO](https://ru.hexlet.io/programs/js-oop?some=param&utm_source=code-basics&utm_medium=referral&utm_campaign=blog&utm_content=lesson)....
-Se ha encontrado un posible error ortográfico.
-Предлагаемые варианты:
-POR, POCO, POP, POLO, POZO, PRO, ZOO, POMO, PORO, POSÓ, PON, POSO, PÍO, PODO, POTO, POYO, LOO, POBO, LOÓ, TOÓ, POA, PAO, POE, POIO, POL, POU, PEO, PIO, PODÓ, POOL, ROO, TOO
-------------------------
-38-properties/100-properties-syntax/es/README.md:22:43:7
-...mente? ¿Por qué es esa la respuesta?* Respuesta
El códig...
-Se ha encontrado un posible error ortográfico.
-Предлагаемые варианты:
-detalles, detalle, detalla, detalló, dejáis, detallas, detallo, datáis, debáis, decaías, dentáis, detal, detales, detallá, detallás, detallé, detasas, detraías, dotáis, emails, metáis, petáis, retail, retáis, vetáis
-------------------------
-38-properties/100-properties-syntax/es/README.md:23:43:7
-...r qué es esa la respuesta?* Respuesta
El código imprimir...
-Se ha encontrado un posible error ortográfico.
-Предлагаемые варианты:
-sumar, sumario, sumaria, sumará, sumara, Yumari, sumare, sumarie, sumariá, sumarié, sumarió, sumaré
-------------------------
-38-properties/100-properties-syntax/es/README.md:23:43:7
-...puesta?* Respuesta
El código imprimirá ``, porque se est...
-Se ha encontrado un posible error ortográfico.
-Предлагаемые варианты:
-sumar, sumario, sumaria, sumará, sumara, Yumari, sumare, sumarie, sumariá, sumarié, sumarió, sumaré
-------------------------
-38-properties/100-properties-syntax/es/README.md:27:43:7
-...l último carácter en la cadena es 3.
-Se ha encontrado un posible error ortográfico.
-Предлагаемые варианты:
-detalles, detalle, detalla, detalló, dejáis, detallas, detallo, datáis, debáis, decaías, dentáis, detal, detales, detallá, detallás, detallé, detasas, detraías, dotáis, emails, metáis, petáis, retail, retáis, vetáis
-------------------------
35-calling-functions/350-stdlib/es/README.md:1:43:4
... que quiere lograr. A partir de ahí, es sólo cuestión de técnica. Si se les quita in...
La tilde es innecesaria según la norma actual. Con el sentido de «solamente» (adv.), cuando hay riesgo de ambigüedad con el adj. «solo», puede escribirse «sólo» (DRAE).
@@ -1666,10 +1574,6 @@ Hurray
...ов: «реализовать», «определить» и даже «заимплементить» (от слова implement). Все они встречаю...
Возможно найдена орфографическая ошибка.
------------------------
-38-properties/500-properties-chain-of-methods/ru/README.md:35:43:17
-...еализуется через композицию функций или пайплайн-оператор, который, кстати говоря, постепенно нач...
-Возможно найдена орфографическая ошибка.
-------------------------
20-arithmetics/60-infinity/ru/README.md:8:43:5
..., кто изучал высшую математику (привет, матан!), в этом нет ничего удивительного. Дел...
Возможно найдена орфографическая ошибка.
@@ -1906,24 +1810,6 @@ Possible spelling mistake found.
Предлагаемые варианты:
hex let-basics-output
------------------------
-38-properties/400-properties-expressions/en/EXERCISE.md:3:43:9
-... constant `` in the following format: First: N Last: ...
-This word is normally spelled with a hyphen.
-Предлагаемые варианты:
-pre-class
-------------------------
-38-properties/400-properties-expressions/en/EXERCISE.md:3:43:20
-...` in the following format: First: N Last: t
Your task is...
-Possible spelling mistake found.
-Предлагаемые варианты:
-hex let-basics-output
-------------------------
-38-properties/100-properties-syntax/en/README.md:18:43:10
-...their value is ``: ```javascript ``` *Self-сheck. What will `` print for the variable ``...
-Possible spelling mistake found.
-Предлагаемые варианты:
-Spell-check
-------------------------
35-calling-functions/350-stdlib/en/README.md:11:43:2
...s functions. In particular, the module [fs](https://nodejs.org/api/fs.html) is req...
Possible spelling mistake found.
@@ -2588,24 +2474,6 @@ Possible spelling mistake found.
Предлагаемые варианты:
hex let-basics-output
------------------------
-38-properties/400-properties-expressions/en/EXERCISE.md:3:43:9
-... constant `` in the following format: First: N Last: ...
-This word is normally spelled with a hyphen.
-Предлагаемые варианты:
-pre-class
-------------------------
-38-properties/400-properties-expressions/en/EXERCISE.md:3:43:20
-...` in the following format: First: N Last: t
Your task is...
-Possible spelling mistake found.
-Предлагаемые варианты:
-hex let-basics-output
-------------------------
-38-properties/100-properties-syntax/en/README.md:18:43:10
-...their value is ``: ```javascript ``` *Self-сheck. What will `` print for the variable ``...
-Possible spelling mistake found.
-Предлагаемые варианты:
-Spell-check
-------------------------
35-calling-functions/350-stdlib/en/README.md:11:43:2
...s functions. In particular, the module [fs](https://nodejs.org/api/fs.html) is req...
Possible spelling mistake found.
@@ -3256,18 +3124,6 @@ This sentence does not start with an uppercase letter.
Предлагаемые варианты:
Hurray
------------------------
-38-properties/400-properties-expressions/en/EXERCISE.md:3:43:9
-... constant `` in the following format: First: N Last: ...
-This word is normally spelled with a hyphen.
-Предлагаемые варианты:
-pre-class
-------------------------
-38-properties/400-properties-expressions/en/EXERCISE.md:3:43:20
-...` in the following format: First: N Last: t
Your task is...
-Possible spelling mistake found.
-Предлагаемые варианты:
-hex let-basics-output
-------------------------
40-define-functions/100-define-functions-syntax/en/README.md:10:43:9
.... Its job is to print out a greeting: Hello, Hexlet! First: N Last: ...
This word is normally spelled with a hyphen.