.. _pages/property_features#property_features:

Property features summarized
****************************

.. note::

    The chapter gives you an compact but extensive overview of the features offered by qooxdoo's property system.
    Please refer to :doc:`defining_properties` for an explanation of how to define and use properties.

.. _pages/property_features#value_checks:

Value checks
============
  
  * Built-in types for most common things
  * Runtime checks (development version only)
  * Instance checks by simply define the classname of the class to check for (always use an instanceof operation - a real classname is not available anymore)
  * Custom check method by simply attaching a function to the declaration
  * Custom check defined by a string which will be compiled into the resulting setters (faster than the above variant)
  * Define multiple possible (primitive) values using an array

.. _pages/property_features#validation:

Validation
==========

  * Validation in both development and build version
  * Predefined validators for default validation
  * Throws a special validation error

.. _pages/property_features#advanced_value_handling:

Advanced value handling
=======================

  * Multi value support. Support to store different values for init, inheritance, style and user including a automatic fallback mechanism between them.
  * Inheritance support. Inheritance of properties defined by a parent widget e.g. inherit enabled from a groupbox to all form elements. Uses the inheritance if the computed value would be ``undefined`` or explicitly set to ``"inherit"``. The getter simply returns ``"inherit"`` for inheritable properties which are otherwise unset.
  * Blocks unintentionally ``undefined`` values in all setters with an exception. To reset a value one must use the ``reset`` or ``unstyle`` method which are available too.
  * Overriding of a value by setting a property explicitly to ``null``
  * Properties must be explicitly configured as ``"nullable"`` (like in .Net). The default is ``false`` which means that incoming ``null`` values will result in an exception.
  * Accessing nullable properties with ``undefined`` values will result in a normalization to ``null``.

.. _pages/property_features#convenience:

Convenience
===========

  * Convenient toggle method for boolean properties

.. _pages/property_features#notification:

Notification
============

  * Support for a custom apply routine
  * Event firing with a custom named event

.. _pages/property_features#initialization:

Initialization
==============

qooxdoo automatically correctly initializes properties. This is true for both, properties which have defined an ``init`` value and also for the other properties which are ``nullable``. This means that after you have created an instance the properties correctly reflect the applied value. Default values assigned by ``init`` also execute the configured ``apply`` methods and dispatch configured events to inform already added listeners. 

:doc:`property_behavior`

.. _pages/property_features#performance:

Performance
===========

Automatic optimization of all setters to the optimal highly-tuned result code. Impressive tailor made high performance setters are the result.

Please note that after the definition point of a property the setters are not yet available. Wrappers for them will be created with the first instance and the final code will be generated with the first use of such a setter. This first use will also automatically unwrap the property setter to directly use the generated one.