Sok esetben előfordul az a programozói munka során, hogy valamilyen véletlenszámra van szükségünk. A Dart-nak van egy math csomagja,
import 'dart:math';
amit importálni kell. Ez után már tudjuk használni a Random() konstruktor függvényt arra, hogy kreáljunk egy objektumot. Ennek a véletlenszám objektumnak van számos metódusa:
Például a nextInt() alkalmas arra, hogy generáljon egy véletlen egész számot. A metódusnak meg kell adni egy maximum egész értéket, aminél nagyobbat nem akarunk generáltatni. Illetőleg ez alatti számokat fog nekünk generálgatni.
Ha tehát azt mondom, hogy
var intValue = Random().nextInt(10);
Akkor az eredmény egy olyan egész szám lesz, ami nagyobb vagy egyenlő nullával és kisebb, mint 10. tehát 0 és 9 közötti egész számok lehetségesek.
Ha mondjuk dobókockához akarunk 1 és 6 közötti számokat generálni, akkor annak a helyes megoldása ez lesz:
var dobokockaErtek = Random(6) + 1;
Optimalizálás
Abban az esetben, ha mondjuk egy StatefulWidget-en belül kell generálnunk véletlenszámot, valahányszor egy gombra kattintunk, akkor a következőre érdemes odafigyelni: minden egyes Random() hívással egy új véletlenszám objektumot hozunk létre. Szerencsére a nem használt objektumok eldobásra kerülnek, tehát nem foglalják a memóriát. De ennek ellenére is fennáll az az eset, hogy egynél több objektum kerül létrehozásra, amit aztán a Flutternek ki kell onnan takarítania.
Itt van tehát ez az eset, amit optimalizálni kellene:
class DiceRoller extends StatefulWidget {
// ...
}
class _DiceRollerState extends State<DiceRoller> {
var currentDiceRoll = 2;
void rollDice() {
setState(() {
currentDiceRoll = Random().nextInt(6) + 1;
});
}
A megoldás az, hogy a véletlenszám objektum létrehozást, tehát a Random() hívását beletesszük egy final változóba. Például így:
final randomizer = Random();
class DiceRoller extends StatefulWidget {
// ...
}
class _DiceRollerState extends State<DiceRoller> {
var currentDiceRoll = 2;
void rollDice() {
setState(() {
currentDiceRoll = randomizer.nextInt(6) + 1;
});
}
Azzal, hogy létrehoztuk a randomizer nevű változót és inicializáltuk is, már nem fenyeget az a veszély, hogy új objektum jön létre.