TypeScript:
Генерація випадкових чисел
Як це робити:
У TypeScript ви можете генерувати випадкові числа за допомогою глобального об’єкта Math
. Нижче наведено деякі практичні приклади, які демонструють, як створювати випадкові числа для різних потреб.
Генерація базового випадкового числа
Щоб згенерувати базове випадкове десяткове число між 0 (включно) та 1 (виключно), ви використовуєте Math.random()
. Це не вимагає жодних додаткових маніпуляцій:
const randomNumber = Math.random();
console.log(randomNumber);
Це може вивести значення, як от 0.8995452185604771
.
Генерація випадкового цілого числа між двома значеннями
Коли вам потрібне ціле число між двома конкретними значеннями, ви використовуєте як Math.random()
, так і деяку арифметику:
function getRandomInt(min: number, max: number): number {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
const randomInt = getRandomInt(1, 10);
console.log(randomInt);
Це може вивести ціле число між 1 та 10, наприклад, 7
.
Генерація унікального ідентифікатора
Випадкові числа можуть бути поєднані з іншими методами для створення унікальних ідентифікаторів, наприклад, простий фрагмент генератора UUID:
function generateUUID(): string {
return 'xxxxyxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
const uuid = generateUUID();
console.log(uuid);
Це генерує рядок, який нагадує UUID, наприклад, 110e8400-e29b-41d4-a716-446655440000
.
Поглиблено
Основний метод для генерації випадкових чисел у JavaScript, а отже, і в TypeScript, Math.random()
, покладається на генератор псевдовипадкових чисел (PRNG). Важливо зауважити, що, хоча результати можуть видатися випадковими, вони генеруються детерміністичним алгоритмом на основі початкового значення “сім’ї”. Тому числа, створені за допомогою Math.random()
, не є справді випадковими і не повинні використовуватися для криптографічних цілей.
Для криптографічно безпечних випадкових чисел Web Crypto API пропонує crypto.getRandomValues()
, який доступний в середовищах, що підтримують стандарт Web Crypto, включно з сучасними браузерами та Node.js (через модуль crypto
). Ось швидкий приклад, який ілюструє його використання у TypeScript для генерації безпечного випадкового числа в діапазоні:
function secureRandom(min: number, max: number): number {
const array = new Uint32Array(1);
window.crypto.getRandomValues(array);
return min + (array[0] % (max - min + 1));
}
const secureRandNum = secureRandom(1, 100);
console.log(secureRandNum);
Цей метод забезпечує більш сильний рівень випадковості і більше підходить для застосувань, чутливих до безпеки. Однак, він також більш ресурсоємний і може бути не потрібний для більш простих задач, як-от прості симуляції або генерація некритичних випадкових значень.