issue #335 review changes
This commit is contained in:
parent
80ff7bb217
commit
81e8d354a9
@ -17,7 +17,7 @@ together step by step. Binding functions can be described as passing one's outpu
|
||||
basing on the 'same type' contract. Formally, monad consists of a type constructor M and two
|
||||
operations:
|
||||
bind - that takes monadic object and a function from plain object to monadic value and returns monadic value
|
||||
return - that takse plain type object and returns this object wrapped in a monadic value.
|
||||
return - that takes plain type object and returns this object wrapped in a monadic value.
|
||||
|
||||

|
||||
|
||||
|
@ -1,7 +1,23 @@
|
||||
package com.iluwatar.monad;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
* The Monad pattern defines a monad structure, that enables chaining operations
|
||||
* in pipelines and processing data step by step.
|
||||
* Formally, monad consists of a type constructor M and two operations:
|
||||
* <br>bind - that takes monadic object and a function from plain object to the
|
||||
* monadic value and returns monadic value.
|
||||
* <br>return - that takes plain type object and returns this object wrapped in a monadic value.
|
||||
* <p>
|
||||
* In the given example, the Monad pattern is represented as a {@link Validator} that takes an instance
|
||||
* of a plain object with {@link Validator#of(Object)}
|
||||
* and validates it {@link Validator#validate(Function, Predicate, String)} against given predicates.
|
||||
* <p>As a validation result {@link Validator#get()} it either returns valid object {@link Validator#t}
|
||||
* or throws a list of exceptions {@link Validator#exceptions} collected during validation.
|
||||
*/
|
||||
public class App {
|
||||
|
||||
/**
|
||||
|
@ -24,7 +24,7 @@ public class MonadTest {
|
||||
public void testForInvalidAge() {
|
||||
thrown.expect(IllegalStateException.class);
|
||||
User john = new User("John", 17, Sex.MALE, "john@qwe.bar");
|
||||
Validator.of(tom).validate(User::getName, Objects::nonNull, "name cannot be null")
|
||||
Validator.of(john).validate(User::getName, Objects::nonNull, "name cannot be null")
|
||||
.validate(User::getAge, age -> age > 21, "user is underaged")
|
||||
.get();
|
||||
}
|
||||
@ -32,11 +32,11 @@ public class MonadTest {
|
||||
@Test
|
||||
public void testForValid() {
|
||||
User sarah = new User("Sarah", 42, Sex.FEMALE, "sarah@det.org");
|
||||
User validated = Validator.of(tom).validate(User::getName, Objects::nonNull, "name cannot be null")
|
||||
User validated = Validator.of(sarah).validate(User::getName, Objects::nonNull, "name cannot be null")
|
||||
.validate(User::getAge, age -> age > 21, "user is underaged")
|
||||
.validate(User::getSex, sex -> sex == Sex.FEMALE, "user is not female")
|
||||
.validate(User::getEmail, email -> email.contains("@"), "email does not contain @ sign")
|
||||
.get();
|
||||
Assert.assertSame(validated, tom);
|
||||
Assert.assertSame(validated, sarah);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user