= For Expression = The '''for''' expression enables looping in expressions and results in a list with the results. {{{ for in [where ] get for in where }}} The '''var''' may be declared in the expression or it can be a preexisting variable. The '''ienumerable''' is any expression that implements the '''IEnumerable''' interface. The '''condition''' is optional and is used to filter the list. Finally, the expr is evaluated for each individual item resulting in the elements of the final list. The '''get ''' part can be excluded in the presence of '''where''' in which case it is assumed to be '''get '''. Both '''ienumerable''' and the resulting list may be empty. The resulting list is always newly created. The type of the list is '''List''' where T is the type of '''expr'''. There is no requirement that the type of expr be the same as the type of what the '''ienumerable''' contains. If the '''for''' expression is part of a more complex expression—especially if it is the beginning of one—then put parenthesis around it to prevent the get portion of the grammar from consuming the rest of the complex expression. See below for an example. There is also a statement version of the for loop. {{{ #!cobra # Example 1 t = for x in [1, 2, 3] get x*x # type of `x` is int, type of `t` is List assert t.count==3 assert t[0]==1 assert t[1]==4 assert t[2]==9 # Example 2: Explicit variable typing names = for name as String in provider.names get name.toLower # Example 3: Grouping with parens assert (for s in ['aa', 'bbbb', 'cccccc'] get s.length) == [2, 4, 6] # not needed in this case: assert [2, 4, 6] == for s in ['aa', 'bbbb', 'cccccc'] get s.length # Example 3: with `where` names = for name in names where name.trim.length get name.trim # Example 4: `get x` is implied t = for x in numbers where x > 0 }}}