Functional-style if-then-else
Find a file
2018-07-28 17:11:37 +01:00
.travis-support@b8593e541b .travis-support: added 2017-08-26 19:23:52 +01:00
src Value.where(Condition,...), Value.not() added 2018-07-28 17:11:37 +01:00
.gitignore Initial commit 2017-04-21 10:55:11 +01:00
.gitmodules .travis-support: added 2017-08-26 19:23:52 +01:00
.travis.yml travis: batch mode and update snapshots 2018-02-24 22:02:13 +00:00
CHANGELOG Condition.{and(Condition),or(Condition),not()}: added 2018-07-25 13:16:56 +01:00
codesigning.asc.enc codesigning.asc.enc: added 2017-08-27 07:00:00 +01:00
Jenkinsfile.groovy jenkins: update and switch to trunk-based development 2018-07-18 19:59:22 +01:00
LICENSE.txt Initial commit 2017-04-21 10:55:11 +01:00
lombok.config lombok.config: added to prevent generated annotation 2018-03-04 18:18:00 +00:00
pom.xml Add otherwiseThrow(Exception) 2018-07-18 22:44:45 +01:00
README.adoc Value: secondary clauses now use Supplier's to enable short circuiting 2018-03-13 17:53:16 +00:00

# Conditional

image:https://img.shields.io/github/release/kemitix/conditional.svg["Releases", link="https://github.com/kemitix/conditional/releases"]
image:https://api.codacy.com/project/badge/Grade/1188742d676e457da91415d2b3a5faf1["Codacy code quality", link="https://www.codacy.com/app/kemitix/conditional"]
image:https://travis-ci.org/kemitix/conditional.svg?branch=master["Build Status", link="https://travis-ci.org/kemitix/conditional"]
image:https://coveralls.io/repos/github/kemitix/conditional/badge.svg?branch=master["Coverage Status", link="https://coveralls.io/github/kemitix/conditional?branch=master"]

* link:#condition[Condition]
* link:#value[Value]

## Condition

If-then-else in a functional-style.

### if-then

[[source,java]]
----
if (isTrue()) {
    doSomething();
}
----

[[source,java]]
----
Condition.where(isTrue())
         .then(() -> doSomething());
----

### if-then-else

[[source,java]]
----
if (isTrue()) {
    doSomething();
} else {
    doSomethingElse();
}
----

[[source,java]]
----
Condition.where(isTrue())
         .then(() -> doSomething())
         .otherwise(() -> doSomethingElse());
----

### if-and-then-else

[[source,java]]
----
if (isTrue() && isAlsoTrue()) {
    doSomething();
} else {
    doSomethingElse();
}
----

[[source,java]]
----
Condition.where(isTrue())
         .and(() -> isAlsoTrue())
         .then(() -> doSomething())
         .otherwise(() -> doSomethingElse());
----

### if-or-then-else

[[source,java]]
----
if (isTrue() || alternativeIsTrue()) {
    doSomething();
} else {
    doSomethingElse();
}
----

[[source,java]]
----
Condition.where(isTrue())
         .or(() -> alternativeIsTrue())
         .then(() -> doSomething())
         .otherwise(() -> doSomethingElse());
----

### if-not-then-else

[[source,java]]
----
if (!isFalse()) {
    doSomething();
} else {
    doSomethingElse();
}
----

[[source,java]]
----
Condition.whereNot(isFalse())
         .then(() -> doSomething())
         .otherwise(() -> doSomethingElse());
----

### if-and-not-then-else

[[source,java]]
----
if (isTrue() || !isFalse()) {
    doSomething();
} else {
    doSomethingElse();
}
----

[[source,java]]
----
Condition.where(isTrue())
         .andNot(() -> isFalse())
         .then(() -> doSomething())
         .otherwise(() -> doSomethingElse());
----

### if-or-not-then-else

[[source,java]]
----
if (isFalse() || !isAlsoFalse()) {
    doSomething();
} else {
    doSomethingElse();
}
----

[[source,java]]
----
Condition.where(isFalse())
         .orNot(() -> isAlsoFalse())
         .then(() -> doSomething())
         .otherwise(() -> doSomethingElse());
----

### if-then-else-if

[[source,java]]
----
if (isFalse()) {
    doSomething();
} else if (isTrue()) {
    doSomethingElse();
}
----

[[source,java]]
----
Condition.where(isFalse())
         .then(() -> doSomething())
         .otherwise(() -> isTrue())
         .then(() -> doSomethingElse());
----

### if-then-if-then

[[source,java]]
----
if (isTrue()) {
    doSomething();
    if (isAlsoTrue()) {
        doSomethingElse();
    }
}
----

[[source,java]]
----
Condition.where(isTrue())
         .then(() -> doSomething())
         .and(() -> isAlsoTrue())
         .then(() -> doSomethingElse());
----

## Value

Values from an if-then-else in a functional-style.

Functional, and verbose, alternative to the ternary operator (`?:`).

### if-then-else

[[source,java]]
----
String result;
if (isTrue()) {
    result = TRUE;
} else {
    result = FALSE;
}
----

[[source,java]]
----
String result = isTrue() ? TRUE : FALSE;
----

[[source,java]]
----
final String result = Value.where(isTrue(), () -> TRUE, () -> FALSE);
----

[[source,java]]
----
final Optional<String> result = Value.where(isTrue(), () -> TRUE);
----

[[source,java]]
----
final String result = Value.<String>where(isTrue())
                           .then(() -> TRUE)
                           .otherwise(() -> FALSE);
----

### if-not-then-else

[[source,java]]
----
String result;
if (!isTrue()) {
    result = TRUE;
} else {
    result = FALSE;
}
----

[[source,java]]
----
final String result = Value.<String>whereNot(isTrue())
                           .then(() -> TRUE)
                           .otherwise(() -> FALSE);
----

### if-and-then-else

[[source,java]]
----
String result;
if (isTrue() && alternativeIsTrue()) {
    result = TRUE;
} else {
    result = FALSE;
}
----

[[source,java]]
----
final String result = Value.<String>where(isTrue())
                           .and(() -> alternativeIsTrue())
                           .then(() -> TRUE)
                           .otherwise(() -> FALSE);
----

### if-and-not-then-else

[[source,java]]
----
String result;
if (isTrue() && !alternativeIsFalse()) {
    result = TRUE;
} else {
    result = FALSE;
}
----

[[source,java]]
----
final String result = Value.<String>where(isTrue())
                           .andNot(() -> alternativeIsFalse())
                           .then(() -> TRUE)
                           .otherwise(() -> FALSE);
----

### if-or-then-else

[[source,java]]
----
String result;
if (isTrue() || alternativeIsTrue()) {
    result = TRUE;
} else {
    result = FALSE;
}
----

[[source,java]]
----
final String result = Value.<String>where(isTrue())
                           .or(() -> alternativeIsTrue())
                           .then(() -> TRUE)
                           .otherwise(() -> FALSE);
----

### if-or-not-then-else

[[source,java]]
----
String result;
if (isTrue() || !isFalse()) {
    result = TRUE;
} else {
    result = FALSE;
}
----

[[source,java]]
----
final String result = Value.<String>where(isTrue())
                           .orNot(() -> isFalse())
                           .then(() -> TRUE)
                           .otherwise(() -> FALSE);
----

### if-then

[[source,java]]
-----
Optional<String> result;
if (isTrue()) {
    result = Optional.of(TRUE);
} else {
    result = Optional.empty();
}
-----

[[source,java]]
-----
final Optional<String> result = Value.<String>where(isTrue())
                                     .then(() -> TRUE)
                                     .optional();
-----