Sidef implements three kinds of constants: const, define and enum.


The common way of declaring constants in Sidef, is by using the const keyword:

const pi = 3.14
say pi                 # prints: 3.14
#pi = 3                # compile-time error: can't modify non-lvalue constant

This kind of constants are created dynamically at run-time, but cannot be changed during the execution of the program.

When declared inside a class or a function, the constant is created and initialized dynamically, as illustrated in the following example:

func f(a) {
    const x = a          # created dynamically at each function call
    return (x + 2)

say f(40)       #=> 42
say f(50)       #=> 52


This keyword will define a compile-time evaluated constant and will point directly to the object at which it evaluated to.

define PHI =   (1.25.sqrt + 0.5)
define IHP = (-(1.25.sqrt - 0.5))

say (PHI**7 - IHP**7 / PHI-IHP)

This type of constants are the most efficient ones.


The enum keyword will automatically declare and assign a list of constants with ascending numeric values (starting from 0):

enum |Black, White|
say Black             # prints: 0
say White             # prints: 1

Alternatively, we have the possibility for specifying an initial value, which will get incremented after each declaration, by calling the method .inc().

enum |α="a", β|
say α             # prints: 'a'
say β             # prints: 'b'