You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30-Days-Of-JavaScript/RU/07_Day/07_day_functions.md

39 KiB

30 Days Of JavaScript

Twitter Follow

Автор: Asabeneh Yetayeh
Январь, 2020

<< День 6 | День 8 >>

Thirty Days Of JavaScript

📔 День 7

Функции

К этому моменту мы уже видели некоторые встроенные функции JavaScript. Однако, в этой главе мы сфокусируемся на пользовательских функциях. Перед тем, как мы начнём создавать функции, давайте постараемся ответить на два основных вопроса: "Что такое функция?" и "Для чего нужны функции?".

Функция — это многократно испольуемый блок кода (или программных операторов), решающий определённую задачу. Функция объявляется с помощью ключевого слова "function", идентификатора (имени функции) и следующими за идентификатором скобками. В скобках могут заключаться параметры функции. Если функция получает параметры, она будет вызываться с аргументами. Функции также могут иметь параметры по умолчанию. Чтобы сохранить данные, полученные в результате выполнения функции, функция должна возвращать определённые типы данных. Чтобы получить эти данные, мы должны вызвать функцию.

Функции делают код:

  • Более чистым и читабельным
  • Многократно используемым
  • Удобным для тестирования

Функции могут быть объявлены одним из следующих способов:

  • Function Declaration
  • Function Expression
  • Анонимно (Anonymous Function)
  • Через "стрелочку" (так называемые "Стрелочные" функции или Arrow Function)

Function Declaration

Давайте посмотрим, как объявить и как вызвать функцию.

//Объявляем функцию без параметров с идентификатором functionName
function functionName() {
  // Тут будет написан код функции
  // Это пространство часто называют телом функции
}
functionName() // Вызываем функцию по её идентификатору (не забываем про скобки)

Функции без параметров и ключевого слова return

Функции могут быть объявлены без параметров

Пример:

// Функция без параметров
// Данная функция получает значение квадрата числа 2 и выводит результат на консоль 
function square() {
  let num = 2
  let sq = num * num
  console.log(sq)
}

// Вызываем нашу функцию
square() // 4

// Функция без параметров
// Данная функция складывает число 10 и число 20, после чего выводит результат на консоль
function addTwoNumbers() {
  let numOne = 10
  let numTwo = 20
  let sum = numOne + numTwo

  console.log(sum)
}

// Вызываем нашу функцию
addTwoNumbers() // 30
  function printFullName (){
      let firstName = 'Asabeneh'
      let lastName = 'Yetayeh'
      let space = ' '
      let fullName = firstName + space + lastName
      console.log(fullName)
}

printFullName() // Вызываем функцию

Ключевое слово return

Функции также могут возвращать значения. Если функция не возвращает значение, то значение функции будет undefined. Давайте перепишем функции, которые были рассмотрены выше. Теперь мы будем возвращать значения, а не выводить их на печать.

Чтобы функция могла вернуть значение, используется ключевое слово return:

function printFullName (){
      let firstName = 'Asabeneh'
      let lastName = 'Yetayeh'
      let space = ' '
      let fullName = firstName + space + lastName
      return fullName // Функция вернёт значение переменной fullName
}
console.log(printFullName()) // Теперь мы выводим результат функции вне самой функции

  function addTwoNumbers() {
      let numOne = 2
      let numTwo = 3
      let total = numOne + numTwo
      return total // Функция вернёт значение переменной total

  }

console.log(addTwoNumbers()) // Теперь мы выводим результат функции вне самой функции

Функции с одним параметром

В качестве параметра функции могут выступать различные типы данных (number, string, boolean, object, function).

// Функция с одним параметром
function functionName(parm1) {
  // Тут будет код функции
}
functionName(parm1) // Чтобы вызвать функцию, мы должны указать явно указать её аргумент (он будет использоваться параметром функции)
// Имя аргумента и имя параметра могут отличаться!

// Данная функция будет возвращать площадь окружности с радиусом r
function areaOfCircle(r) {
  let area = Math.PI * r * r
  return area
}

console.log(areaOfCircle(10)) // Не забываем указать аргумент функции

function square(number) {
  return number * number
}

console.log(square(10))

Функции с двумя параметрами

