This version is out of date, covering development from v9.5.0 to v9.7.3. It is maintained here only for inbound reference links from elsewhere. It is no longer actively updated.

Jump to the current version of aTbRef

Tinderbox v9 Icon

rand([maxNumber])


Operator Type: 

Operator Scope of Action: 

Operator Purpose: 

Operator First Added: 

Operator Last Altered: 

Operator Has Optional Arguments: 


Syntax note: Operators without any defined mandatory arguments may omit their empty closing parentheses


rand([maxNumber])

rand()

rand

rand() returns a pseudo-random number between 0 and 1. No argument is required.

rand([maxNumber])

From v9.5.2, supplying an optional parameter maxNumber, which must be an integer, returns a random integer between 0 and maxNumber-1. This can be useful when wanting random list items, noting that list items are addressed using zero-based integers.

N.B. if working with list-based items, consider the List/Set.randomItem() operator (new to v9.5.2), which abstracts away the need to know the size of the list. Essentially it encapsulates calling list.at(rand(list.count)), so much easier to write/use

Getting 1-based ranges vs. zero-based ranges of values

Consider the original round() method:

$MyNumber=round(rand()*10); 

$MyNumber will be set to one of eleven integers in the range 0 through to 10. But, what if the '10' argument about is actually a child count:

$MyNumber=round(rand()*$ChildCount); 

If the $ChildCount was 10 and $MyNumber were used to fetch a random child using $SiblingOrder($MyNum) the process would fail if $MyNumber were zero as $SiblingOrder numbers from 1. Indeed, in this case the need is for ten integers, one through to ten.

Previously, 1-based range can be achieved:

$MyNumber=round(rand()*(10-1))+1; 

$MyNumber=round(rand()*($ChildCount-1))+1; 

If the main input is 10, by subtracting 1 the process returns a randomised integer in in the range 0-9 (ten numbers) and then adding back 1 shifts the value range to 1-10.

Using the newer rand(maxNumber) method the above becomes:

$MyNumber=round(rand($ChildCount-1))+1; 

This is why the List/Set.randomItem() may be an easier clear approach.