blob: 35fdd14d19b991745b3acee28ad29ea91a289a47 [file] [log] [blame]
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
part of dart.math;
/// A generator of random bool, int, or double values.
///
/// The default implementation supplies a stream of pseudo-random bits that are
/// not suitable for cryptographic purposes.
///
/// Use the [Random.secure]() constructor for cryptographic purposes.
///
/// To create a non-negative random integer uniformly distributed in the range
/// from 0, inclusive, to max, exclusive, use [nextInt(int max)].
/// ```dart
/// var intValue = Random().nextInt(10); // Value is >= 0 and < 10.
/// intValue = Random().nextInt(100) + 50; // Value is >= 50 and < 150.
/// ```
/// To create a non-negative random floating point value uniformly distributed
/// in the range from 0.0, inclusive, to 1.0, exclusive, use [nextDouble].
/// ```dart
/// var doubleValue = Random().nextDouble(); // Value is >= 0.0 and < 1.0.
/// doubleValue = Random().nextDouble() * 256; // Value is >= 0.0 and < 256.0.
/// ```
/// To create a random Boolean value, use [nextBool].
/// ```dart
/// var boolValue = Random().nextBool(); // true or false, with equal chance.
/// ```
///
abstract class Random {
/// Creates a random number generator.
///
/// The optional parameter [seed] is used to initialize the
/// internal state of the generator. The implementation of the
/// random stream can change between releases of the library.
external factory Random([int? seed]);
/// Creates a cryptographically secure random number generator.
///
/// If the program cannot provide a cryptographically secure
/// source of random numbers, it throws an [UnsupportedError].
external factory Random.secure();
/// Generates a non-negative random integer uniformly distributed in the range
/// from 0, inclusive, to [max], exclusive.
///
/// Implementation note: The default implementation supports [max] values
/// between 1 and (1<<32) inclusive.
///
/// Example:
/// ```dart
/// var intValue = Random().nextInt(10); // Value is >= 0 and < 10.
/// intValue = Random().nextInt(100) + 50; // Value is >= 50 and < 150.
/// ```
int nextInt(int max);
/// Generates a non-negative random floating point value uniformly distributed
/// in the range from 0.0, inclusive, to 1.0, exclusive.
///
/// Example:
/// ```dart
/// var doubleValue = Random().nextDouble(); // Value is >= 0.0 and < 1.0.
/// doubleValue = Random().nextDouble() * 256; // Value is >= 0.0 and < 256.0.
/// ```
double nextDouble();
/// Generates a random boolean value.
///
/// Example:
/// ```dart
/// var boolValue = Random().nextBool(); // true or false, with equal chance.
/// ```
bool nextBool();
}