// Функция с двумя параметрами
function functionName(parm1, parm2) {
  // Тут будет код функции
}
functionName(parm1, parm2) // Теперь мы должны явно указать два аргумента

// Теперь данная функция функция сможет посчитать сумму тех двуч чисел,
// которые будут указаны в качестве её аргументов при вызове
function sumTwoNumbers(numOne, numTwo) {
  let sum = numOne + numTwo
  console.log(sum)
}
sumTwoNumbers(10, 20) // Вызываем функцию
// Однако, сейчас функция просто выводит сумму на консоль

// Добавим ключевое слово return
function sumTwoNumbers(numOne, numTwo) {
  let sum = numOne + numTwo
  return sum
}

// Теперь она возвращает сумму двух чисел
console.log(sumTwoNumbers(10, 20)) // 30

function printFullName(firstName, lastName) {
  return `${firstName} ${lastName}`
}
console.log(printFullName('Asabeneh', 'Yetayeh'))

Функции со множеством параметров

// Функция со множеством параметров
function functionName(parm1, parm2, parm3,...){
  // Тут будет код функции
}
functionName(parm1,parm2,parm3,...) // В данном случае мы обязаны указать три аргумента

// Данная функция получает массив в качестве параметра и возвращает сумму всех чисел внутри этого массива
function sumArrayValues(arr) {
  let sum = 0;
  for (let i = 0; i < arr.length; i++) {
    sum = sum + arr[i];
  }
  return sum;
}
const numbers = [1, 2, 3, 4, 5];
    
console.log(sumArrayValues(numbers)); // Вызываем функцию

const areaOfCircle = (radius) => {
    let area = Math.PI * radius * radius;
    return area;
}
console.log(areaOfCircle(10))

Функции с неограниченным количеством параметров

Порой мы не можем заранее предугадать, какое количество аргументов пользователь собирается использовать. В таких случаях мы должны использовать функции, способные принимать неограниченное количество аргументов. Мы можем это сделать как с помощью обычных (Function Declaration), так и с помощью "стрелочных" (Arrow Function) функций. Их использование имеет существенные различия, о которых мы обязаны знать. Давайте рассмотрим примеры обоих случаев:

Неограниченное количество параметров в Function Declaration функциях

Объявление функции предоставляет массив аргументов в области видимости функции, подобный объекту. Всё, что было передано в качестве аргументов в функцию, может быть доступно из объекта arguments внутри самой функции. Давайте рассмотрим пару примеров.

// Давайте получим содержимое объекта arguments
function sumAllNums() {
  console.log(arguments)
}

sumAllNums(1, 2, 3, 4)
// Arguments(4) [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]

// Function Declaration

// Данная функция просуммирует все значения, переданные в качестве аргументов.
// После чего, мы вернём результат суммирования. 

// Параметры не указаны явно
function sumAllNums() {         
  let sum = 0
  for (let i = 0; i < arguments.length; i++) {
    sum += arguments[i]
  }
  return sum
}

// Но передавать аргументы в функцию мы всё равно можем
console.log(sumAllNums(1, 2, 3, 4)) // 10
console.log(sumAllNums(10, 20, 13, 40, 10))  // 93
console.log(sumAllNums(15, 20, 30, 25, 10, 33, 40))  // 173

Неограниченное количество параметров в "стрелочных" функциях

"Стрелочные" функции не имеют объекта arguments. Чтобы описать "стрелочную" функцию, способную принимать неограниченное количество параметров, мы можем воспользоваться такой особенностью JavaScript, как остаточные параметры. Они указываются через оператор расширения (...), за которым следуюет идентификатор массива аргументов. Всё, что попало в "стрелочную" функцию в качестве аргументов, будет храниться в этом массиве. Давайте рассмотрим пример:

// Давайте получим доступ к объекту arguments

const sumAllNums = (...args) => {
 // console.log(arguments), объект arguments не существует у "стрелочных" функций
 // Вместо него мы используем оператор расширения (...)
 console.log(args)
}

sumAllNums(1, 2, 3, 4)
// [1, 2, 3, 4]

// Function Declaration

const sumAllNums = (...args) => {
  let sum = 0
  for (const element of args) {
    sum += element
  }
  return sum
}

