NX supports the concept of properties, which can be used to configure instance variables of a class (or an object) at creation or run time and to add standardized accessor methods.

package req nx

In a first step, we create a class named Foo with three properties, x, y and z.

% nx::Class create Foo {
    :property x
    :property -accessor public y
    :property -incremental z:0..n
}
::Foo

By defining something as a property, it will be possible (1) to specify a value for the same-named instance variable at creation time, (2) to modify the instance variable via configure, and (3) to access the value of this instance variable from the via the cget method.

% Foo create f1 -x 1
::f1

% f1 cget -x
1
% f1 configure -x 2
% f1 cget -x
2

When a property is defined with an accessor (see property y), then an accessor method is added with the specified protection level. The accessor method has the same name as the property. All accessor method can be used to set and get the value of the instance variable.

% f1 y set 3
3
% f1 y get
3

Certainly, the methods configure and cget can be used also for these properties as in the example with property x.

% f1 cget -y
3

It is possible to add more and application specific subcommands to the accessor method, but this is not covered in this chapter. However, when a property is defined as incremental it uses this feature to extend the sub-methods.

When a property is defined as incremental, a public accessor and multivalued are assumed. By specifying incremental the sub-commands add and delete are provided to the accessor, which allows one to add or delete values to a "multivalued" property incrementally (see property z). The term incrementally means here that one can e.g. add values to the list without the need to get the values of the list in a first step, to lappend the value, and to set the value again. The add sub-command is similar to push in MongoDB or LPUSH in redis.

% f1 z add 1
1
% f1 z add 2
2 1
% f1 z add 3 end
2 1 3

% f1 z get
2 1 3

The submethod delete can be used to delete a certain value from the list of value.

% f1 z delete 2
1 3