Skip to content

Commit

Permalink
Изменение интерфейса Condition
Browse files Browse the repository at this point in the history
  • Loading branch information
Bloogefest committed Jan 15, 2025
1 parent 8ef43cb commit 896c144
Showing 1 changed file with 78 additions and 70 deletions.
148 changes: 78 additions & 70 deletions function/src/main/java/com/sogeor/framework/function/Condition.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import com.sogeor.framework.annotation.Contract;
import com.sogeor.framework.annotation.NonNull;
import com.sogeor.framework.validation.NullValidationFault;
import com.sogeor.framework.validation.ValidationFault;
import com.sogeor.framework.validation.Validator;

Expand All @@ -32,12 +33,12 @@
public interface Condition<F extends Throwable> {

/**
* Создаёт условие (2) с методом {@linkplain #compute()}, возвращающим [1].
* Создаёт условие (1) с методом {@linkplain #compute()}, возвращающим {@code value}.
*
* @param value результат вычисления (1).
* @param <F> тип программного сбоя или неисправности, возникающей при неудачном вычислении [2].
* @param value результат вычисления.
* @param <F> тип программного сбоя или неисправности, возникающей при неудачном вычислении [1].
*
* @return [2].
* @return [1].
*
* @since 1.0.0-RC1
*/
Expand All @@ -47,14 +48,14 @@ public interface Condition<F extends Throwable> {
}

/**
* Возвращает [1].
* Возвращает {@code condition}.
*
* @param condition условие (1).
* @param <F> тип программного сбоя или неисправности, возникающей при неудачном вычислении [1].
* @param condition условие.
* @param <F> тип программного сбоя или неисправности, возникающей при неудачном вычислении {@code condition}.
*
* @return [1].
* @return {@code condition}.
*
* @apiNote Предназначен для удобного создания [1] на основе лямбда-выражений.
* @apiNote Предназначен для удобного создания {@code condition} на основе лямбда-выражения.
* @since 1.0.0-RC1
*/
@Contract("? -> 1")
Expand All @@ -63,20 +64,20 @@ public interface Condition<F extends Throwable> {
}

/**
* Вычисляет это условие (1) и возвращает результат (2) его вычисления.
* Вычисляет {1} и возвращает результат (2) его вычисления.
*
* @return [2].
*
* @throws ValidationFault неудачная валидация.
* @throws F неудачное вычисление [1].
* @throws F неудачное вычисление {1}.
* @since 1.0.0-RC1
*/
@Contract("-> ?")
boolean compute() throws ValidationFault, F;

/**
* Создаёт условие (1) с методом {@linkplain #compute()}, получающим от метода
* {@linkplain #compute() this.compute()} результат вычисления и возвращающим его инверсию.
* {@linkplain #compute() this.compute()} результат (2) вычисления и возвращающим инверсию [2].
*
* @return [1].
*
Expand All @@ -88,129 +89,136 @@ public interface Condition<F extends Throwable> {
}

/**
* Создаёт условие (2) с методом {@linkplain #compute()}, получающим от методов
* {@linkplain #compute() this.compute()} и {@linkplain #compute() condition.compute()} результаты вычислений и
* возвращающим их конъюнкцию.
* Если {@code this == condition}, то возвращает {@code this}, в противном случае создаёт условие (1) с методом
* {@linkplain #compute()}, получающим от методов {@linkplain #compute() this.compute()} и
* {@linkplain #compute() condition.compute()} результаты (2) вычислений и возвращающим конъюнкцию (2).
*
* @param condition условие (1).
* @param condition условие.
*
* @return [2].
* @return {@code this} или [1].
*
* @throws ValidationFault неудачная валидация [1].
* @throws NullValidationFault {@code condition} не должно быть {@code null}.
* @since 1.0.0-RC1
*/
@Contract("!null -> new; null -> fault")
default @NonNull Condition<F> and(final @NonNull Condition<? extends F> condition) throws ValidationFault {
@Contract("this -> this; !null -> new; null -> fault")
default @NonNull Condition<F> and(final @NonNull Condition<? extends F> condition) throws NullValidationFault {
Validator.nonNull(condition, "The passed condition");
return () -> compute() && condition.compute();
return this == condition ? this : () -> compute() && condition.compute();
}

/**
* Создаёт условие (2) с методом {@linkplain #compute()}, получающим от методов
* {@linkplain #compute() this.compute()} и {@linkplain #compute() condition.compute()} результаты вычислений и
* возвращающим их штрих Шеффера.
* Если {@code this == condition}, то создаёт условие (1) с методом {@linkplain #compute()}, получающим от метода
* {@linkplain #compute() this.compute()} результат (2) вычисления и возвращающим инверсию [2], в противном случае
* создаёт условие (3) с методом {@linkplain #compute()}, получающим от методов
* {@linkplain #compute() this.compute()} и {@linkplain #compute() condition.compute()} результаты (4) вычислений и
* возвращающим штрих Шеффера [4].
*
* @param condition условие (1).
* @param condition условие.
*
* @return [2].
* @return [1] или [3].
*
* @throws ValidationFault неудачная валидация [1].
* @throws NullValidationFault {@code condition} не должно быть {@code null}.
* @since 1.0.0-RC1
*/
@Contract("!null -> new; null -> fault")
default @NonNull Condition<F> nand(final @NonNull Condition<? extends F> condition) throws ValidationFault {
default @NonNull Condition<F> nand(final @NonNull Condition<? extends F> condition) throws NullValidationFault {
Validator.nonNull(condition, "The passed condition");
return () -> !(compute() && condition.compute());
return this == condition ? () -> !compute() : () -> !(compute() && condition.compute());
}

/**
* Создаёт условие (2) с методом {@linkplain #compute()}, получающим от методов
* {@linkplain #compute() this.compute()} и {@linkplain #compute() condition.compute()} результаты вычислений и
* возвращающим их мягкую дизъюнкцию.
* Если {@code this == condition}, то возвращает {@code this}, в противном случае создаёт условие (1) с методом
* {@linkplain #compute()}, получающим от методов {@linkplain #compute() this.compute()} и
* {@linkplain #compute() condition.compute()} результаты (2) вычислений и возвращающим мягкую дизъюнкцию [2].
*
* @param condition условие (1).
* @param condition условие.
*
* @return [2].
* @return {@code this} или [1].
*
* @throws ValidationFault неудачная валидация [1].
* @throws NullValidationFault {@code condition} не должно быть {@code null}.
* @since 1.0.0-RC1
*/
@Contract("!null -> new; null -> fault")
default @NonNull Condition<F> or(final @NonNull Condition<? extends F> condition) throws ValidationFault {
@Contract("this -> this; !null -> new; null -> fault")
default @NonNull Condition<F> or(final @NonNull Condition<? extends F> condition) throws NullValidationFault {
Validator.nonNull(condition, "The passed condition");
return () -> compute() || condition.compute();
return this == condition ? this : () -> compute() || condition.compute();
}

/**
* Создаёт условие (2) с методом {@linkplain #compute()}, получающим от методов
* {@linkplain #compute() this.compute()} и {@linkplain #compute() condition.compute()} результаты вычислений и
* возвращающим их стрелку Пирса.
* Если {@code this == condition}, то создаёт условие (1) с методом {@linkplain #compute()}, получающим от метода
* {@linkplain #compute() this.compute()} результат (2) вычисления и возвращающим инверсию [2], в противном случае
* создаёт условие (3) с методом {@linkplain #compute()}, получающим от методов
* {@linkplain #compute() this.compute()} и {@linkplain #compute() condition.compute()} результаты (4) вычислений и
* возвращающим стрелку Пирса [4].
*
* @param condition условие (1).
* @param condition условие.
*
* @return [2].
* @return [1] или [3].
*
* @throws ValidationFault неудачная валидация [1].
* @throws NullValidationFault {@code condition} не должно быть {@code null}.
* @since 1.0.0-RC1
*/
@Contract("!null -> new; null -> fault")
default @NonNull Condition<F> nor(final @NonNull Condition<? extends F> condition) throws ValidationFault {
default @NonNull Condition<F> nor(final @NonNull Condition<? extends F> condition) throws NullValidationFault {
Validator.nonNull(condition, "The passed condition");
return () -> !(compute() || condition.compute());
return this == condition ? () -> !compute() : () -> !(compute() || condition.compute());
}

/**
* Создаёт условие (2) с методом {@linkplain #compute()}, получающим от методов
* {@linkplain #compute() this.compute()} и {@linkplain #compute() condition.compute()} результаты вычислений и
* возвращающим их эквивалентность.
* Если {@code this == condition}, то создаёт условие (1) с методом {@linkplain #compute()}, возвращающим
* {@code true}, в противном случае создаёт условие (2) с методом {@linkplain #compute()}, получающим от методов
* {@linkplain #compute() this.compute()} и {@linkplain #compute() condition.compute()} результаты (3) вычислений и
* возвращающим эквивалентность [3].
*
* @param condition условие (1).
* @param condition условие.
*
* @return [2].
* @return [1] или [2].
*
* @throws ValidationFault неудачная валидация [1].
* @throws NullValidationFault {@code condition} не должно быть {@code null}.
* @since 1.0.0-RC1
*/
@Contract("!null -> new; null -> fault")
default @NonNull Condition<F> xnor(final @NonNull Condition<? extends F> condition) throws ValidationFault {
default @NonNull Condition<F> xnor(final @NonNull Condition<? extends F> condition) throws NullValidationFault {
Validator.nonNull(condition, "The passed condition");
return () -> compute() == condition.compute();
return this == condition ? () -> true : () -> compute() == condition.compute();
}

/**
* Создаёт условие (2) с методом {@linkplain #compute()}, получающим от методов
* {@linkplain #compute() this.compute()} и {@linkplain #compute() condition.compute()} результаты вычислений и
* возвращающим их строгую дизъюнкцию.
* Если {@code this == condition}, то создаёт условие (1) с методом {@linkplain #compute()}, возвращающим
* {@code false}, в противном случае создаёт условие (2) с методом {@linkplain #compute()}, получающим от методов
* {@linkplain #compute() this.compute()} и {@linkplain #compute() condition.compute()} результаты (3) вычислений и
* возвращающим строгую дизъюнкцию [3].
*
* @param condition условие (1).
* @param condition условие.
*
* @return [2].
* @return [1] или [2].
*
* @throws ValidationFault неудачная валидация [1].
* @throws NullValidationFault {@code condition} не должно быть {@code null}.
* @since 1.0.0-RC1
*/
@Contract("!null -> new; null -> fault")
default @NonNull Condition<F> xor(final @NonNull Condition<? extends F> condition) throws ValidationFault {
default @NonNull Condition<F> xor(final @NonNull Condition<? extends F> condition) throws NullValidationFault {
Validator.nonNull(condition, "The passed condition");
return () -> compute() ^ condition.compute();
return this == condition ? () -> false : () -> compute() ^ condition.compute();
}

/**
* Создаёт условие (2) с методом {@linkplain #compute()}, получающим от методов
* {@linkplain #compute() this.compute()} и {@linkplain #compute() condition.compute()} результаты вычислений и
* возвращающим их импликацию.
* Если {@code this == condition}, то создаёт условие (1) с методом {@linkplain #compute()}, возвращающим
* {@code true}, в противном случае создаёт условие (2) с методом {@linkplain #compute()}, получающим от методов
* {@linkplain #compute() this.compute()} и {@linkplain #compute() condition.compute()} результаты (3) вычислений и
* возвращающим импликацию [3].
*
* @param condition условие (1).
* @param condition условие.
*
* @return [2].
* @return [1] или [2].
*
* @throws ValidationFault неудачная валидация [1].
* @throws NullValidationFault {@code condition} не должно быть {@code null}.
* @since 1.0.0-RC1
*/
@Contract("!null -> new; null -> fault")
default @NonNull Condition<F> imply(final @NonNull Condition<? extends F> condition) throws ValidationFault {
default @NonNull Condition<F> imply(final @NonNull Condition<? extends F> condition) throws NullValidationFault {
Validator.nonNull(condition, "The passed condition");
return () -> !compute() || condition.compute();
return this == condition ? () -> true : () -> !compute() || condition.compute();
}

}

0 comments on commit 896c144

Please sign in to comment.