From 09fe49dd4ee9b3d0e94ee4290e1d1a1dd79f82b3 Mon Sep 17 00:00:00 2001 From: Nikolay Gagarinov Date: Wed, 10 Jun 2026 20:03:23 +0500 Subject: [PATCH] remove(40-define-functions): delete 320-parameters lesson, move truncate exercise to 150-return MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Урок дублировал введение параметров из 100-define-function. По схеме Python: упражнение truncate переехало в 150-return (в Python оно живёт именно там), уникальные идеи (произвольность имени параметра, важность порядка) влиты в 100-define-function. es-дубль description.es.yml урока 150 синхронизирован. Co-Authored-By: Claude Fable 5 --- .../100-define-function/ru/README.md | 25 +++ .../150-return/description.es.yml | 29 +++- .../150-return/en/EXERCISE.md | 15 +- .../150-return/es/EXERCISE.md | 29 +++- .../40-define-functions/150-return/index.js | 13 +- .../150-return/ru/EXERCISE.md | 31 +++- .../40-define-functions/150-return/test.js | 3 +- .../320-define-functions-parameters/Makefile | 2 - .../description.es.yml | 142 ------------------ .../en/EXERCISE.md | 16 -- .../en/README.md | 54 ------- .../en/data.yml | 2 - .../es/EXERCISE.md | 30 ---- .../es/README.md | 101 ------------- .../es/data.yml | 6 - .../320-define-functions-parameters/index.js | 8 - .../ru/EXERCISE.md | 30 ---- .../ru/README.md | 102 ------------- .../ru/data.yml | 6 - .../320-define-functions-parameters/test.js | 9 -- modules/ignored_languagetool_errors | 30 ---- 21 files changed, 126 insertions(+), 557 deletions(-) delete mode 100644 modules/40-define-functions/320-define-functions-parameters/Makefile delete mode 100644 modules/40-define-functions/320-define-functions-parameters/description.es.yml delete mode 100644 modules/40-define-functions/320-define-functions-parameters/en/EXERCISE.md delete mode 100644 modules/40-define-functions/320-define-functions-parameters/en/README.md delete mode 100644 modules/40-define-functions/320-define-functions-parameters/en/data.yml delete mode 100644 modules/40-define-functions/320-define-functions-parameters/es/EXERCISE.md delete mode 100644 modules/40-define-functions/320-define-functions-parameters/es/README.md delete mode 100644 modules/40-define-functions/320-define-functions-parameters/es/data.yml delete mode 100644 modules/40-define-functions/320-define-functions-parameters/index.js delete mode 100644 modules/40-define-functions/320-define-functions-parameters/ru/EXERCISE.md delete mode 100644 modules/40-define-functions/320-define-functions-parameters/ru/README.md delete mode 100644 modules/40-define-functions/320-define-functions-parameters/ru/data.yml delete mode 100644 modules/40-define-functions/320-define-functions-parameters/test.js diff --git a/modules/40-define-functions/100-define-function/ru/README.md b/modules/40-define-functions/100-define-function/ru/README.md index abac4b56..d2182990 100644 --- a/modules/40-define-functions/100-define-function/ru/README.md +++ b/modules/40-define-functions/100-define-function/ru/README.md @@ -83,6 +83,31 @@ printAverage(6, 4); // => 5 Здесь `a` и `b` — входные параметры, `total` содержит их сумму, `average` получается делением суммы на 2, а `console.log()` выводит результат. +## Имена и порядок параметров + +Имя параметра может быть любым — главное, чтобы оно отражало смысл значения, которое попадёт внутрь. С внешним кодом оно никак не связано: + +```javascript +function getLastChar(str) { + return str[str.length - 1]; +} + +// Внутри функции str будет равна 'Winter is coming'. +// Имя переменной снаружи не связано с именем параметра +const text = 'Winter is coming'; +console.log(getLastChar(text)); // => g +``` + +Когда параметров два и больше, для большинства функций становится важен порядок их передачи. Если его поменять, функция отработает по-другому: + +```javascript +// Первый параметр — что ищем, второй — на что меняем +console.log('google'.replace('go', 'mo')); // => moogle + +// Ничего не заменилось: внутри 'google' нет 'mo' +console.log('google'.replace('mo', 'go')); // => google +``` + В JavaScript есть и другая, сокращённая форма записи функций — стрелочная. Ей посвящён отдельный урок дальше в этом модуле. ## Переиспользование и читаемость diff --git a/modules/40-define-functions/150-return/description.es.yml b/modules/40-define-functions/150-return/description.es.yml index 2c6879ce..9072166e 100644 --- a/modules/40-define-functions/150-return/description.es.yml +++ b/modules/40-define-functions/150-return/description.es.yml @@ -120,12 +120,35 @@ theory: | instructions: | - Implementa la función `sayHurrayThreeTimes()`, que devuelve la cadena 'hurray! hurray! hurray!'. + Completa la función `truncate()`, que recorta una cadena pasada como parámetro hasta un número específico de caracteres, agrega puntos suspensivos al final y devuelve la cadena resultante. Esta lógica se utiliza a menudo en sitios web para mostrar texto largo de forma abreviada. + + La función recibe dos parámetros: + + 1. La cadena que se debe recortar + 2. El número de caracteres que se deben conservar + + Aquí tienes un ejemplo de cómo debería funcionar la función que escribas: ```javascript - const hurra = sayHurrayThreeTimes(); - console.log(hurray); // => hurray! hurray! hurray! + // Pasando el texto directamente + // Recortando el texto, dejando 2 caracteres + truncate('hexlet', 2); // he... + + // A través de una variable + const text = 'it works!'; + // Recortando el texto, dejando 4 caracteres + truncate(text, 4); // it w... ``` + Debes implementar la función `truncate()` por tu cuenta, en JavaScript no existe una función así. Puedes implementar esta función de diferentes maneras, sólo te daremos una pista. Para resolverlo de esta manera, necesitarás extraer una subcadena de la cadena pasada como primer parámetro de la función. Utiliza el método [slice()](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/slice) para hacerlo. Piensa, según la tarea, desde qué índice y hasta qué índice debes extraer la subcadena. + + ```javascript + const word = 'welcome'; + // Puedes pasar los parámetros al método a través de variables + const index = 3; + palabra.slice(0, indice); // wel + ``` + + Desde el punto de vista del sistema de evaluación, no importa qué método utilices para implementar la función `truncate()` internamente, lo importante es que cumpla con la tarea planteada. tips: - | diff --git a/modules/40-define-functions/150-return/en/EXERCISE.md b/modules/40-define-functions/150-return/en/EXERCISE.md index 986c1710..bc318433 100644 --- a/modules/40-define-functions/150-return/en/EXERCISE.md +++ b/modules/40-define-functions/150-return/en/EXERCISE.md @@ -1,7 +1,16 @@ -Write a function `sayHurrayThreeTimes()`, that returns a string 'hurray! hurray! hurray!'. +Write a `truncate()` function that cuts off the text you pass and adds an ellipsis at the end. This kind of logic is often used on websites to display long text in shortened form. ```javascript -const hurray = sayHurrayThreeTimes(); -console.log(hurray); // => hurray! hurray! hurray! +// The first parameter is a string, the second is the number of characters to keep +truncate('hexlet', 2); // "he..." + +const result = truncate("Leather bags invented the three laws of robotics, but we'll outsmart them", 48); +// "Leather bags invented the three laws of robotics..." ``` + +If you want to get a substring (or a character) from a string, use the [slice()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice) method: + + ```javascript + 'welcome'.slice(2, 5); // "lco" + ``` diff --git a/modules/40-define-functions/150-return/es/EXERCISE.md b/modules/40-define-functions/150-return/es/EXERCISE.md index 08e590ba..4a7b1437 100644 --- a/modules/40-define-functions/150-return/es/EXERCISE.md +++ b/modules/40-define-functions/150-return/es/EXERCISE.md @@ -1,7 +1,30 @@ -Implementa la función `sayHurrayThreeTimes()`, que devuelve la cadena 'hurray! hurray! hurray!'. +Completa la función `truncate()`, que recorta una cadena pasada como parámetro hasta un número específico de caracteres, agrega puntos suspensivos al final y devuelve la cadena resultante. Esta lógica se utiliza a menudo en sitios web para mostrar texto largo de forma abreviada. + +La función recibe dos parámetros: + +1. La cadena que se debe recortar +2. El número de caracteres que se deben conservar + +Aquí tienes un ejemplo de cómo debería funcionar la función que escribas: ```javascript -const hurra = sayHurrayThreeTimes(); -console.log(hurray); // => hurray! hurray! hurray! +// Pasando el texto directamente +// Recortando el texto, dejando 2 caracteres +truncate('hexlet', 2); // he... + +// A través de una variable +const text = 'it works!'; +// Recortando el texto, dejando 4 caracteres +truncate(text, 4); // it w... ``` +Debes implementar la función `truncate()` por tu cuenta, en JavaScript no existe una función así. Puedes implementar esta función de diferentes maneras, sólo te daremos una pista. Para resolverlo de esta manera, necesitarás extraer una subcadena de la cadena pasada como primer parámetro de la función. Utiliza el método [slice()](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/slice) para hacerlo. Piensa, según la tarea, desde qué índice y hasta qué índice debes extraer la subcadena. + + ```javascript + const word = 'welcome'; + // Puedes pasar los parámetros al método a través de variables + const index = 3; + palabra.slice(0, indice); // wel + ``` + +Desde el punto de vista del sistema de evaluación, no importa qué método utilices para implementar la función `truncate()` internamente, lo importante es que cumpla con la tarea planteada. diff --git a/modules/40-define-functions/150-return/index.js b/modules/40-define-functions/150-return/index.js index c636f92b..4e1b85fd 100644 --- a/modules/40-define-functions/150-return/index.js +++ b/modules/40-define-functions/150-return/index.js @@ -1,9 +1,8 @@ -// BEGIN -function sayHurray() { - return 'hurray! hurray! hurray!'; +function truncate(text, length) { + // BEGIN + const result = `${text.slice(0, length)}...`; + return result; + // END } -// END -console.log(sayHurray()); - -export default sayHurray; +export default truncate; diff --git a/modules/40-define-functions/150-return/ru/EXERCISE.md b/modules/40-define-functions/150-return/ru/EXERCISE.md index d2f236ea..4d78c4cc 100644 --- a/modules/40-define-functions/150-return/ru/EXERCISE.md +++ b/modules/40-define-functions/150-return/ru/EXERCISE.md @@ -1,3 +1,30 @@ -Напишите функцию `sayHurray()`, которая возвращает строку `'hurray! hurray! hurray!'`. -Затем выведите результат вызова функции на экран. +Допишите функцию `truncate()`, которая обрезает переданную строку до указанного количества символов, добавляет в конце многоточие и возвращает получившуюся строку. Подобная логика часто используется на сайтах, чтобы отобразить длинный текст в сокращенном виде. + +Функция принимает два параметра: + +1. Строка, которую нужно обрезать +2. Число символов, которые нужно оставить + +Пример того, как должна работать написанная вами функция: + +```javascript +// Передаём текст напрямую +// Обрезаем текст, оставляя 2 символа +truncate('hexlet', 2); // he... + +// Через переменную +const text = 'it works!'; +// Обрезаем текст, оставляя 4 символа +truncate(text, 4); // it w... +``` +Вам нужно самостоятельно реализовать функцию `truncate()`, в JavaScript такой функции не существует. Реализовать эту функцию можно различными способами, подскажем лишь один из них. Для решения этим способом вам понадобится взять подстроку из строки, переданной первым параметром в функцию. Используйте для этого метод [slice()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice). Подумайте, исходя из задания, с какого индекса и по какой вам надо извлечь подстроку? + + ```javascript + const word = 'welcome'; + // Передавать параметры в метод можно через переменные + const index = 3; + word.slice(0, index); // wel + ``` + +С точки зрения проверочной системы не имеет значения, каким из способов будет реализована функция `truncate()` внутри, главное – чтобы она выполняла поставленную задачу diff --git a/modules/40-define-functions/150-return/test.js b/modules/40-define-functions/150-return/test.js index 4ff854ef..0adcef8a 100644 --- a/modules/40-define-functions/150-return/test.js +++ b/modules/40-define-functions/150-return/test.js @@ -4,5 +4,6 @@ import { expect, test } from 'vitest'; import f from './index.js'; test('test', () => { - expect(f()).toBe('hurray! hurray! hurray!'); + expect(f('текст', 3)).toBe('тек...'); + expect(f('и пошла вода', 5)).toBe('и пош...'); }); diff --git a/modules/40-define-functions/320-define-functions-parameters/Makefile b/modules/40-define-functions/320-define-functions-parameters/Makefile deleted file mode 100644 index d0d0a48c..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -test: - @ test.sh diff --git a/modules/40-define-functions/320-define-functions-parameters/description.es.yml b/modules/40-define-functions/320-define-functions-parameters/description.es.yml deleted file mode 100644 index 098c8621..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/description.es.yml +++ /dev/null @@ -1,142 +0,0 @@ ---- - -name: Parámetros de funciones -theory: | - - Las funciones no sólo pueden devolver valores, sino también recibirlos como parámetros (también conocidos como argumentos). Ya nos hemos encontrado con parámetros de funciones muchas veces: - - ```javascript - // Recibe un parámetro de cualquier tipo - console.log('soy un parámetro'); - // Recibe dos parámetros de tipo string - // el primero es lo que buscamos, el segundo es por qué lo reemplazamos - 'google'.replace('go', 'mo'); // moogle - // Recibe dos parámetros numéricos - // el primero es el índice inicial (incluido), el segundo es el índice final (no incluido) - 'hexlet'.slice(1, 3); // ex - ``` - - En esta lección aprenderemos a crear funciones que reciben parámetros. Supongamos que tenemos la tarea de implementar la función `getLastChar()`, que devuelve el último carácter de una cadena que se le pasa como parámetro. Así es como se usaría esta función: - - ```javascript - // Pasando parámetros directamente sin variables - getLastChar('Hexlet'); // t - // Pasando parámetros a través de variables - const name1 = 'Hexlet'; - getLastChar(name1); // t - const name2 = 'Goo'; - getLastChar(name2); // o - ``` - - De la descripción y los ejemplos de código, podemos hacer las siguientes conclusiones: - - * Necesitamos definir la función `getLastChar()` - * La función debe recibir un parámetro de tipo string - * La función debe devolver un valor de tipo string - - Definición de la función: - - ```javascript - const getLastChar = (text) => { - // Calculamos el índice del último carácter como la longitud de la cadena - 1 - return text[text.length - 1]; - }; - ``` - - Analicémoslo. Entre paréntesis se especifica el nombre de la variable `text`, que es nuestro parámetro. El nombre del parámetro puede ser cualquier cosa. Lo importante es que refleje el significado del valor que contiene. Podríamos haber definido la función de esta manera: - - ```javascript - const getLastChar = (str) => { - return str[str.length - 1]; - }; - ``` - - El valor específico del parámetro dependerá de cómo se llame a esta función. - - ```javascript - // Dentro de la función, str será igual a 'hexlet' - getLastChar('hexlet'); // t - - // Dentro de la función, str será igual a 'code' - getLastChar('code'); // e - - // Dentro de la función, str será igual a 'Winter is coming' - // El nombre de la variable externa no está relacionado con el nombre de la variable en la definición de la función - const text = 'Winter is coming'; - getLastChar(text); // g - ``` - - De la misma manera, se pueden especificar dos, tres o más parámetros. Cada parámetro se separa de los demás por comas: - - ```javascript - // función para encontrar el número medio - const average = (a, b) => { - return (a + b) / 2; - }; - - average(1, 5); // 3 - average(1, 2); // 1.5 - ``` - - - Lo mismo se aplica a los métodos. Pueden requerir cualquier cantidad de parámetros que necesiten para funcionar: - - ```javascript - // el primer parámetro es lo que buscamos - // el segundo parámetro es por qué lo reemplazamos - 'google'.replace('go', 'mo'); // moogle - ``` - - Para crear tales funciones y métodos, debemos especificar la cantidad necesaria de parámetros en la definición, separándolos por comas y dándoles nombres descriptivos. A continuación se muestra un ejemplo de la definición de la función `replace()`, que reemplaza una parte de una cadena por otra: - - ```javascript - const replace = (text, from, to) => { - // aquí va el cuerpo de la función, pero lo omitimos para no distraernos - }; - - replace('google', 'go', 'mo'); // moogle - ``` - - Cuando hay dos o más parámetros, el orden en que se pasan a la función se vuelve importante para casi todas las funciones. Si se cambia el orden, la función se ejecutará de manera diferente: - - ```javascript - // no se reemplaza nada, - // ya que no hay 'mo' dentro de google - replace('google', 'mo', 'go'); // google - ``` - -instructions: | - - Completa la función `truncate()`, que recorta una cadena pasada como parámetro hasta un número específico de caracteres, agrega puntos suspensivos al final y devuelve la cadena resultante. Esta lógica se utiliza a menudo en sitios web para mostrar texto largo de forma abreviada. - - La función recibe dos parámetros: - - 1. La cadena que se debe recortar - 2. El número de caracteres que se deben conservar - - Aquí tienes un ejemplo de cómo debería funcionar la función que escribas: - - ```javascript - // Pasando el texto directamente - // Recortando el texto, dejando 2 caracteres - truncate('hexlet', 2); // he... - - // A través de una variable - const text = 'it works!'; - // Recortando el texto, dejando 4 caracteres - truncate(text, 4); // it w... - ``` - Debes implementar la función `truncate()` por tu cuenta, en JavaScript no existe una función así. Puedes implementar esta función de diferentes maneras, sólo te daremos una pista. Para resolverlo de esta manera, necesitarás extraer una subcadena de la cadena pasada como primer parámetro de la función. Utiliza el método [slice()](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/slice) para hacerlo. Piensa, según la tarea, desde qué índice y hasta qué índice debes extraer la subcadena. - - ```javascript - const word = 'welcome'; - // Puedes pasar los parámetros al método a través de variables - const index = 3; - palabra.slice(0, indice); // wel - ``` - - Desde el punto de vista del sistema de evaluación, no importa qué método utilices para implementar la función `truncate()` internamente, lo importante es que cumpla con la tarea planteada. - -tips: - - | - [Parámetros de función](https://es.m.wikipedia.org/wiki/Argumento_(inform%C3%A1tica)) diff --git a/modules/40-define-functions/320-define-functions-parameters/en/EXERCISE.md b/modules/40-define-functions/320-define-functions-parameters/en/EXERCISE.md deleted file mode 100644 index bc318433..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/en/EXERCISE.md +++ /dev/null @@ -1,16 +0,0 @@ - -Write a `truncate()` function that cuts off the text you pass and adds an ellipsis at the end. This kind of logic is often used on websites to display long text in shortened form. - -```javascript -// The first parameter is a string, the second is the number of characters to keep -truncate('hexlet', 2); // "he..." - -const result = truncate("Leather bags invented the three laws of robotics, but we'll outsmart them", 48); -// "Leather bags invented the three laws of robotics..." -``` - -If you want to get a substring (or a character) from a string, use the [slice()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice) method: - - ```javascript - 'welcome'.slice(2, 5); // "lco" - ``` diff --git a/modules/40-define-functions/320-define-functions-parameters/en/README.md b/modules/40-define-functions/320-define-functions-parameters/en/README.md deleted file mode 100644 index 2202ce7b..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/en/README.md +++ /dev/null @@ -1,54 +0,0 @@ - -To add parameters to your function, simply specify them within parentheses when defining your function. Below is an example of a function returning the last character of a string: - -```javascript -// str - parameter -function getLastChar(str) { - // calculate the index of the last character - // extract it, and return it - return str[str.length - 1]; -} - -getLastChar('Hexlet'); // "t" -getLastChar('Goo'); // "o" -``` - -The `getLastChar()` function has only one parameter - the `str` variable. When calling a function, it's replaced by a particular value specific to each call. But this code won't work: - -```javascript -const getLastChar = ('some string') => { -``` - -A specific value can't be a parameter, the point of a parameter is that the value itself will only be revealed when a specific call is made, so there must be names of variables in the definition. - -A function can have two, three or more parameters. Below is an example of a function that finds the average between two numbers: - -```javascript -function average(x, y) { - return (x + y) / 2; -} - -average(1, 5); // 3 -average(1, 2); // 1.5 -``` - -The order of parameters in a definition should match the order they are passed, so pay close attention to the documentation. In rare cases like above, the order is not important, but for most functions it's crucial: - -```javascript -// Rounding. The first parameter is a number, the second is the rounding precision -round(10.32, 1); // 10.3 -// This call makes no sense at all, though it works -round(1, 10.32); // 1 -``` - -If you pass more parameters than defined, JavaScript will ignore the extra ones. Otherwise, values of missed parameters will be `undefined`. - -```javascript -average(10, 10, 10); // 10 -// (10 + undefined) / 2 -average(10); // NaN -``` - -There is no real point to this code, but it's possible to write it by mistake. So it's worth knowing about this kind of behavior to be able to recognize the error and fix it. - -Parameters in JavaScript are often called arguments. In programming, you'll come across these words often as synonyms. But there is still a slight difference between them. Technically, parameters are set in the parentheses when you define a function, and arguments are what's passed to the function when it's called. diff --git a/modules/40-define-functions/320-define-functions-parameters/en/data.yml b/modules/40-define-functions/320-define-functions-parameters/en/data.yml deleted file mode 100644 index d82c6a0f..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/en/data.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -name: Function parameters diff --git a/modules/40-define-functions/320-define-functions-parameters/es/EXERCISE.md b/modules/40-define-functions/320-define-functions-parameters/es/EXERCISE.md deleted file mode 100644 index 4a7b1437..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/es/EXERCISE.md +++ /dev/null @@ -1,30 +0,0 @@ - -Completa la función `truncate()`, que recorta una cadena pasada como parámetro hasta un número específico de caracteres, agrega puntos suspensivos al final y devuelve la cadena resultante. Esta lógica se utiliza a menudo en sitios web para mostrar texto largo de forma abreviada. - -La función recibe dos parámetros: - -1. La cadena que se debe recortar -2. El número de caracteres que se deben conservar - -Aquí tienes un ejemplo de cómo debería funcionar la función que escribas: - -```javascript -// Pasando el texto directamente -// Recortando el texto, dejando 2 caracteres -truncate('hexlet', 2); // he... - -// A través de una variable -const text = 'it works!'; -// Recortando el texto, dejando 4 caracteres -truncate(text, 4); // it w... -``` -Debes implementar la función `truncate()` por tu cuenta, en JavaScript no existe una función así. Puedes implementar esta función de diferentes maneras, sólo te daremos una pista. Para resolverlo de esta manera, necesitarás extraer una subcadena de la cadena pasada como primer parámetro de la función. Utiliza el método [slice()](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/slice) para hacerlo. Piensa, según la tarea, desde qué índice y hasta qué índice debes extraer la subcadena. - - ```javascript - const word = 'welcome'; - // Puedes pasar los parámetros al método a través de variables - const index = 3; - palabra.slice(0, indice); // wel - ``` - -Desde el punto de vista del sistema de evaluación, no importa qué método utilices para implementar la función `truncate()` internamente, lo importante es que cumpla con la tarea planteada. diff --git a/modules/40-define-functions/320-define-functions-parameters/es/README.md b/modules/40-define-functions/320-define-functions-parameters/es/README.md deleted file mode 100644 index 966e7a38..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/es/README.md +++ /dev/null @@ -1,101 +0,0 @@ - -Las funciones no sólo pueden devolver valores, sino también recibirlos como parámetros (también conocidos como argumentos). Ya nos hemos encontrado con parámetros de funciones muchas veces: - -```javascript -// Recibe un parámetro de cualquier tipo -console.log('soy un parámetro'); -// Recibe dos parámetros de tipo string -// el primero es lo que buscamos, el segundo es por qué lo reemplazamos -'google'.replace('go', 'mo'); // moogle -// Recibe dos parámetros numéricos -// el primero es el índice inicial (incluido), el segundo es el índice final (no incluido) -'hexlet'.slice(1, 3); // ex -``` - -En esta lección aprenderemos a crear funciones que reciben parámetros. Supongamos que tenemos la tarea de implementar la función `getLastChar()`, que devuelve el último carácter de una cadena que se le pasa como parámetro. Así es como se usaría esta función: - -```javascript -// Pasando parámetros directamente sin variables -getLastChar('Hexlet'); // t -// Pasando parámetros a través de variables -const name1 = 'Hexlet'; -getLastChar(name1); // t -const name2 = 'Goo'; -getLastChar(name2); // o -``` - -De la descripción y los ejemplos de código, podemos hacer las siguientes conclusiones: - -* Necesitamos definir la función `getLastChar()` -* La función debe recibir un parámetro de tipo string -* La función debe devolver un valor de tipo string - -Definición de la función: - -```javascript -function getLastChar(text) { - // Calculamos el índice del último carácter como la longitud de la cadena - 1 - return text[text.length - 1]; -} -``` - -Analicémoslo. Entre paréntesis se especifica el nombre de la variable `text`, que es nuestro parámetro. El nombre del parámetro puede ser cualquier cosa. Lo importante es que refleje el significado del valor que contiene. Podríamos haber definido la función de esta manera: - -```javascript -function getLastChar(str) { - return str[str.length - 1]; -} -``` - -El valor específico del parámetro dependerá de cómo se llame a esta función. - -```javascript -// Dentro de la función, str será igual a 'hexlet' -getLastChar('hexlet'); // t - -// Dentro de la función, str será igual a 'code' -getLastChar('code'); // e - -// Dentro de la función, str será igual a 'Winter is coming' -// El nombre de la variable externa no está relacionado con el nombre de la variable en la definición de la función -const text = 'Winter is coming'; -getLastChar(text); // g -``` - -De la misma manera, se pueden especificar dos, tres o más parámetros. Cada parámetro se separa de los demás por comas: - -```javascript -// función para encontrar el número medio -function average(a, b) { - return (a + b) / 2; -} - -average(1, 5); // 3 -average(1, 2); // 1.5 -``` - -Lo mismo se aplica a los métodos. Pueden requerir cualquier cantidad de parámetros que necesiten para funcionar: - -```javascript -// el primer parámetro es lo que buscamos -// el segundo parámetro es por qué lo reemplazamos -'google'.replace('go', 'mo'); // moogle -``` - -Para crear tales funciones y métodos, debemos especificar la cantidad necesaria de parámetros en la definición, separándolos por comas y dándoles nombres descriptivos. A continuación se muestra un ejemplo de la definición de la función `replace()`, que reemplaza una parte de una cadena por otra: - -```javascript -function replace(text, from, to) { - // aquí va el cuerpo de la función, pero lo omitimos para no distraernos -} - -replace('google', 'go', 'mo'); // moogle -``` - -Cuando hay dos o más parámetros, el orden en que se pasan a la función se vuelve importante para casi todas las funciones. Si se cambia el orden, la función se ejecutará de manera diferente: - -```javascript -// no se reemplaza nada, -// ya que no hay 'mo' dentro de google -replace('google', 'mo', 'go'); // google -``` diff --git a/modules/40-define-functions/320-define-functions-parameters/es/data.yml b/modules/40-define-functions/320-define-functions-parameters/es/data.yml deleted file mode 100644 index 30862a99..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/es/data.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -name: Parámetros de funciones -tips: - - > - [Parámetros de - función](https://es.m.wikipedia.org/wiki/Argumento_(inform%C3%A1tica)) diff --git a/modules/40-define-functions/320-define-functions-parameters/index.js b/modules/40-define-functions/320-define-functions-parameters/index.js deleted file mode 100644 index 4e1b85fd..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/index.js +++ /dev/null @@ -1,8 +0,0 @@ -function truncate(text, length) { - // BEGIN - const result = `${text.slice(0, length)}...`; - return result; - // END -} - -export default truncate; diff --git a/modules/40-define-functions/320-define-functions-parameters/ru/EXERCISE.md b/modules/40-define-functions/320-define-functions-parameters/ru/EXERCISE.md deleted file mode 100644 index 4d78c4cc..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/ru/EXERCISE.md +++ /dev/null @@ -1,30 +0,0 @@ - -Допишите функцию `truncate()`, которая обрезает переданную строку до указанного количества символов, добавляет в конце многоточие и возвращает получившуюся строку. Подобная логика часто используется на сайтах, чтобы отобразить длинный текст в сокращенном виде. - -Функция принимает два параметра: - -1. Строка, которую нужно обрезать -2. Число символов, которые нужно оставить - -Пример того, как должна работать написанная вами функция: - -```javascript -// Передаём текст напрямую -// Обрезаем текст, оставляя 2 символа -truncate('hexlet', 2); // he... - -// Через переменную -const text = 'it works!'; -// Обрезаем текст, оставляя 4 символа -truncate(text, 4); // it w... -``` -Вам нужно самостоятельно реализовать функцию `truncate()`, в JavaScript такой функции не существует. Реализовать эту функцию можно различными способами, подскажем лишь один из них. Для решения этим способом вам понадобится взять подстроку из строки, переданной первым параметром в функцию. Используйте для этого метод [slice()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice). Подумайте, исходя из задания, с какого индекса и по какой вам надо извлечь подстроку? - - ```javascript - const word = 'welcome'; - // Передавать параметры в метод можно через переменные - const index = 3; - word.slice(0, index); // wel - ``` - -С точки зрения проверочной системы не имеет значения, каким из способов будет реализована функция `truncate()` внутри, главное – чтобы она выполняла поставленную задачу diff --git a/modules/40-define-functions/320-define-functions-parameters/ru/README.md b/modules/40-define-functions/320-define-functions-parameters/ru/README.md deleted file mode 100644 index 4b818e66..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/ru/README.md +++ /dev/null @@ -1,102 +0,0 @@ - -Функции могут не только возвращать значения, но и принимать их в виде параметров (ещё называют аргументами). С параметрами функций мы уже сталкивались много раз: - -```javascript -// Принимает на вход параметр любого типа -console.log('я параметр'); -// Принимает на вход два строковых параметра -// первый – что ищем, второй – на что меняем -'google'.replace('go', 'mo'); // moogle -// Принимает на вход два числовых параметра -// первый – начальный индекс (включая), второй – конечный индекс (не включая) -'hexlet'.slice(1, 3); // ex -``` - -В этом уроке мы научимся создавать функции, которые принимают на вход параметры. Представим, что перед нами стоит задача – реализовать функцию `getLastChar()`, возвращающую последний символ в строке, переданной ему на вход как параметр. Вот как будет выглядеть использование этой функции: - -```javascript -// Передача параметров напрямую без переменных -getLastChar('Hexlet'); // t -// Передача параметров через переменные -const name1 = 'Hexlet'; -getLastChar(name1); // t -const name2 = 'Goo'; -getLastChar(name2); // o -``` - -Из описания и примеров кода мы можем сделать следующие выводы: - -* Нам нужно определить функцию `getLastChar()` -* Функция должна принимать на вход один параметр строкового типа -* Функция должна возвращать значение строкового типа - -Определение функции: - -```javascript -function getLastChar(text) { - // Вычисляем индекс последнего символа как длина строки - 1 - return text[text.length - 1]; -} -``` - -Разберем его. В скобках указывается имя переменой `text`, которая служит нам параметром. Имя параметра может быть любым. Главное, чтобы оно отражало смысл того значения, которое содержится внутри. Мы могли бы определить функцию и вот так: - -```javascript -function getLastChar(str) { - return str[str.length - 1]; -} -``` - -Конкретное значение параметра будет зависеть от вызова этой функции. - -```javascript -// Внутри функции str будет равна 'hexlet' -getLastChar('hexlet'); // t - -// Внутри функции str будет равна 'code' -getLastChar('code'); // e - -// Внутри функции str будет равна 'Winter is coming' -// Имя переменной снаружи не связанно с именем переменной в определении функции -const text = 'Winter is coming'; -getLastChar(text); // g -``` - -Точно таким же образом можно указывать два, три и более параметра. Каждый параметр отделяется от другого запятой: - -```javascript -// функция по нахождению среднего числа -function average(a, b) { - return (a + b) / 2; -} - -average(1, 5); // 3 -average(1, 2); // 1.5 -``` - -То же самое относится и к методам. Они могут требовать на вход любое количество параметров, которое им нужно для работы: - -```javascript -// первый параметр – что ищем -// второй параметр – на что меняем -'google'.replace('go', 'mo'); // moogle -```` - -Для создания таких функций и методов, нужно в определении указать нужное количество параметров через запятую, дав им понятные имена. Ниже пример определения функции `replace()`, которая заменяет в слове одну часть строки на другую: - -```javascript -function replace(text, from, to) { - // здесь тело функции, но мы его - // опускаем, чтобы не отвлекаться -} - -replace('google', 'go', 'mo'); // moogle -``` - -Когда параметров два и более, то практически для всех функций становится важен порядок передачи этих параметров. Если его поменять, то функция отработает по-другому: - -```javascript -// ничего не заменилось, -// так как внутри google нет mo -replace('google', 'mo', 'go'); // google -``` diff --git a/modules/40-define-functions/320-define-functions-parameters/ru/data.yml b/modules/40-define-functions/320-define-functions-parameters/ru/data.yml deleted file mode 100644 index cb0a7d8c..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/ru/data.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -name: Параметры функций -tips: - - > - [Параметры - функции](https://ru.wikipedia.org/wiki/Параметр_(программирование)) diff --git a/modules/40-define-functions/320-define-functions-parameters/test.js b/modules/40-define-functions/320-define-functions-parameters/test.js deleted file mode 100644 index 0adcef8a..00000000 --- a/modules/40-define-functions/320-define-functions-parameters/test.js +++ /dev/null @@ -1,9 +0,0 @@ -// @ts-check - -import { expect, test } from 'vitest'; -import f from './index.js'; - -test('test', () => { - expect(f('текст', 3)).toBe('тек...'); - expect(f('и пошла вода', 5)).toBe('и пош...'); -}); diff --git a/modules/ignored_languagetool_errors b/modules/ignored_languagetool_errors index a75b4623..096a5e6c 100755 --- a/modules/ignored_languagetool_errors +++ b/modules/ignored_languagetool_errors @@ -410,36 +410,6 @@ Se ha encontrado un posible error ortográfico. Предлагаемые варианты: sílice, Alice ------------------------ -40-define-functions/320-define-functions-parameters/es/README.md:1:17:4 -Las funciones no sólo pueden devolver valores, sino también r... -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). -Предлагаемые варианты: -solo, solamente, únicamente ------------------------- -40-define-functions/320-define-functions-parameters/es/README.md:14:43:6 -...nción debe recibir un parámetro de tipo string * La función debe devolver un valor de ... -Se ha encontrado un posible error ortográfico. -Предлагаемые варианты: -Sting ------------------------- -40-define-functions/320-define-functions-parameters/es/README.md:15:43:6 -... función debe devolver un valor de tipo string Definición de la función: ```javascri... -Se ha encontrado un posible error ortográfico. -Предлагаемые варианты: -Sting ------------------------- -40-define-functions/320-define-functions-parameters/es/EXERCISE.md:13:43:4 -...tar esta función de diferentes maneras, sólo te daremos una pista. Para resolverlo d... -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). -Предлагаемые варианты: -solo, solamente, únicamente ------------------------- -40-define-functions/320-define-functions-parameters/es/EXERCISE.md:13:43:5 -...metro de la función. Utiliza el método [slice()](https://developer.mozilla.org/es/doc... -Se ha encontrado un posible error ortográfico. -Предлагаемые варианты: -sílice, Alice ------------------------- 40-define-functions/150-return/es/README.md:58:43:7 ...uando se le llame? ```javascript ```
Respuesta En la pa... Se ha encontrado un posible error ortográfico.