blob: eb6dbb60b6cbfd213fb00e69f25fc1fdee1824bf [file]
//////////////////////
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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