Declarative Programming
Declarative Programming
Learn how declarative programming focuses on describing what result you want instead of writing every step for how to achieve it.
What is Declarative Programming?
Declarative Programming is a programming paradigm where we describe what we want the program to do, instead of describing every step of how to do it.
In simple words, declarative programming focuses on the desired result. The internal system, language, framework, or engine decides the detailed steps needed to produce that result.
For example, if we want all students who passed an exam, a declarative style would simply say:
Give me all students whose marks are greater than or equal to 50.
We are not explaining how to loop, how to compare each student, or how to store the result. We only describe the final condition.
Easy Real-Life Example
Declarative Programming as Ordering Food
Imagine you go to a restaurant and say, “I want a veg sandwich.” You do not explain how to cut the bread, how to spread butter, how to add vegetables, or how to grill it.
You only declare what you want. The chef handles the detailed process.
Declarative:
"I want a veg sandwich."
Imperative:
"Take bread, spread butter, cut vegetables, place them inside, grill it, cut it, and serve it."
Declarative programming works in a similar way. We describe the expected result, and the system figures out the process.
Why Do We Need Declarative Programming?
Declarative programming is useful because many programming tasks are easier to describe by result rather than by detailed step-by-step instructions.
When the implementation details are handled by a language, library, framework, or engine, the code often becomes shorter, cleaner, and easier to understand.
Declarative Programming Helps With
- Writing cleaner and more readable code.
- Reducing unnecessary step-by-step logic.
- Focusing on the final result.
- Improving maintainability.
- Working with databases using queries.
- Creating user interfaces using descriptions.
- Writing configuration files.
- Transforming data using high-level operations.
- Reducing manual control flow complexity.
- Making code easier for beginners to understand in some contexts.
Important Terms in Declarative Programming
| Term | Meaning | Simple Example |
|---|---|---|
| Declarative Programming | A style where we describe what result we want. | Show active users. |
| Imperative Programming | A style where we describe how to do something step by step. | Loop through users and check status. |
| Desired Result | The final output we want from the program. | List of passed students. |
| Abstraction | Hiding complex internal details. | Using a query instead of writing search logic manually. |
| Query | A request for specific data. | Find students with marks above 80. |
| Rule | A condition or statement that describes expected behavior. | Only adults can register. |
| Configuration | A declarative description of desired setup. | Define app settings in a config file. |
Declarative vs Imperative Programming
Declarative and imperative programming are two different ways of thinking about problem-solving.
Imperative programming tells the computer how to do something. Declarative programming tells the computer what should be done.
| Feature | Imperative Programming | Declarative Programming |
|---|---|---|
| Main Focus | How to achieve the result. | What result is required. |
| Style | Step-by-step instructions. | High-level description. |
| Control Flow | Programmer manages the flow. | System or framework manages many details. |
| Code Length | Can be longer for data tasks. | Often shorter and more expressive. |
| Example | Loop through data manually. | Use a query, rule, or transformation. |
Imperative Example
Suppose we have a list of marks and we want only marks greater than or equal to 50.
/*
Imperative style:
We explain each step.
*/
ENTRY POINT
DECLARE marks AS LIST = [35, 60, 48, 75, 90]
DECLARE passingMarks AS LIST = []
FOR EACH mark IN marks
IF mark >= 50 THEN
ADD mark TO passingMarks
END IF
END FOR
DISPLAY passingMarks
END ENTRY POINT
Expected Output
[60, 75, 90]
Here, we describe exactly how to loop, check, and add items.
Declarative Example
Now let us express the same logic declaratively.
/*
Declarative style:
We describe what result we want.
*/
marks = [35, 60, 48, 75, 90]
passingMarks = FILTER marks WHERE mark >= 50
DISPLAY passingMarks
Expected Output
[60, 75, 90]
Here, we are not explaining the detailed loop. We are declaring the condition for the desired result.
Example: Declarative Programming in Database Queries
Database query languages are common examples of declarative programming.
Suppose we want all students whose marks are greater than or equal to 80.
SELECT name, marks
FROM students
WHERE marks >= 80;
This query describes what data we want:
Give me name and marks from students where marks are 80 or more.
We do not describe how the database should scan rows, use indexes, compare records, or build the output. The database engine handles those details.
Example: Declarative Programming in User Interfaces
User interface frameworks often use declarative ideas. Instead of manually drawing every pixel step by step, we describe what the interface should look like.
PAGE:
TITLE: "Student Dashboard"
BUTTON: "Add Student"
TABLE: show student records
This does not explain how the screen should be painted internally. It describes the final structure of the interface.
Example: Declarative Styling
Styling rules are also often declarative. We describe what style an element should have.
button {
background-color: blue;
color: white;
border-radius: 8px;
}
We are declaring the desired appearance of the button. We are not explaining how the browser should internally paint the button.
Declarative Data Transformation
Declarative programming is also common when transforming data.
Example: double every number in a list.
Imperative Style
numbers = [1, 2, 3, 4]
doubledNumbers = []
FOR EACH number IN numbers
ADD number * 2 TO doubledNumbers
END FOR
DISPLAY doubledNumbers
Declarative Style
numbers = [1, 2, 3, 4]
doubledNumbers = MAP numbers AS number * 2
DISPLAY doubledNumbers
Expected Output
[2, 4, 6, 8]
The declarative version focuses on the transformation, not the loop mechanics.
Common Declarative Programming Examples
| Area | Declarative Idea | Example |
|---|---|---|
| Database | Describe what data you want. | SELECT users WHERE age > 18 |
| Web Structure | Describe page structure. | Heading, paragraph, form, table. |
| Styling | Describe how elements should look. | Color, font size, margin. |
| Configuration | Describe desired settings. | App name, port, environment. |
| Infrastructure | Describe desired resources. | Create server, database, network. |
| Data Transformation | Describe transformation result. | Map, filter, sort. |
How Declarative Programming Works Internally
Although declarative programming hides many details from the programmer, the system still performs internal steps.
A declarative system usually works like this:
1. Programmer describes desired result
2. System reads the declaration
3. System plans how to achieve it
4. System executes internal steps
5. Final result is produced
The important point is that the programmer does not manually control every internal step.
Example: Student Grade Filtering
Suppose we want to display only students who received grade A.
students = [
{"name": "Aman", "grade": "B"},
{"name": "Riya", "grade": "A"},
{"name": "Sohan", "grade": "C"},
{"name": "Meera", "grade": "A"}
]
topStudents = FILTER students WHERE grade == "A"
DISPLAY topStudents
Expected Output
[
{"name": "Riya", "grade": "A"},
{"name": "Meera", "grade": "A"}
]
The logic describes what we want: students whose grade is A.
Example: Sorting Declaratively
Suppose we want students sorted by average marks from highest to lowest.
students = [
{"name": "Aman", "average": 84},
{"name": "Riya", "average": 92},
{"name": "Sohan", "average": 76}
]
sortedStudents = SORT students BY average DESCENDING
DISPLAY sortedStudents
Expected Output
[
{"name": "Riya", "average": 92},
{"name": "Aman", "average": 84},
{"name": "Sohan", "average": 76}
]
We are not writing the sorting algorithm manually. We are declaring the ordering rule.
Example: Validation Rules
Declarative programming can also describe validation rules.
RULES:
username is required
password length must be at least 8
email must contain "@"
age must be 18 or above
These rules describe what valid data should look like. The validation engine or program can then apply them.
Declarative Programming and Functional Programming
Functional programming often uses declarative ideas.
For example, operations like map, filter, and reduce allow us to describe data transformations without manually writing all loop steps.
numbers = [1, 2, 3, 4, 5]
evenNumbers = FILTER numbers WHERE number is even
squares = MAP evenNumbers AS number * number
total = REDUCE squares BY addition
This style clearly describes the data pipeline:
numbers → filter even → square → sum
Declarative Programming vs Functional Programming
Declarative programming and functional programming are related, but they are not exactly the same.
| Feature | Declarative Programming | Functional Programming |
|---|---|---|
| Main Focus | Describe what result is required. | Use functions, pure functions, and immutable data. |
| Scope | Broad paradigm. | A specific style that can be declarative. |
| Examples | SQL, configuration, UI declarations. | Map, filter, reduce, pure functions. |
| Relationship | Functional programming can be one form of declarative programming. | Often uses declarative expression style. |
Advantages of Declarative Programming
Benefits
- Code can be shorter and easier to read.
- Programmer focuses on the desired result.
- Complex internal details are hidden.
- It reduces manual control flow logic.
- It is useful for queries, rules, and configuration.
- It can improve maintainability.
- It often makes intent clearer.
- It works well with data transformation tasks.
- It allows engines and frameworks to optimize execution.
- It is widely used in modern software development.
Limitations of Declarative Programming
Challenges
- Beginners may not understand what happens internally.
- Debugging can be difficult when execution details are hidden.
- It may provide less control over low-level steps.
- Performance depends on the underlying engine or framework.
- Not every problem is best expressed declaratively.
- Some declarative tools have their own syntax and learning curve.
- Too much abstraction can make behavior feel unclear.
When to Use Declarative Programming
Use Declarative Programming When
- You want to describe a result clearly.
- You are querying data from a database.
- You are defining UI structure.
- You are writing configuration files.
- You are transforming collections using high-level operations.
- You want code that expresses intent more directly.
- You want the framework or engine to handle execution details.
When Declarative Programming May Not Be Best
Avoid or Use Carefully When
- You need full control over every execution step.
- You are writing low-level system logic.
- The declarative abstraction hides important performance details.
- The problem requires complex step-by-step state changes.
- The declarative syntax becomes harder to read than simple imperative code.
Common Beginner Mistakes
Mistakes
- Thinking declarative programming means no logic is involved.
- Confusing declarative programming with only database queries.
- Using declarative style even when step-by-step code is clearer.
- Not understanding what the underlying system does.
- Assuming declarative code is always faster.
- Writing unclear declarations that are difficult to maintain.
- Forgetting that declarative systems still execute steps internally.
- Ignoring error handling and validation.
Better Habits
- Use declarative style when it makes intent clearer.
- Understand the basic behavior of the underlying engine.
- Use meaningful names and clear conditions.
- Keep declarations simple and readable.
- Use imperative code when detailed control is necessary.
- Test declarative logic with different inputs.
- Read output carefully to confirm the declaration works correctly.
- Choose clarity over cleverness.
Best Practices for Declarative Programming
Recommended Practices
- Focus on clearly describing the desired result.
- Use meaningful conditions and rules.
- Keep declarations simple.
- Understand the tool or framework you are using.
- Do not hide too much complex logic in one declaration.
- Use comments when declarations are difficult to understand.
- Test with multiple cases.
- Use declarative style for queries, filtering, sorting, transformations, UI, and configuration.
- Use imperative style when detailed step-by-step control is more readable.
- Prefer readability and maintainability over short code.
Prerequisites Before Learning Declarative Programming
Students should understand the following topics before learning declarative programming:
Required Knowledge
- Variables and constants.
- Data types.
- Operators.
- Conditions.
- Loops and iteration.
- Functions and methods.
- Arrays and lists.
- Strings and common operations.
- Maps and dictionaries.
- Functional programming basics.
Trace Table Example: Imperative vs Declarative Filtering
Let us filter passing marks from the list:
marks = [35, 60, 48, 75]
| Mark | Condition | Included? | Reason |
|---|---|---|---|
35 |
35 >= 50 |
No | Failing mark |
60 |
60 >= 50 |
Yes | Passing mark |
48 |
48 >= 50 |
No | Failing mark |
75 |
75 >= 50 |
Yes | Passing mark |
Declarative expression:
passingMarks = FILTER marks WHERE mark >= 50
Final result:
[60, 75]
Practice Activity: Convert Imperative to Declarative
Convert the following imperative logic into declarative-style expressions.
Problem 1
numbers = [1, 2, 3, 4, 5]
result = []
FOR EACH number IN numbers
IF number > 3 THEN
ADD number TO result
END IF
END FOR
Sample Declarative Answer
result = FILTER numbers WHERE number > 3
Problem 2
names = ["aman", "riya", "sohan"]
upperNames = []
FOR EACH name IN names
ADD UPPERCASE(name) TO upperNames
END FOR
Sample Declarative Answer
upperNames = MAP names AS UPPERCASE(name)
Mini Quiz
What is declarative programming?
Declarative programming is a programming paradigm where we describe what result we want instead of describing every step for how to produce it.
What is the main difference between imperative and declarative programming?
Imperative programming focuses on how to do something step by step, while declarative programming focuses on what result is required.
Give one example of declarative programming.
A database query is a common example because it describes what data is needed, not how the database should internally find it.
Why is declarative programming useful?
It can make code shorter, more readable, and easier to maintain by focusing on the desired result.
Is declarative programming always better than imperative programming?
No. Declarative programming is useful in many situations, but imperative programming is better when detailed step-by-step control is needed.
Interview Questions on Declarative Programming
Define declarative programming.
Declarative programming is a style of programming where the programmer describes the desired result and allows the system to determine how to achieve it.
How does declarative programming differ from imperative programming?
Declarative programming describes what should happen, while imperative programming describes how it should happen step by step.
Why is SQL considered declarative?
SQL is considered declarative because a query describes what data is required, while the database engine decides how to retrieve it.
What are the advantages of declarative programming?
It improves readability, reduces manual control flow, hides complex implementation details, and allows programmers to focus on intent.
What are the limitations of declarative programming?
It can be harder to debug when execution details are hidden, and it may provide less low-level control compared to imperative programming.
Quick Summary
| Concept | Meaning |
|---|---|
| Declarative Programming | Describes what result is required. |
| Imperative Programming | Describes how to achieve the result step by step. |
| Main Focus | Desired output or final state. |
| Abstraction | Internal details are handled by the system or framework. |
| Common Examples | Database queries, UI descriptions, styling rules, configuration, data transformations. |
| Best Use | When intent is clearer than manual steps. |
Final Takeaway
Declarative programming is a powerful programming paradigm that helps students think in terms of desired results instead of detailed execution steps. It is widely used in databases, user interfaces, styling, configuration, infrastructure, and data transformation. In the Programming Mastery Course, students should understand declarative programming as a high-level way of expressing intent clearly, while also knowing that imperative programming is still useful when step-by-step control is needed.