blob: 153dcc5c9683aa4eebd0d14bf85ea3565e824a9c [file] [log] [blame]
//////////////////////
* Copyright (c) 2007-2012, Niclas Hedhman. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
//////////////////////
[[core-functional,Function]]
= Core Functional API =
[devstatus]
--------------
source=core/functional/dev-status.xml
--------------
The Zest™ Core Functional API is a generic package to work with Iterables in a "functional programming language" style.
This package is completely independent of everything else in Zest™ and may be used on its own in any kind of environment
such as Spring or Java EE applications.
include::../../build/docs/buildinfo/artifact.txt[]
== First Example ==
Let's say that you have an Iterable of Integers and you want to sum them all up. Most people would create a loop and
sum it all up in something like this;
[snippet,java]
-----------
source=core/functional/src/test/java/org/apache/zest/functional/docsupport/FunctionalDocs.java
tag=func1
-----------
With the Zest™ Core Functional API, you go about it in a different way. The code ends up looking like this;
[snippet,java]
-----------
source=core/functional/src/test/java/org/apache/zest/functional/docsupport/FunctionalDocs.java
tag=func2
-----------
And this is just the tip of the iceberg.
== The Big Picture ==
The Zest™ Core Functional API are divided a handful of powerful concepts, especially when used together;
* *Iterables* - many methods to deal with Iterable data, so that the loops in your programs can largely be removed.
* *Functions* - f(x) and f(x,y) are well-know from mathematics and used in functional programming languages. Zest™ is
not capable of introducing lambda calculus due to limitations in Java itself, but we can simulate a lot to allow
people to create more readable code.
* *Specification* - A simple concept to define the bounds of data. This is used for filtering, query and many other
higher level abstractions.
* *Visitor* pattern - A way to be handed the items in a collection, without having the loops. This could be for
end result handling, distribution of intermediary values, and many other things.
== Specification ==
TODO
== Function ==
TODO
== Visitor Pattern ==
TODO
== Iterables ==
TODO