Operator For (Iteration)
Declares or defines operators used by a `For...Next` loop with user defined type variables
Syntax
`
{ Type | Class | Union } typename
Declare Operator For ()
Declare Operator For ( [ ByRef | ByVal ] stp As typename )
...
End { Type | Class | Union }
`
Usage
`
For iterator [ As typename ] = start_value To end_value [ Step step_value ]
[ ...statements... ]
Next
`
Parameters
`(including arguments)`
`typename`
name of the `Type`, `Class`, or `Union`
`stp`, `step_value`
a `typename` object used as an incremental value
`iterator`
a `typename` object used as an iterator
`end_value`
a `typename` object used as a loop-terminating value
`start_value`
a `typename` object used to copy construct or assign to the iterator initially
Description
`Operator For`, `Operator Next` and `Operator Step` can be overloaded in user-defined type definitions to allow objects of that type to be used as iterators and step values in `For...Next` loops.
As all non-static member procedures, they have passed a hidden `This` parameter that allows to access by reference to the iterator object in the code body of the 3 operators.
`Operator For` is called once after copy constructing or assigning to the iterator object, and allows the object to perform any additional initialization needed in preparation for the loop.
The first version of `Operator For` is used if no step value is given in the `For...Next` statement. If a step value is given, the second version is used and is passed the step value because eventual additional initialization may use it.
Advanced usage
The above description seems to imply that the 3 arguments `start_value`, `end_value`, and `step_value` must be of the same type as the `iterator` (this is the more obvious use), but it is not quite true:
- The `start_value`, `end_value`, and `step_value` arguments can be of any type (of different types among themselves and also of different types from the one of the `iterator`).
- The only constraint is that the `iterator` could be constructed (in case of local `iterator`) or assigned (in case of global `iterator`) from the `start_value` argument (because the `iterator` is implicitly constructed or assigned under the hood).
- Similarly the other parameters `end_value`, and `step_value` must be able to be converted into objects of the same type as the `iterator`.
Example
See the Operator Step examples.
Dialect Differences

- Only available in the -lang fb dialect.

See also

- `Operator Next`
- `Operator Step`
- `For...Next`