TypeScript — это строго типизированное расширение JavaScript, которое помогает писать более надёжный и предсказуемый код. Для джуниора понимание основ реализации алгоритмов на TypeScript — важный шаг к профессиональному росту. Рассмотрим простой, но показательный пример: алгоритм бинарного поиска.
Бинарный поиск — это эффективный алгоритм для поиска элемента в отсортированном массиве. Он работает по принципу «разделяй и властвуй»: на каждом шаге массив делится пополам, и алгоритм определяет, в какой половине может находиться искомый элемент.
Для начала определим сигнатуру функции. Использование типов делает код самодокументируемым и защищает от ошибок.
function binarySearch(arr: number[], target: number): number {
let left: number = 0;
let right: number = arr.length - 1;
while (left <= right) {
const mid: number = Math.floor((left + right) / 2);
if (arr[mid] === target) {
return mid; // элемент найден, возвращаем индекс
}
if (arr[mid] < target) {
left = mid + 1; // ищем в правой половине
} else {
right = mid - 1; // ищем в левой половине
}
}
return -1; // элемент не найден
}
arr: number[] и target: number — это явное указание, что функция принимает массив чисел и число для поиска. Это помогает избежать случайной передачи строк или других типов.: number гарантирует, что функция всегда вернёт число (индекс или -1).Напишем простой тестовый пример:
const sortedArray: number[] = [1, 3, 5, 7, 9, 11, 13];
const searchValue: number = 7;
const result: number = binarySearch(sortedArray, searchValue);
if (result !== -1) {
console.log(`Элемент найден на индексе: ${result}`);
} else {
console.log('Элемент не найден');
}
В этом коде мы явно объявляем типы переменных, что является хорошей практикой для TypeScript. Компилятор проверит, что sortedArray — это массив чисел, а searchValue — число.
const для переменных, которые не переприсваиваются — это делает код более предсказуемым.type Index = number; для улучшения читаемости.Освоив базовые принципы реализации алгоритмов на TypeScript, вы заложите прочный фундамент для решения более сложных задач. Помните: хороший код — это не только работающий код, но и понятный, безопасный и поддерживаемый код.