Declarative programming often seems – to me – as the holy grail of programming. But what does it really mean?
According to Dictionary.com
Declarative – serving to declare, make known, or explain: a declarative statement.
Declarative – a mood (grammatically unmarked) that represents the act or state as an objective fact [syn: indicative mood]
Declarative – making declaration, proclamation, or publication; explanatory; assertive; declaratory.
So, the word means explanatory or stated as facts.
In the context of programming declarative is usually contrasted with imperative and procedural, where imperative programming means programming by changing state and procedural programming means that a detailed algorithm is used.
Declarative programming is a programming paradigm that expresses the logic of a computation without describing its control flow.
Declarative programming attempts to minimize or eliminate side effects by describing what the program should accomplish, rather than describing how to go about accomplishing it.
So, in this context, declarative means without describing the control flow and without side effects.
Does this mean that I am programming declaratively when I am writing immutable object oriented code (without side effects) with fluent interfaces (explanatory)?
Or does it mean I am programming declaratively when I set up a large table, or even a database, of stated facts that I use to drive my application?
Or, who cares?