TResultPair<S, F>
A classe TResultPair<S, F>
é uma classe genérica que desempenha um papel significativo na programação funcional. Ela é projetada para representar resultados de operações que podem ter êxito (sucesso) ou falhar (failure), encapsulando dois tipos genéricos, S
para sucesso e F
para falha. A seguir, são explicados os recursos e a importância dessa classe:
Importância na Programação Funcional:
A classe TResultPair
é uma ferramenta valiosa para a programação funcional, pois permite lidar com resultados de operações de forma expressiva e sem a necessidade de exceções. Ela promove a imutabilidade, o tratamento controlado de erros e a composição de funções.
Recursos e Utilidades:
class function New: TResultPair<S, F>; static;
Cria uma nova instância da classe
TResultPair
.Útil para iniciar uma instância vazia.
procedure Dispose;
Libera recursos e destrói a instância.
Importante para a gestão de recursos e coleta de lixo.
function Success(const ASuccess: S): TResultPair<S, F>;
Define o resultado como um sucesso e atribui o valor de sucesso.
Útil para criar um
TResultPair
com êxito.
function Failure(const AFailure: F): TResultPair<S, F>;
Define o resultado como uma falha e atribui o valor de falha.
Útil para criar um
TResultPair
com falha.
function TryException(const ASuccessProc: TProc<S>; const AFailureProc: TProc<F>): TResultPair<S, F>;
Tenta executar uma operação de sucesso ou falha com tratamento de exceções.
Útil para encapsular operações que podem lançar exceções.
function Fold<R>(const AFunc: TFunc<S, F, R>): R;
Aplica uma função para transformar o valor de sucesso ou falha em um resultado de tipo
R
.Útil para extrair valores de sucesso ou falha de forma controlada.
function When<R>(const ASuccessFunc: TFunc<S, R>; const AFailureFunc: TFunc<F, R>): R;
Aplica funções condicionais com base no resultado.
Útil para realizar diferentes ações com base no resultado.
function Map<R>(const ASuccessFunc: TFunc<S, R>): TResultPair<S, F>;
Aplica uma função de mapeamento ao valor de sucesso, retornando um novo
TResultPair
com o resultado do mapeamento.Útil para transformar o valor de sucesso.
function MapFailure<R>(const AFailureFunc: TFunc<F, R>): TResultPair<S, F>;
Aplica uma função de mapeamento ao valor de falha, retornando um novo
TResultPair
com o resultado do mapeamento.Útil para transformar o valor de falha.
function FlatMap<R>(const ASuccessFunc: TFunc<S, R>): TResultPair<S, F>;
Aplica uma função de mapeamento ao valor de sucesso e retorna um novo
TResultPair
com o resultado do mapeamento, que pode ser outroTResultPair
.Útil para transformações complexas de resultados.
function FlatMapFailure<R>(const AFailureFunc: TFunc<F, R>): TResultPair<S, F>;
Aplica uma função de mapeamento ao valor de falha e retorna um novo
TResultPair
com o resultado do mapeamento, que pode ser outroTResultPair
.Útil para transformações complexas de resultados.
function Pure(const ASuccess: S): TResultPair<S, F>;
Cria um
TResultPair
com um valor de sucesso, preservando qualquer falha existente.
function PureFailure(const AFailure: F): TResultPair<S, F>;
Cria um
TResultPair
com um valor de falha, preservando qualquer sucesso existente.
function Swap: TResultPair<F, S>;
Inverte os valores de sucesso e falha.
Útil para trocar entre êxito e falha.
function Recover<R>(const AFailureFunc: TFunc<F, R>): TResultPair<R, S>;
Aplica uma função de recuperação à falha, retornando um novo
TResultPair
com êxito.Útil para recuperar de falhas.
function GetSuccessOrElse(const ASuccessFunc: TFunc<S, S>): S;
Obtém o valor de sucesso ou aplica uma função de fallback se for uma falha.
Útil para obter o valor de sucesso com tratamento de falhas.
function GetSuccessOrException: S;
Obtém o valor de sucesso ou lança uma exceção se for uma falha.
Útil para obter o valor de sucesso com tratamento de exceções.
function GetSuccessOrDefault: S; overload;
Obtém o valor de sucesso ou o valor padrão se for uma falha (sobrecarga sem parâmetros).
function GetSuccessOrDefault(const ADefault: S): S; overload;
Obtém o valor
de sucesso ou um valor padrão se for uma falha (sobrecarga com parâmetros).
function GetFailureOrElse(const AFailureFunc: TFunc<F, F>): F;
Obtém o valor de falha ou aplica uma função de fallback se for um sucesso.
Útil para obter o valor de falha com tratamento de sucesso.
function GetFailureOrException: F;
Obtém o valor de falha ou lança uma exceção se for um sucesso.
Útil para obter o valor de falha com tratamento de exceções.
function GetFailureOrDefault: F; overload;
Obtém o valor de falha ou o valor padrão se for um sucesso (sobrecarga sem parâmetros).
function GetFailureOrDefault(const ADefault: F): F; overload;
Obtém o valor de falha ou um valor padrão se for um sucesso (sobrecarga com parâmetros).
function isSuccess: boolean;
Verifica se é um sucesso.
function isFailure: boolean;
Verifica se é uma falha.
function ValueSuccess: S;
Obtém o valor de sucesso.
function ValueFailure: F;
Obtém o valor de falha.
function Exec(const AFunc: TFuncExec): TResultPair<S, F>;
Executa uma função com base no resultado.
Útil para executar operações customizadas com base no resultado.
function Ok(const ASuccess: S): TResultPair<S, F>;
Define o resultado como sucesso, preservando o valor de sucesso ou falha existente.
Útil para marcar explicitamente um sucesso.
function Fail(const AFailure: F): TResultPair<S, F>;
Define o resultado como falha, preservando o valor de sucesso ou falha existente.
Útil para marcar explicitamente uma falha.
function ThenOf(const AFunc: TFuncOk): TResultPair<S, F>;
Executa uma função de sucesso, mantendo o resultado atual.
Útil para executar operações de sucesso encadeadas.
function ExceptOf(const AFunc: TFuncFail): TResultPair<S, F>;
Executa uma função de falha, mantendo o resultado atual.
Útil para executar operações de falha encadeadas.
function Return: TResultPair<S, F>;
Retorna o próprio objeto
TResultPair
.Útil para encadear operações de forma fluida.
Exemplo de uso 1
Exemplo de uso 2
Conclusão:
A classe TResultPair<S, F>
é uma ferramenta poderosa para lidar com resultados de operações de forma controlada e expressiva. Ela desempenha um papel significativo na programação funcional, promovendo a imutabilidade, o tratamento de erros controlado e a composição de funções. Ao documentar essa classe, é importante explicar cada método e sua utilidade, ilustrando sua importância em cenários reais de desenvolvimento.
Last updated