4.4. Numbers and Time

The SELF number traits form the hierarchy shown below. (In this and subsequent hierarchy descriptions, indentation indicates that one traits object is a child of another. The prefix “traits” is omitted since these hierarchy descriptions always describe the interrelationship between traits objects. In most cases, leaf traits are concrete and have an associated prototype with the same name.)

orderedOddball
    number
        float
        integer
            smallInt
            bigInt

traits number defines behavior common to all numbers, such as successor, succ, predecessor, pred, absoluteValue, negate, double, half, max:, and min:. traits number inherits from traits orderedOddball, so sending copy or clone to a number returns the number itself. traits integer defines behavior common to all integers such as even, odd, and factorial. There are four division operators for integers that allow the programmer to control how the result is truncated or rounded. Integers also include behavior for iterating through a subrange, including:

to:Do:
to:By:Do:
to:ByNegative:Do:
upTo:Do:
upTo:By:Do:
downTo:Do:
downTo:By:Do:

Relevant oddballs:

  • infinity IEEE floating-point infinity

  • minSmallInt smallest smallInt in this implementation

  • maxSmallInt biggest smallInt in this implementation

Modules: number, float, integer, smallInt, bigInt

4.4.1. Random Numbers

clonable
    random
        randomLC
            prototypes random

traits random defines the abstract behavior of random number generators. A random number generator can be used to generate random booleans, integers, floats, characters or strings. traits randomLC defines a concrete specialization based on a simple linear congruence algorithm. For convenience, the prototype for randomLC is “random,” not “randomLC”.

Modules: random

4.4.2. Time

clonable
    time

A time object represents a date and time (to the nearest millisecond) since midnight GMT on January 1, 1970. The message current returns a new time object containing the current time. Two times can be compared using the standard comparison operators. One time can be subtracted from another to produce a value in milliseconds. An offset in milliseconds can be added or subtracted from a time object to produce a new time object. However, it is an error to add two time objects together.

Modules: time