console.log(sumAllNums(1, 2, 3, 4)) // 10
console.log(sumAllNums(10, 20, 13, 40, 10))  // 93
console.log(sumAllNums(15, 20, 30, 25, 10, 33, 40))  // 173

Анонимные функции

Анонимные функции не имеют имени.

// Синтаксис

const anonymousFun = function() {
  console.log(
    'Я анонимная функция, и мое значение хранится в anonymousFun.'
  )
}

Function Expression

Функции, объявленные с помощью Function Expression — это анонимные функции. После того, как мы создаём функцию без имени, мы присваиваем её переменной. Чтобы вернуть значение такой функции, мы должны обратиться к переменной. Давайте рассмотрим пример ниже.

// Function Expression

const square = function(n) {
  return n * n
}

console.log(square(2)) // -> 4

Самовызывающиеся функции

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

(function(n) {
  console.log(n * n)
})(2) // 4,

// Но, чтобы вернуть результат (если это нужно), вместо его вывода на печать,
// мы должны сохранить это значение как показано ниже 

let squaredNum = (function(n) {
  return n * n
})(10)

console.log(squaredNum)

"Стрелочные" функции

"Стрелочные" функции — это альтернативное объявление функции. Однако, "стрелочные" функции и функции, объявленные с помощью Function Declaration или Function Expression, имеют ряд незначительных отличий.

Чтобы объявить "стрелочную" функцию используется "стрелочка" (=>) вместо ключевого слова function. Давайте рассмотрим примеры ниже, чтобы изучить особенности "стрелочных" функций.

// Давайте создадим "стрелочную" функцию по примеру аналогичной Function Declaration функции

// Function Declaration
function square(n) {
  return n * n
}

console.log(square(2)) // 4

// "Стрелочная" функция
const square = n => {
  return n * n
}

console.log(square(2))  // -> 4

// Если тело "стрелочной" функции описывается одной строкой,
// такая функция может быть объявлена без фигурных скобок и ключевого слова return
const square = n => n * n  // -> 4
const changeToUpperCase = arr => {
  const newArr = []
  for (const element of arr) {
    newArr.push(element.toUpperCase())
  }
  return newArr
}

const countries = ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland']
console.log(changeToUpperCase(countries))

// ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
const printFullName = (firstName, lastName) => {
  return `${firstName} ${lastName}`
}

console.log(printFullName('Asabeneh', 'Yetayeh'))

Описанная выше функция имеет только оператор return, поэтому мы можем явно вернуть ее следующим образом.

const printFullName = (firstName, lastName) => `${firstName} ${lastName}`

console.log(printFullName('Asabeneh', 'Yetayeh'))

Функции с параметрами по умолчанию

Иногда мы передаём значения по умолчанию параметрам. Если при вызове функции не передан аргумент, будет использовано значение по умолчанию. Все виды объявления функций могут иметь одно или несколько значений по умолчанию.

// Синтаксис

// Объявляем функцию
function functionName(param = value) {
  // Тело функции
}

// Вызываем функцию
functionName()
functionName(arg)

Пример:

function greetings(name = 'Peter') {
  let message = `${name}, welcome to 30 Days Of JavaScript!`
  return message
}

console.log(greetings())            // Peter, welcome to 30 Days Of JavaScript!
console.log(greetings('Asabeneh'))  // Asabeneh, welcome to 30 Days Of JavaScript!
function generateFullName(firstName = 'Asabeneh', lastName = 'Yetayeh') {
  let space = ' '
  let fullName = firstName + space + lastName
  return fullName
}

console.log(generateFullName())                     // Asabeneh Yetayeh
console.log(generateFullName('David', 'Smith'))     // David Smith
function calculateAge(birthYear, currentYear = 2019) {
  let age = currentYear - birthYear
  return age
}

console.log('Age: ', calculateAge(1819)) // Age: 200
function weightOfObject(mass, gravity = 9.81) {
  let weight = mass * gravity + ' N' // Значение должно быть предварительно преобразовано в строчный тип данных
  return weight
}

console.log('Weight of an object in Newton: ', weightOfObject(100))         // Weight of an object in Newton: 981 N
console.log('Weight of an object in Newton: ', weightOfObject(100, 1.62))   // Weight of an object in Newton: 162 N

