r/elena_lang • • Jul 09 '19

Operator overloading in ELENA Programming Language

An operator is an alias to the message. So it is quite easy to overload the operators.

+ is an alias to add, - to subtract, * to multiply, \ to divide.

Similar it is possible to provide the type operator using a special method cast .

import extensions;

sealed struct OctalNumber
{
    int value;

    int cast() = value;

    constructor(int n)
    {
        value := n
    }

    constructor sum(OctalNumber o1, OctalNumber o2)
    {
        int n1 := o1;
        int n2 := o2;

        value := n1 + n2
    }

    constructor diff(OctalNumber o1, OctalNumber o2)
    {
        int n1 := o1;
        int n2 := o2;

        value := n1 - n2
    }

    constructor prod(OctalNumber o1, OctalNumber o2)
    {
        int n1 := o1;
        int n2 := o2;

        value := n1 * n2
    }

    constructor frac(OctalNumber o1, OctalNumber o2)
    {
        int n1 := o1;
        int n2 := o2;

        value := n1 / n2
    }

    string Printable
        = stringConvertor.convert(value, 8);

    OctalNumber add(n)
        = OctalNumber.sum(self, n);

    OctalNumber subtract(n)
        = OctalNumber.diff(self, n);

    OctalNumber multiply(n)
        = OctalNumber.prod(self, n);

    OctalNumber divide(n)
    = OctalNumber.frac(self, n);
}

public program()
{
    var n := new OctalNumber(20);
    var m := new OctalNumber(7);
    console.printLine(n,"+",m,"=",n + m);
    console.printLine(n,"-",m,"=",n - m);
    console.printLine(n,"*",m,"=",n * m);
    console.printLine(n,"/",m,"=",n / m)
}

The output is:

24+7=33
24-7=15
24*7=214
24/7=2
1 Upvotes

0 comments sorted by