# Referência circular

Uma referência circular é uma série de referências onde o último objeto referencia o primeiro, tendo como resultado um laço fechado.

## Na linguagem

A referência circular não deve ser confundida com a falácia lógica do argumento circular. Apesar de um argumento circular ser por, muitas vezes, inútil e não revelar informações, como duas entradas em um índice que se referem uma a outra, não necessariamente quer dizer que é de nenhum uso. Dicionários, por exemplo, são quase totalmente feitos por referência circular, uma vez que todas as palavras do dicionário são definidas em termos de outras palavras, entretanto, o dicionário continuará a ser uma referência útil. Textos contendo referências circulares ainda podem ser significativos. Seu irmão lhe deu um gatinho; Sua irmã lhe agradeceu por isso. É circular, mas não sem significado. De fato, pode ser argumentado que a auto-referência é uma consequência da lei da não-contradição de Aristóteles, um axioma fundamental da filosofia. Sob esse ponto de vista, sem a auto-referência, a lógica e a matemática se tornam impossíveis, ou pelo menos, perderiam muito de sua utilidade.

## Nos negócios

Algumas vezes, negócios indevidamente planejados podem ocasionar em uma referência circular. Por exemplo:
O conjunto inteiro de referências é inútil porque nenhum deles pode satisfazer o pedido de Alice; Alice realizou uma volta completa, onde cada referência a conduz ela a outra pessoa e finalmente ela é enviada de volta para a primeira pessoa.

## Em programação de computadores

A referência circular pode aparecer em uma programa de computador onde uma parte do código requer o resultado de outra, mas esse código precisa do resultado da primeira. Por exemplo:
O conjunto de funções como um todo é inútil porque nada entre eles pode retornar qualquer informação útil, de alguma maneira. Isso remete a um tipo de deadlock que é conhecido tecnicamente como livelock. Isso também aparece em planilhas eletrônicas onde duas células pedem o resultado de uma a outra. Por exemplo, se o valor da Célula A1 pode ser obtido adicionando 5 ao valor da Célula B1, e o valor da Célula B1 pode ser obtido adicionando 3 ao valor da Célula A1, nenhum valor pode ser computado. (mesmo se nas especificações estiver A1:=B1+5 e B1:=A1-5, ainda terá uma referência circular. Isso não ajuda se, no momento, A1=3 e B1=-2 possam satisfazer ambas as formulas, como existe infinitas outras possibilidades de valores para A1 e B1 que podem satisfazer ambas as instâncias.) A referência circular representa um grande problema na computação. O deadlock ocorre quando dois ou mais processos ficam esperando um pelo outro para liberar o recurso. A maioria dos bancos de dados relacionados como Oracle e SQL não permitem fazer referência circular porque sempre tem o problema de quando apagar uma fileira de uma tabela haver dependências com outras fileira de outra tabela (chave estrangeira) que se refere a fileira que será deletada. Da documentação técnica da Microsoft: a restrição de CHAVE ESTRANGEIRA não podem ser usadas para criar auto referência ou uma restrição circular de CHAVE ESTRANGEIRA. Para a Oracle e PostgreSQL o problema com a atualização de referência circular pode ser resolvidas definindo as chaves estrangeiras correspondents como deferrable (veja em CRIAR TABELA para PostgreSQL e DEFERRABLE Constraint Examples para Oracle). Nesse caso, a restrição é verificada no final da transação não no momento em que a declaração DDL é executada. Para atualizar uma referência circular, podem ser emitidas duas declarações em uma única transação que irá satisfazer ambas as referências uma vez que a transação seja enviada. Só associações internas são suportadas e são especificadas por uma comparação de colunas de diferentes tabelas. Junções circulares não são suportadas. Uma junção circular é uma consulta SQL que liga três ou mais tabelas entre si em um circuito. Oracle usa o termo cíclico para designar uma referência circular. Uma distinção deve ser feita através de processos contendo uma referência circular entre o que é incomputável e entre os cálculos de iteração com uma saída final. Este último pode falhar em planilhas que não estão equipadas para lidar com eles, mas são, no entanto, ainda logicamente válidos.

## Em planilhas eletrônicas

No caso específico de planilhas eletrônicas, uma referência circular é uma formula que depende, direta ou indiretamente, do seu próprio valor. O tipo mais comum de referência circular ocorre quando é feita uma referência à célula onde a fórmula está sendo editada. Por exemplo, ao se editar na célula B10, é inserida a seguinte formula: =A10+B10 Referência circular em planilhas pode ser uma técnica muito útil para resolver equações implícitas, como a equação de Colebrook e muitos outros, o que de outra maneira poderiam exigir os tediosos algoritmos de Newton-Raphson em VBA ou a utilização de macros.