Давайте превратим выше описанные функции в "стрелочные".

// Синтаксис

// Объявляем функцию
const functionName = (param = value) => {
  // Тело функции
}

// Вызываем функцию
functionName()
functionName(arg)

Пример:

const greetings = (name = 'Peter') => {
  let message = name + ', welcome to 30 Days Of JavaScript!'
  return message
}

console.log(greetings())            // Peter, welcome to 30 Days Of JavaScript!
console.log(greetings('Asabeneh'))  // Asabeneh, welcome to 30 Days Of JavaScript!
const generateFullName = (firstName = 'Asabeneh', lastName = 'Yetayeh') => {
  let space = ' '
  let fullName = firstName + space + lastName
  return fullName
}

console.log(generateFullName())                     // Asabeneh Yetayeh
console.log(generateFullName('David', 'Smith'))     // David Smith

const calculateAge = (birthYear, currentYear = 2019) => currentYear - birthYear
console.log('Age: ', calculateAge(1819)) // Age: 200
// Значение должно быть предварительно преобразовано в строчный тип данных
const weightOfObject = (mass, gravity = 9.81) => mass * gravity + ' N'
  
console.log('Weight of an object in Newton: ', weightOfObject(100))         // Weight of an object in Newton: 981 N
console.log('Weight of an object in Newton: ', weightOfObject(100, 1.62))   // Weight of an object in Newton: 162 N

Function Declaration VS "Стрелочные" функции

Это будет рассмотрено в другом разделе.

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

💻 Упражнения

Упражнения: Уровень 1

  1. Объявите функцию fullName. Она будет выводить ваше полное имя.

  2. Объявите функцию fullName, теперь она должна принимать firstName и lastName в качестве параметров и возвращать строку с Вашим полным именем.

  3. Объявите функцию addNumbers, она должна принимать два параметра и возвращать сумму.

  4. Площадь прямоугольника вычисляется следующим образом: площадь = длина x ширина. Напишите функцию areaOfRectangle, которая будет вычислять площадь прямоугольника по заданным параметрам.

  5. Периметр прямоугольника вычисляется следующим образом: периметр = 2x(длина + ширина)_. Напишите функцию perimeterOfRectangle, которая будет вычислять периметр прямоугольника по заданным параметрам.

  6. Объём прямоугольной призмы вычисляется следующим образом: объём = длина x ширина x высота. Напишите функцию Объём прямоугольной призмы вычисляется следующим образом: объём = длина x ширина x высота. Напишите функцию, которая вычисляет volumeOfRectPrism, которая будет вычислять объём прямоугольной призмы.

  7. Площадь окружности вычисляется следующим образом: площадь = π x r x r. Напишите функцию areaOfCircle, которая будет вычислять площадь окружности по её радиусу.

  8. Длина окружности вычисляется следующим образом: площадь = 2πr. Напишите функцию circumOfCircle, которая будет вычислять длину окружности по её радиусу.

  9. Плотность вещества рассчитывается следующим образом: плотность = масса/объём. Напишите функцию density, которая вычисляет плотность вещества по заданным массе и объёму.

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

  11. Вес вещества рассчитывается следующим образом: вес = масса x сила тяжести. Напишите функцию weight, которая вычисляет вес.

  12. Температуру из °C можно перевести в °F по этой формуле: °F = (°C x 9/5) + 32. Напишите функцию convertCelsiusToFahrenheit, которая преобразует °C в °F.

  13. Индекс массы тела (ИМТ) рассчитывается следующим образом: ИМТ = вес в кг / (рост x рост) в м². Напишите функцию для вычисления ИМТ. ИМТ используется для определения различных весовых групп у взрослых в возрасте 20 лет и старше. На основе представленной ниже информации проверьте, имеет ли человек недостаточный, нормальный, избыточный вес или ожирение.

    • Недостаточный вес: ИМТ менее 18,5
    • Недостаточный вес: ИМТ менее 18,5
    • Нормальный вес: ИМТ от 18,5 до 24,9
    • Избыточный вес: ИМТ от 25 до 29,9
    • Ожирение: ИМТ 30 или более
  14. Напишите функцию с именем checkSeason, она принимает название месяца в качестве параметра и возвращает сезон: осень, зима, весна или лето.

  15. Math.max возвращает наибольший аргумент. Напишите функцию findMax, которая принимает три аргумента и возвращает их максимальное значение, не используя метод Math.max.

    console.log(findMax(0, 10, 5))      // 10
    console.log(findMax(0, -10, -2))    // 0
    

Упражнения: Уровень 2

  1. Линейное уравнение вычисляется следующим образом: ax + by + c = 0. Напишите функцию solveLinEquation, которая вычисляет значение линейного уравнения.

  2. Квадратичное уравнение вычисляется следующим образом: ax + by + c = 0. Напишите функцию solveQuadEquation, которая вычисляет значение квадратичного уравнения.

    console.log(solveQuadratic())           // {0}
    console.log(solveQuadratic(1, 4, 4))    // {-2}
    console.log(solveQuadratic(1, -1, -2))  // {2, -1}
    console.log(solveQuadratic(1, 7, 12))   // {-3, -4}
    console.log(solveQuadratic(1, 0, -4))   // {2, -2}
    console.log(solveQuadratic(1, -1, 0))   // {1, 0}
    
  3. Объявите функцию с именем printArray. Она принимает массив в качестве параметра и выводит каждое его значение.

  4. Напишите функцию с именем showDateTime, которая показывает время в следующем формате: 08/01/2020 04:08, используя объект Date.

    showDateTime() //08/01/2020 04:08
    
  5. Объявите функцию с именем swapValues. Эта функция меняет значение x на y.

    swapValues(3, 4) // x => 4, y=>3
    swapValues(4, 5) // x = 5, y = 4
    
  6. Объявите функцию с именем reverseArray. Она принимает массив в качестве параметра и возвращает обратный массив (не используйте встроенные методы JavaScript).

    console.log(reverseArray([1, 2, 3, 4, 5]))
    //[5, 4, 3, 2, 1]
    console.log(reverseArray(['A', 'B', 'C']))
    //['C', 'B', 'A']
    
  7. Объявите функцию с именем capitalizeArray. Она принимает массив в качестве параметра и возвращает значение — capitalizedarray.

  8. Объявите функцию с именем addItem. Она принимает элемент в качестве параметра и возвращает массив после добавления элемента.

  9. Объявите функцию с именем removeItem. Она принимает индекс в качестве параметра и возвращает массив после удаления элемента.

  10. Объявите функцию с именем sumOfNumbers. Она принимает числовой параметр и складывает все числа в указанном диапазоне.

  11. Объявите функцию с именем sumOfOdds. Она принимает числовой параметр и складывает все нечётные числа в заданном диапазоне.

  12. Объявите функцию с именем sumOfEven. Она принимает числовой параметр и складывает все чётные числа в заданном диапазоне.

  13. Объявите функцию evensAndOdds. Она принимает в качестве параметра положительное целое число и подсчитывает количество чётных и нечётных чисел до указанного параметра.

    evensAndOdds(100);
    // The number of odds are 50.
    // The number of evens are 51.
    
  14. Напишите функцию, которая принимает любое количество аргументов и возвращает сумму аргументов.

    sum(1, 2, 3) // -> 6
    sum(1, 2, 3, 4) // -> 10
    
  15. Напишите функцию randomUserIp, которая генерирует случайный IP-адрес.

  16. Напишите функцию randomMacAddress, которая генерирует случайный MAC-адрес.

  17. Объявите функцию randomHexaNumberGenerator. При вызове эта функция генерирует случайное шестнадцатеричное число. Функция возвращает это шестнадцатеричное число.

    console.log(randomHexaNumberGenerator());
    '#ee33df'
    
  18. Объявите функцию userIdGenerator. При вызове эта функция генерирует семисимвольный идентификатор. Функция возвращает этот идентификатор.

    console.log(userIdGenerator());
    41XTDbE
    

