Bindable Properties
Jancy supports bindable properties which automatically notify subscribers when they change. Bindable properties play crucial role in the reactive programming.
Simple bindable property declaration syntax:
int autoget bindable property g_simpleProp;
g_simpleProp.set(int x) {
if (x == m_value)
return;
m_value = x;
m_onChanged(); // name of compiler-generated event is 'm_onChanged'
}
onPropChanged() {
// ...
}
int main() {
// ...
bindingof(g_simpleProp) += onPropChanged;
g_simpleProp = 100; // onPropChanged will get called
g_simpleProp = 100; // onPropChanged will NOT get called
// ...
}
Similar property declared using full syntax:
property g_prop {
autoget int m_x; // 'autoget' field implicitly makes property 'autoget'
bindable event m_e(); //'bindable' event implicitly makes property 'bindable'
set(int x) {
m_x = x;
m_e();
}
}
Bindable Data
Jancy offers fully compiler-generated properties: getter, setter, back-up field and on-change event are all generated by the Jancy compiler. These degenerate properties are designed to track data changes: they can be used as variables or fields that automatically notify subscribers when they change.
int bindable g_data;
onDataChanged() {
// ...
}
int main() {
// ...
bindingof(g_data) += onDataChanged;
g_data = 100; // onDataChanged will get called
g_data = 100; // onDataChanged will NOT get called
// ...
}