Sunday 31 January 2016

X++ in AX7: Const keyword

In AX7 X++ now supports the const keyword. Semantically it is identical to const in C#.
In short; it allows you to define members on a class and variables in a method that can only be initialized during the declaration. The compiler will replace references to these constants with the literal value. In other words, the constant value must be known at compile time.


This is a killer feature! It replaces most use cases of macros.


void constsAreCool()
{
    #define.magicNumber("AX 2012");
    const str MagicNumber = "AX7";
    info(#magicNumber);
    info(MagicNumber);
}  





There are many benefits:
  1. IntelliSense in the editor.
  2. Support for "Go to definition" in the editor.
  3. Full control of the type for the constant.
  4. Faster compilation – macros are notorious hard for the compiler to handle.
  5. None of the macro idiosyncrasies – like the ability to redefine/override.
Now when you couple this with public and static members, then you can create classes with constants to replace macro libraries.


static class TimeConstants
{
    static const public int DaysPerWeek = 7;
    static const public int HoursPerDay = 24;
    static const public int HoursPerWeek = TimeConstants::DaysPerWeek * TimeConstants::HoursPerDay;
}  




It is best practice to use PascalCasing when naming const variables, regardless of if they are private, protected or public.



Notice how the constants in the class are referenced:
TimeConstants::HoursPerWeek  


This is much clearer than macros:
#TimeConstants
int x = #HoursPerWeek  



For example; you are no longer in doubt where the definition is coming from.

No comments:

Post a Comment