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
numbersondenumberé 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.