AnswerBun.com

O que são efeitos colaterais?

Stack Overflow em Português Asked by Barbetta on August 11, 2020

Estava lendo essa resposta e nela tem uma tabela que onde diz que programação funcional não possui efeitos colaterais e que OOP possui, isso me gerou duas dúvidas, sendo elas:

  • O que são esses efeitos colaterais?

  • Tem como evita-los em OOP?

Tabela:

inserir a descrição da imagem aqui

2 Answers

O efeito colateral é o fenômeno que interfere em uma situação além do esperado, que acontece algo por consequência do evento principal. Em computação é isso também, e usamos para dizer que um código afeta algo que está além dele. Isso ocorre quando algo não é autocontido, que falta encapsulamento (no sentido amplo da palavra, não no que normalmente é indevidamente usado em OOP). Em muitos casos falamos deles como contrativo de "efeito colateral escondido" e geralmente ele tem uma conotação negativa, já que é algo que afeta o ambiente externo sem que seja sua intenção.

Nesse contexto mostrado na pergunta é claro que significa isso, mas com uma especificidade maior. Ali indica que no funcional um código não altera estado externo a ele. Então ele pode ter estados locais e até alterá-los sem problema, ele pode receber estados externos, mas não pode alterar estes estados recebidos.

Se alterar um estado externo à uma função está gerando o efeito colateral. E não importa como vem esse estado esterno, pode ser por parâmetro normal, pode ser por parâmetro implícito (normalmente o this), ou pode ser porque este estado está visível globalmente, incluindo dado que vem de fora da aplicação. OOP praticamente força você fazer isso.

Mas receber um dado externo sem alterá-lo é algo normal e não causa efeito colateral. Alterar uma cópia local de um dado é tranquilo e "puro". Claro, há sempre um dificuldade local quando altera este estado, mas isso não é considerado efeito colateral por ser autocontido.

Alteração de estado é uma das coisas que mais criam problemas na computação, o ideal é evitá-lo tanto quanto possível, ou pelo menos limitá-lo a um escopo bem específico. Funções que não alteram estado externo são mais simples de escrever, entender e depurar, mas claro nem sempre isto é possível, e como tudo é trade-off, tentar fugir do efeito colateral exageradamente chega complicar mais ainda em muitos casos, por isso linguagens que tentam ser puras (onde dá) são muito complicadas para a maioria das pessoas. Por outro lado fortalece a ideia de alterar estado externo, um dos motivos que o paradigma é mais criticado. O que muitas vezes poderia ser só comunicação externa sem alteração de estado vira efeito colateral sempre.

Só lembrando que zero efeito colateral é impossível em qualquer código não trivial. E a programação funcional de quase todas linguagens evitam essa pureza a qualquer custo, apenas incentivam que ela seja assim.

É possível evitá-los em orientação a objeto, mas na verdade deixa de ser OO pelo menos naquele ponto :) Claro, tem métodos que não alteram estado do objeto que ele pertence ou objeto externo, então esse método não tem efeito colateral, mas não é o normal em OOP e em geral isto ocorre apenas por coincidência.

Correct answer by Maniero on August 11, 2020

O efeito colateral na orientação a objetos

Na orientação a objetos, efeito colateral é um efeito indesejado que ocorre em objetos quando seu estado é modificado. Ele pode ocorrer em diferentes situações, geralmente a causa é uma manutenção confusa do estado do objeto, onde a chamada de um método acaba influenciando no comportamento de outro.

Answered by raphael on August 11, 2020

Add your own answers!

Related Questions

vuejs retorna objeto student null ao tentar buscar estudante por id

3  Asked on December 2, 2021 by wellington-csar

   

Criar links que podem ser copiados ou clicados em Tkinter

1  Asked on December 2, 2021 by gabriel-nogueira

   

Como posso melhorar esse código?

1  Asked on December 2, 2021 by fabiano-vidal

   

Override de tipagem typescript

2  Asked on December 2, 2021 by murilo-fechio

   

Abrir uma página antes de carregar o header

2  Asked on November 30, 2021 by gustavo-moret

   

Selecionar parte de uma imagem

3  Asked on November 30, 2021

 

Retornar dia da semana a partir de uma data no formato dd/mm/yyy

4  Asked on November 30, 2021 by rafael-silva

   

Select change jQuery

1  Asked on November 30, 2021 by sr-andr-baill

 

Criteria para filtrar uma lista de array de string

1  Asked on November 30, 2021 by g-j

     

Comportamento do malloc(1) em C

2  Asked on November 30, 2021

         

Modal recebendo dados do banco de dados

1  Asked on November 30, 2021 by alex-sousa

     

Capitalizar texto em JavaScript, ignorando abreviações

2  Asked on November 30, 2021 by marlucio-pires

     

Escolhas aleatórias em um array JavaScript

3  Asked on November 30, 2021 by elias-oliveira

 

Ask a Question

Get help from others!

© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP