Курс по JavaScript для начинающих: Модуль 4. Функции. Урок 3. Возвращаемые значения

Курс по JavaScript для начинающих: Модуль 4. Функции. Урок 3. Возвращаемые значения

Введение

Функции в JavaScript могут не только выполнять определенные действия, но и возвращать значения, которые могут быть использованы в других частях программы. Возврат значений из функции — это важная концепция, позволяющая строить более сложные и многоуровневые программы. В этом уроке мы рассмотрим, как функции возвращают значения, как эти значения можно использовать, и что происходит, если функция не возвращает значение.

Возврат значения с помощью оператора return

Оператор return используется для возврата значения из функции. Когда функция достигает оператора return, она прекращает свое выполнение и возвращает указанное значение.

Пример функции, возвращающей значение:

function sum(a, b) {
    return a + b;
}

let result = sum(3, 4);
console.log(result); // 7

Особенности:

  • Оператор return завершает выполнение функции.
  • Код, следующий после оператора return, не выполняется.

Возврат нескольких значений

Функция может возвращать только одно значение. Однако, вы можете возвращать массивы или объекты, чтобы вернуть несколько значений.

Пример возвращения массива:

function getCoordinates() {
    return [50, 100];
}

let coords = getCoordinates();
console.log(coords[0]); // 50
console.log(coords[1]); // 100

Пример возвращения объекта:

function createUser(name, age) {
    return {
        name: name,
        age: age
    };
}

let user = createUser("Иван", 25);
console.log(user.name); // Иван
console.log(user.age); // 25

Функции без возврата значения

Если функция не имеет оператора return, она возвращает undefined по умолчанию.

Пример функции без возврата значения:

function greet(name) {
    console.log("Привет, " + name + "!");
}

let result = greet("Иван");
console.log(result); // undefined

Вложенные вызовы функций

Вы можете использовать возвращаемые значения функции в других функциях или выражениях.

Пример вложенных вызовов функций:

function add(a, b) {
    return a + b;
}

function multiply(a, b) {
    return a * b;
}

let result = multiply(add(2, 3), 4);
console.log(result); // 20

Пример комплексного использования

Пример функции, возвращающей объект с несколькими значениями и использованием этих значений:

function getUserData(name, birthYear) {
    let age = new Date().getFullYear() - birthYear;
    return {
        name: name,
        age: age
    };
}

let user = getUserData("Анна", 1990);
console.log(user.name); // Анна
console.log(user.age); // текущий возраст, вычисленный на основе года рождения

Заключение

Возврат значений из функций — это мощный инструмент, который позволяет создавать более сложные и гибкие программы. Понимание того, как возвращать значения, использовать их и работать с функциями, не возвращающими значения, является ключевым аспектом в эффективном программировании на JavaScript.


Контрольные вопросы

Что делает оператор return в функции?

  • Завершает выполнение функции и возвращает указанное значение.
  • Выводит значение в консоль.
  • Приостанавливает выполнение функции.
  • Инициализирует переменную.

Что произойдет, если функция не имеет оператора return?

  • Функция вернет null.
  • Функция вернет undefined.
  • Функция вызовет ошибку.
  • Функция ничего не вернет и не завершится.

Как вернуть несколько значений из функции?

  • Вернуть массив или объект, содержащий несколько значений.
  • Использовать несколько операторов return.
  • Использовать оператор break.
  • Вернуть строку с разделителями.

Какой результат будет у функции sum, если ее объявить как function sum(a, b) { return a + b; } и вызвать как sum(3, 4)?

  • 7*
  • 34
  • undefined
  • null

Что произойдет, если в функции есть код после оператора return?

  • Код после оператора return не будет выполнен.
  • Код после оператора return выполнится до возврата значения.
  • Код после оператора return выполнится только в случае ошибки.
  • Код после оператора return выполнится при следующем вызове функции.

Как использовать возвращаемое значение функции в другом выражении?

  • Вызвать функцию внутри другого выражения или функции.
  • Использовать оператор return в вызывающей функции.
  • Сохранить значение в глобальной переменной.
  • Использовать оператор break.

Упражнения

Конечно, добавим необходимые пояснения и формулы к каждому упражнению:

Упражнение 1: Квадратный корень методом Ньютона (без использования Math)

Создайте функцию sqrt, которая принимает число и возвращает его квадратный корень, используя метод Ньютона для приближения.

Формула:
Метод Ньютона использует итеративное приближение:

 x_{n+1} = \frac{1}{2} \left( x_n + \frac{S}{x_n} \right)

function sqrt(n) {
    let x = n;
    let y = 1;
    let e = 0.000001; // точность

    while (x - y > e) {
        x = (x + y) / 2;
        y = n / x;
    }
    return x;
}

console.log(sqrt(16)); // приблизительно 4
console.log(sqrt(25)); // приблизительно 5

Упражнение 2: Нахождение наименьшего общего кратного

Создайте функцию lcm, которая принимает два числа и возвращает их наименьшее общее кратное (НОК).

Формула:
НОК можно найти через НОД (наибольший общий делитель):

 \text{НОК}(a, b) = \frac{|a \cdot b|}{\text{НОД}(a, b)}