Упражнения: Уровень 3

  1. Измените функцию userIdGenerator. Объявите функцию userIdGeneratedByUser. Она не принимает никаких параметров, но принимает два входных значения с помощью prompt(). Одно из входных значений — количество символов, а второе — количество идентификаторов, которые необходимо сгенерировать.

    userIdGeneratedByUser()
    'kcsy2
    SMFYb
    bWmeq
    ZXOYh
    2Rgxf
    '
    userIdGeneratedByUser()
    '1GCSgPLMaBAVQZ26
    YD7eFwNQKNs7qXaT
    ycArC5yrRupyG00S
    UbGxOFI7UXSWAyKN
    dIV0SSUTgAdKwStr
    '
    
  2. Напишите функцию rgbColorGenerator, которая генерирует случайные цвета RGB.

    rgbColorGenerator()
    rgb(125,244,255)
    
  3. Напишите функцию arrayOfHexaColors, которая возвращает любое количество шестнадцатеричных цветов в массиве.

  4. Напишите функцию arrayOfRgbColors, которая возвращает любое количество цветов RGB в массиве.

  5. Напишите функцию convertHexaToRgb, которая преобразует цвет из формата HEX в формат RGB и возвращает этот цвет в формате RGB.

  6. Напишите функцию convertRgbToHexa, которая преобразует RGB-цвет в шестнадцатеричный формат и возвращает этот цвет в шестнадцатеричном формате.

  7. Напишите функцию generateColors, которая может генерировать любое количество цветов в формате HEX или RGB.

    console.log(generateColors('hexa', 3)) // ['#a3e12f', '#03ed55', '#eb3d2b']
    console.log(generateColors('hexa', 1)) // '#b334ef'
    console.log(generateColors('rgb', 3)) // ['rgb(5, 55, 175)', 'rgb(50, 105, 100)', 'rgb(15, 26, 80)']
    console.log(generateColors('rgb', 1)) // 'rgb(33,79, 176)'
    
  8. Назовите свою функцию shuffleArray, она принимает массив в качестве параметра и возвращает перемешанный массив.

  9. Назовите свою функцию factorial, она принимает целое число в качестве параметра и возвращает факториал числа.

  10. Назовите свою функцию isEmpty, она принимает параметр и проверяет, является ли он пустым или нет.

  11. Назовите вашу функцию sum, она принимает любое количество аргументов и возвращает сумму этих аргументов.

  12. Напишите функцию sumOfArrayItems, которая принимает в качестве параметра массив и возвращает сумму всех его элементов. Проверьте, являются ли все элементы массива числовыми. Если нет, верните корректную обратную связь.

  13. Напишите функцию average, которая принимает в качестве параметра массив и возвращает среднее значение элементов. Проверьте, являются ли все элементы массива числовыми. Если нет, верните корректную обратную связь.

  14. Напишите функцию modifyArray, которая принимает массив в качестве параметра, изменяет пятый элемент массива и возвращает массив. Если длина массива меньше пяти, функция возвращает «Элемент не найден».

    console.log(modifyArray(['Avocado', 'Tomato', 'Potato','Mango', 'Lemon','Carrot']);
    
    ['Avocado', 'Tomato', 'Potato','Mango', 'LEMON', 'Carrot']
    
    console.log(modifyArray(['Google', 'Facebook','Apple', 'Amazon','Microsoft',  'IBM']);
    
    ['Google', 'Facebook','Apple', 'Amazon','MICROSOFT',  'IBM']
    
    console.log(modifyArray(['Google', 'Facebook','Apple', 'Amazon']);
    
      'Not Found'
    
  15. Напишите функцию под названием isPrime, которая проверяет, является ли число простым.

  16. Напишите функцию, которая проверяет, все ли элементы в массиве уникальны.

  17. Напишите функцию, которая проверяет, имеют ли все элементы массива одинаковый тип данных.

  18. Имя переменной JavaScript не поддерживает специальные символы, кроме $ и _. Напишите функцию isValidVariable, которая проверяет, является переменная допустимой или недопустимой.

  19. Напишите функцию, которая возвращает массив из семи случайных чисел в диапазоне от 0 до 9. Все числа должны быть уникальными.

    sevenRandomNumbers() // [(1, 4, 5, 7, 9, 8, 0)]
    
  20. Напишите функцию под названием reverseCountries, она берет массив стран, сначала копирует его, а затем возвращает обратный массив исходного массива.

🎉 ПОЗДРАВЛЯЮ! 🎉

<< День 6 | День 8 >>