Практика по JavaScript для новичков, Задача 55 #shorts

preview_player
Показать описание
Задача 55 на JavaScript: Описать функцию IsSquare(K) логического типа, возвращающую True, если целый параметр K (больше 0) является квадратом некоторого целого числа, и False в противном случае. С ее помощью найти количество квадратов в наборе из 10 целых положительных чисел

#itdoctor #shorts #javascript #js
Рекомендации по теме
Комментарии
Автор

По сути, в задаче у нас просится определить при помощи функции isSquare является ли число k квадратным числом (square number) или полным квадратом (perfect square). По определению Википедии: «Полный квадрат, также точный квадрат или квадратное число, — число, являющееся квадратом некоторого целого числа. Иными словами, квадратом является целое число, квадратный корень из которого извлекается нацело.» Поэтому можно предложить вот такое решение:

const isSquare = k =>

const positiveInt = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.table({
positiveInt,
squareNumber: positiveInt.map(isSquare),
});

Вместо вывода таблицы через console.table можно конечно вывести только количество квадратов в наборе (которое у нас и просили найти):


SerzhNesteruk
Автор

Спасибо за видео и интересную задачку!
Мне кажется, что в предложенном решении есть несколько несостыковок и неточностей.

1) Согласно условию задачи функция у нас должна проверять является ли число k квадратом (2-й степенью) целого числа, а в видео проверяется совершенно другое: является ли число k целочисленной степенью числа 2 (возможно 2 и i просто перепутаны местами). Квадрат числа мы учились вычислять ещё в задаче №2 тремя разными способами. Для первой десятки натуральных чисел квадратом целого числа являются только 1, 4 и 9.

2) Функция IsSquare исходя из логики своего названия и условий задачи должна возвращать true или false. Возвращение объекта делает работу функции совершенно неочевидной и абсолютно несоответствующей самому условию задачи, так как вызов функции IsSquare всегда будет возвращать истинноподобное (truthy) значение. К тому же поле возвращаемого объекта с таким же названием (IsSquare) содержит булевый примитив, хотя идентификатор начинается с глагола «is», что ещё больше запутывает, ведь с глаголов и деепричастий рекомендуется начинать названия только функций или методов (идетификаторы которых нужно вызывать с круглыми скобками).

3) Согласно кодстайлу языка JavaScript для именования переменных используется CamelCase, при чём с заглавной буквы должны начинаться только конструкторы и классы. Для всех остальных идентификаторов нужно использовать lowerCamelCase (исключением являются константы примитивов, для которых применяется SCREAMING_SNAKE_CASE). Функция IsSquare не является ни классом, ни конструктором, она не предназначена для вызова с оператором new, поэтому должна начинаться со строчной: isSquare.
По той же причине массив K лучше назвать иначе (например, positiveIntegers), а если он у нас представляет последовательность арифметической прогрессии (как в данном случае), то можно обойтись без него, просто воспользовавшись циклом for.

4) Last but not least. Алгоритм работы данной функции с применением метода «грубой силы», основаный на полном последовательном переборе возможных значений, далеко не самый оптимальный и имеет сложность по времени O(n). Поэтому его трудно назвать удачным решением для этого ряда задач. Например, число 1e14 очевидно является квадратом целого числа 1e7, но вызов isSquare(1e14) будет тормозить, а isSquare(1e13) и вовсе зависнет (так как квадратный корень из 1e13 не является целым числом и цикл будет идти до конца).

SerzhNesteruk