function gcd(a, b) {
    while (b !== 0) {
        let temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

function lcm(a, b) {
    return (a * b) / gcd(a, b);
}

console.log(lcm(4, 6)); // 12
console.log(lcm(15, 20)); // 60

Упражнение 3: Перевод числа в двоичную систему

Создайте функцию toBinary, которая принимает число и возвращает строку, представляющую это число в двоичной системе.

Пояснение:
Двоичная система использует только цифры 0 и 1. Чтобы перевести число в двоичную систему, нужно делить его на 2 и записывать остатки.

function toBinary(num) {
    let binary = '';
    while (num > 0) {
        binary = (num % 2) + binary;
        num = (num - num % 2) / 2; // эквивалент Math.floor(num / 2)
    }
    return binary || '0';
}

console.log(toBinary(10)); // "1010"
console.log(toBinary(255)); // "11111111"

Упражнение 4: Нахождение чисел Фибоначчи

Создайте функцию fibonacci, которая принимает число n и возвращает n-е число Фибоначчи.

Формула:
Последовательность Фибоначчи определяется рекуррентным соотношением:

 F(n) = F(n-1) + F(n-2) \ \text{где} \, F(0) = 0 \, \text{и} \, F(1) = 1

function fibonacci(n) {
    let a = 0, b = 1, temp;
    if (n === 0) return a;
    for (let i = 2; i <= n; i++) {
        temp = a + b;
        a = b;
        b = temp;
    }
    return b;
}

console.log(fibonacci(10)); // 55
console.log(fibonacci(15)); // 610

Упражнение 5: Обратный порядок строки

Создайте функцию reverseString, которая принимает строку и возвращает эту строку в обратном порядке.

Пояснение:
Переворот строки заключается в чтении её символов в обратном порядке и формировании новой строки.

function reverseString(str) {
    let reversed = '';
    for (let i = str.length - 1; i >= 0; i--) {
        reversed += str[i];
    }
    return reversed;
}

console.log(reverseString("hello")); // "olleh"
console.log(reverseString("JavaScript")); // "tpircSavaJ"

Упражнение 6: Проверка кратности числа

Создайте функцию isMultiple, которая принимает два числа и возвращает true, если первое число кратно второму, и false в противном случае.

Формула:
Число ( a ) кратно числу ( b ), если остаток от деления ( a ) на ( b ) равен нулю:

 a \% b === 0

function isMultiple(a, b) {
    return a % b === 0;
}

console.log(isMultiple(10, 5)); // true
console.log(isMultiple(10, 3)); // false

Упражнение 7: Подсчет количества гласных в строке

Создайте функцию countVowels, которая принимает строку и возвращает количество гласных в этой строке.

Пояснение:
Гласные буквы в английском языке: a, e, i, o, u. Подсчет гласных включает проверку каждого символа строки на принадлежность к множеству гласных.

function countVowels(str) {
    let count = 0;
    let vowels = "aeiouAEIOU";
    for (let i = 0; i < str.length; i++) {
        if (vowels.includes(str[i])) {
            count++;
        }
    }
    return count;
}

console.log(countVowels("hello")); // 2
console.log(countVowels("JavaScript")); // 3

Упражнение 8: Проверка на палиндром числа

Создайте функцию isNumericPalindrome, которая принимает число и возвращает true, если число является палиндромом, и false в противном случае.

Пояснение:
Число является палиндромом, если оно читается одинаково слева направо и справа налево.

function isNumericPalindrome(num) {
    let str = num.toString();
    let reversed = '';
    for (let i = str.length - 1; i >= 0; i--) {
        reversed += str[i];
    }
    return str === reversed;
}

console.log(isNumericPalindrome(121)); // true
console.log(isNumericPalindrome(123)); // false

Упражнение 9: Вычисление факториала числа рекурсивно

Создайте функцию factorialRecursive, которая принимает число и возвращает его факториал, используя рекурсию.

Формула:
Факториал числа ( n ) определяется как:

 n! = n \times (n-1) \times (n-2) \times \ldots \times 1 \ \text{и рекурсивно:} \ n! = n \times (n-1)! \ \text{где} \, 0! = 1

function factorialRecursive(n) {
    if (n === 0 || n === 1) {
        return 1;
    }
    return n * factorialRecursive(n - 1);
}

console.log(factorialRecursive(5)); // 120
console.log(factorialRecursive(7)); // 5040

Упражнение 10: Определение типа треугольника

Создайте функцию triangleType, которая принимает три длины сторон треугольника и возвращает тип треугольника: «равносторонний», «равнобедренный» или «разносторонний».

Пояснение:

  • Равносторонний треугольник: все три стороны равны.
  • Равнобедренный треугольник: две стороны равны.
  • Разносторонний треугольник: все стороны различны.
function triangleType(a, b, c) {
    if (a === b && b === c) {
        return "равносторонний";
    } else if (a === b || b === c || a === c) {
        return "равнобедренный";
    } else {
        return "разносторонний";
    }
}

console.log(triangleType(3, 3, 3)); // "равносторонний"
console.log(triangleType(3, 3, 4)); // "равнобедренный"
console.log(triangleType(3, 4, 5)); // "разносторонний"
Оставить комментарий

Комментарии

CommentsEmpty

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *