Näin Math.random() toimii
Math.random() on yksi JavaScriptin käytetyimmistä metodeista satunnaisten arvojen luontiin. Se on helppo käyttää ja sopii kaikkeen pienistä interaktioista peleihin ja simulaatioihin.

Mitä Math.random() on ja miten se toimii?
Math.random() on JavaScriptin sisäänrakennettu metodi, joka palauttaa liukuluvun väliltä 0 (mukaan lukien) ja 1 (pois lukien). Arvo on siis aina vähintään 0, mutta ei koskaan tasan 1. Siksi se toimii hyvänä pohjana erilaiselle satunnaisuudelle.
Taustalla käytetään pseudosatunnaislukugeneraattoria (PRNG). Se tarkoittaa, että luvut eivät ole matemaattisesti täysin satunnaisia, vaan algoritmin laskemia. Useimmissa käytännön tapauksissa — kuten peleissä, arvonnoissa tai satunnaisissa väreissä — Math.random() riittää hyvin. Edistyneeseen kryptografiaan tai tietoturvakäyttöön se ei kuitenkaan ole tarpeeksi vahva.
Esimerkkejä Math.random()-metodin käytöstä
Yksinkertainen esimerkki on satunnaisluvun generointi väliltä 0–9. Se tehdään kertomalla Math.random() tulos luvulla 10 ja pyöristämällä alaspäin:
const number = Math.floor(Math.random() * 10)
Samalla periaatteella voit säätää väliä kertomalla eri luvulla ja lisäämällä siirtymän. Jos haluat esimerkiksi luvun väliltä 5–15, voit kirjoittaa:
const number = Math.floor(Math.random() * 11) + 5
Tällä tavalla voit arpoa kokonaislukuja ja desimaaleja, valita satunnaisen alkion taulukosta tai lisätä vaihtelua väreihin, sijainteihin ja liikkeisiin verkkosovelluksessa.
Yksinkertaista apufunktiolla
Koodista tulee selkeämpää ja uudelleenkäytettävämpää, kun teet apufunktion, joka ottaa taulukon ja palauttaa siitä satunnaisen arvon.
const random = (array) => array[Math.floor(Math.random() * array.length)]
const result = random(['Kyllä', 'Ei'])
result on ajon aikana joko Kyllä tai Ei, ja sen voi näyttää käyttäjälle halutulla tavalla.
Tyypillisiä käyttötapauksia Math.random()-metodille
Math.random() on yleinen valinta pienissä projekteissa, joissa tarvitaan vaihtelua. Tyypillisiä esimerkkejä ovat satunnaiset taustavärit tai satunnaisen sitaatin valinta listasta.
Pelinkehityksessä metodia käytetään esimerkiksi aloituspaikkoihin, esteisiin, loottiin ja satunnaisiin tapahtumiin. Simulaatioissa sillä voidaan mallintaa epävarmuutta tai luonnollista vaihtelua. Se on myös hyödyllinen testidatan luomisessa, kun haluat eri arvoja joka ajokerralla.
On kuitenkin tärkeää muistaa, että satunnaisuus ei ole "aitoa". Koska arvot perustuvat algoritmiin, ne voidaan ennustaa, jos generaattorin tila tunnetaan. Peleissä ja yksinkertaisissa sovelluksissa tämä ei yleensä haittaa, mutta tietoturvakriittisissä toiminnoissa kannattaa käyttää kryptografista satunnaisuutta.
Math.random()-metodin edut ja rajoitukset
Math.random()-metodin suurin etu on yksinkertaisuus — yksi funktiokutsu antaa uuden satunnaisarvon. Se on myös JavaScriptin standardia ja toimii kaikissa moderneissa selaimissa ilman lisäkirjastoja.
Rajoitus on se, ettei se sovellu tilanteisiin, joissa tarvitaan todella satunnaisia lukuja. Tietoturvakriittisiin tarkoituksiin, kuten salasanojen tai avainten luontiin, suositellaan Web Crypto API:a (esim. crypto.getRandomValues()).
Useimmissa käyttötapauksissa Math.random() on silti täysin riittävä. Se antaa kehittäjille nopean ja joustavan tavan lisätä vaihtelua ja ennakoimattomuutta ohjelmiin.
Miten Slumpgenerator siirtyi Math.random()-metodista crypto.getRandomValues()-metodiin
Slumpgenerator rakennettiin alun perin Math.random()-metodin varaan. Vaikka se toimii arjessa hyvin, se ei ole kryptografisesti turvallinen — arvot voidaan teoriassa ennustaa, jos PRNG:n sisäinen tila tunnetaan.
Sittemmin Slumpgeneratorin satunnaislukugenerointi on siirretty käyttämään Web Crypto API:n crypto.getRandomValues()-metodia, joka hyödyntää käyttöjärjestelmän entropialähteitä ja on huomattavasti vaikeammin ennustettava. Lue lisää siitä, miten crypto.getRandomValues() toimii.
Lue lisää metodista Mozillan sivuilta MDN.
Käännökset
- Dansk: Sådan virker Math.random()
- Deutsch: So funktioniert Math.random()
- English: How Math.random() Works
- Suomi: Näin Math.random() toimii
- Svenska: Så fungerar Math.random()