Skip to content

Commit 7592f78

Browse files
committed
Create Compiter Science “2024-09-24-declarative-and-functional-programming-concepts-and-a-functional-example”
1 parent 42d1a8d commit 7592f78

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
---
2+
Title: " Declarative and Functional Programming: Concepts and a Functional Example"
3+
layout: post
4+
title: " Declarative and Functional Programming: Concepts and a Functional Example"
5+
---
6+
### Declarative and Functional Programming: Concepts and a Functional Example
7+
8+
In the world of software development, programming paradigms shape the way we think about solving problems. Two paradigms that often come up in discussions are **declarative programming** and **functional programming**. In this blog post, we'll explore both concepts and how they relate to each other. We'll also look at an example written in a purely functional programming language.
9+
10+
---
11+
12+
### What is Declarative Programming?
13+
14+
**Declarative programming** is a style of programming where you describe **what** you want to accomplish rather than **how** to accomplish it. This contrasts with **imperative programming**, where you provide step-by-step instructions on how to achieve the desired outcome.
15+
16+
Key characteristics of declarative programming:
17+
- You focus on **outcome** rather than on the detailed procedure.
18+
- The underlying system or language handles the "how" behind the scenes.
19+
20+
Declarative programming languages and paradigms include:
21+
- **SQL**: You describe what data you want (e.g., `SELECT * FROM users`), but not how the database should retrieve it.
22+
- **HTML**: You define how content should be structured and displayed without specifying how the browser should render the page.
23+
- **Functional Programming (FP)** is considered a declarative paradigm because it emphasizes describing **what** needs to be computed rather than manipulating state and providing explicit control flow.
24+
25+
---
26+
27+
### What is Functional Programming?
28+
29+
**Functional programming** is a form of declarative programming that treats computation as the evaluation of **mathematical functions**. It avoids mutable state and focuses on the use of pure functions, higher-order functions, and first-class functions.
30+
31+
Key characteristics of functional programming:
32+
1. **Pure Functions**: A pure function's output depends only on its input, and it has no side effects (i.e., it doesn't modify any external state).
33+
34+
2. **Immutability**: Once data is created, it cannot be modified. This eliminates issues related to state changes and side effects.
35+
36+
3. **First-Class and Higher-Order Functions**: Functions are treated as first-class citizens, meaning they can be passed as arguments, returned as values, and stored in data structures. Higher-order functions take other functions as arguments or return functions as results.
37+
38+
4. **Function Composition**: Functional programming encourages the composition of simple functions to build more complex operations.
39+
40+
Languages like **Haskell**, **Lisp**, and **Scala** support functional programming paradigms strongly, but other languages, such as **JavaScript** and **Python**, also support functional constructs.
41+
42+
---
43+
44+
### What is Java?
45+
46+
**Java** is primarily an **object-oriented programming language**. Released in 1995 by Sun Microsystems (now Oracle), Java is platform-independent, designed to run on multiple platforms via the Java Virtual Machine (JVM). While Java's core is object-oriented, since Java 8, it has incorporated functional programming features like **lambda expressions**, **streams**, and **functional interfaces**.
47+
48+
Java allows developers to write both object-oriented and functional code, giving it a hybrid approach in modern versions.
49+
50+
---
51+
52+
### Example of a Functional Program in Haskell
53+
54+
Now that we've explored the theory behind functional programming, let's look at a real-world example written in a functional language—**Haskell**. Haskell is a purely functional programming language, meaning everything is expressed in terms of functions.
55+
56+
In this example, we’ll work with a list of numbers, filter for even numbers, and double each even number. This is a functional approach using higher-order functions and immutability.
57+
58+
```haskell
59+
-- A function to double even numbers in a list
60+
doubleEvens :: [Int] -> [Int]
61+
doubleEvens xs = map (*2) (filter even xs)
62+
63+
main :: IO ()
64+
main = do
65+
let numbers = [1, 2, 3, 4, 5, 6]
66+
let result = doubleEvens numbers
67+
print result
68+
```
69+
70+
### Explanation:
71+
72+
1. **Pure Function (`doubleEvens`)**: The function `doubleEvens` takes a list of integers (`[Int]`) as input and returns a new list of integers. It filters the even numbers using the `filter` function and then uses the `map` function to double each even number. Both `filter` and `map` are **higher-order functions**.
73+
74+
2. **Immutability**: The list `numbers` is not modified in place. Instead, a new list is created as the result of the filtering and mapping operations. This is characteristic of functional programming, where data is immutable.
75+
76+
3. **Higher-Order Functions**: `map` and `filter` are higher-order functions. `filter` takes a predicate function (`even`) and applies it to each element of the list, returning only the elements that satisfy the condition. `map` takes a function (`(*2)`, which multiplies each number by 2) and applies it to each element of the filtered list.
77+
78+
4. **First-Class Functions**: Functions like `even` and `(*2)` are passed as arguments to higher-order functions, demonstrating that functions are first-class citizens in Haskell.
79+
80+
### Output:
81+
82+
```
83+
[4, 8, 12]
84+
```
85+
86+
The result of running this Haskell program is `[4, 8, 12]`, showing that it successfully filtered out the even numbers and doubled them.
87+
88+
---
89+
90+
### Functional Programming in Real-World Applications
91+
92+
Functional programming has grown in popularity in recent years, especially in areas where concurrency, immutability, and clear logic flow are important. Industries like **finance**, **web development**, and **data science** use functional languages like Haskell, Scala, or functional programming features in languages like JavaScript and Python for various tasks, such as:
93+
- **Concurrency**: Functional programming avoids mutable state, making it easier to reason about and implement concurrent or parallel algorithms.
94+
- **Data transformation**: With immutable data structures and functions like `map`, `filter`, and `reduce`, transforming data collections is straightforward and error-free.
95+
- **Predictability**: Since functions are pure, they are predictable and testable. This leads to more reliable and bug-resistant code.
96+
97+
---
98+
99+
### Conclusion
100+
101+
**Declarative programming** emphasizes describing **what** the program should achieve rather than **how** to achieve it. **Functional programming**, as a subset of declarative programming, focuses on using pure functions, immutability, and higher-order functions to express logic.
102+
103+
While **Java** is mainly object-oriented, it has evolved to incorporate functional programming features, making it a versatile language. However, in purely functional languages like **Haskell**, the benefits of functional programming—such as immutability, first-class functions, and higher-order functions—are fully realized, leading to concise and robust code.
104+
105+
Understanding and adopting functional programming techniques can help developers write more maintainable, testable, and scalable software, whether in Java, Haskell, or another language with functional capabilities.

0 commit comments

Comments
 (0)