Sobes.tech
Junior

Qual é a diferença entre programação imperativa e declarativa?

sobes.tech IA

Resposta da IA

A programação imperativa descreve como fazer algo, indicando uma sequência de passos. A programação declarativa descreve o que deve ser feito, sem entrar em detalhes de implementação.

  • Imperativa: Foca no fluxo de controlo e nas mudanças de estado do programa. Dizes à computador, como passar de um estado para outro.
  • Declarativa: Foca na lógica dos cálculos, sem descrever explicitamente o fluxo de controlo. Dizes à computador, o que queres alcançar.

Exemplos:

  • Abordagem imperativa para procurar números pares numa slice:

    // Abordagem imperativa
    func findEvenImperative(nums []int) []int {
    	var evenNums []int // Declaramos a variável para o resultado
    	for _, num := range nums { // Iteramos sobre os elementos
    		if num%2 == 0 { // Verificamos a condição
    			evenNums = append(evenNums, num) // Adicionamos ao resultado
    		}
    	}
    	return evenNums // Devolvemos o resultado
    }
    
  • Abordagem declarativa (por exemplo, usando SQL, que é de natureza declarativa):

    Embora Golang em si seja em grande medida imperativo, a ideia de declaratividade é ilustrada numa consulta a uma base de dados:

    -- Abordagem declarativa (SQL)
    SELECT *
    FROM numbers
    WHERE number % 2 = 0;
    

    Aqui, simplesmente declaramos que queremos obter todas as linhas da tabela numbers onde number é par, sem descrever exatamente como a base de dados deve fazer isso (por exemplo, qual algoritmo de busca ou filtragem usar).

As principais diferenças podem ser resumidas na tabela:

Propriedade Programação imperativa Programação declarativa
Foco Como fazer (sequência de passos) O que fazer (resultado desejado)
Fluxo de controlo Gerido explicitamente pelo programador Oculto ou abstrato
Estado Alterado ativamente Menos explicitamente alterado ou imutável
Exemplos C, Java, Python (principalmente), Go SQL, HTML, CSS, React (JSX)

Em Go, costuma-se usar mais o estilo imperativo, mas os conceitos de declaratividade aparecem em certos enfoques, por exemplo, ao usar bibliotecas para trabalhar com dados ou na descrição de configurações.