This shows you the differences between two versions of the page.
|
poo-ca-cd:laboratoare:programare-functionala-lambda-si-streamuri [2025/12/15 11:17] florian_luis.micu [Ce nu este Optional] |
poo-ca-cd:laboratoare:programare-functionala-lambda-si-streamuri [2025/12/15 11:44] (current) florian_luis.micu [Obiective] |
||
|---|---|---|---|
| Line 5: | Line 5: | ||
| * Data ultimei modificări: 15.12.2025 | * Data ultimei modificări: 15.12.2025 | ||
| * adăugare secțiune despre operații short-circuit. | * adăugare secțiune despre operații short-circuit. | ||
| + | * adăugare secțiune [Nice to know] despre Optional. | ||
| + | * adăugare secțiune despre primitive streams. | ||
| + | * menționarea boolean chaining când folosim interfețe funcționale de tip Predicate. | ||
| ======Obiective====== | ======Obiective====== | ||
| Line 17: | Line 20: | ||
| * diferențe dintre stilul imperativ și stilul funcțional de programare. | * diferențe dintre stilul imperativ și stilul funcțional de programare. | ||
| * identificarea avantajelor, limitărilor și capcanelor ale abordării funcționale în Java. | * identificarea avantajelor, limitărilor și capcanelor ale abordării funcționale în Java. | ||
| + | |||
| + | Aspectele **bonus** urmărite sunt: | ||
| + | * definirea și folosirea Optional în programarea în stil funcțional. | ||
| + | * paralelizarea codului folosind parallel streams. | ||
| <note warning> | <note warning> | ||
| Line 23: | Line 30: | ||
| </note> | </note> | ||
| - | ======🔧 Programare funcțională====== | + | ======🔧 Programarea funcțională====== |
| + | Există mai multe **paradigme de programare**, fiecare definind un mod diferit de a structura și exprima logica unui program. Cele mai importante sunt **programarea imperativă**, care descrie execuția pas cu pas, **programarea orientată pe obiecte**, care modelează aplicația prin obiecte ce combină date și comportament, și **programarea funcțională**, care pune accent pe transformări de date, funcții pure și evitarea stării mutabile. | ||
| + | |||
| + | Majoritatea limbajelor moderne sunt **multi-paradigmă**. Java, de exemplu, combină stilul imperativ și orientat pe obiecte cu elemente de programare funcțională (lambda expressions, Stream API), permițând alegerea paradigmei potrivite în funcție de problemă. | ||
| + | |||
| + | <note tip> | ||
| + | Există mai multe tipuri de paradigme de programare: | ||
| + | * programare imperativă (ex. C, Fortran) | ||
| + | * programare orientată pe obiecte (ex. Java, C#, C++, Python) | ||
| + | * programare funcțională (ex. Haskell, Lisp) | ||
| + | * programare declarativă (ex. SQL, HTML) | ||
| + | * programare logică (ex. Prolog) | ||
| + | * programare bazată pe evenimente (ex. JavaScript) | ||
| + | </note> | ||
| =====De ce am programa funcțional în Java?===== | =====De ce am programa funcțional în Java?===== | ||
| Line 342: | Line 362: | ||
| isEven.test(10); // true | isEven.test(10); // true | ||
| </code> | </code> | ||
| + | |||
| + | <note tip> | ||
| + | Predicate este util și pentru înlănțuirea condițiilor boolean prin folosirea metodelor ''and(...)'', ''or(...)'', ''negate(...)''. | ||
| + | <code java> | ||
| + | Predicate<Integer> isPositive = x -> x > 0; | ||
| + | Predicate<Integer> isEven = x -> x % 2 == 0; | ||
| + | |||
| + | Predicate<Integer> positiveAndEven = | ||
| + | isPositive.and(isEven); | ||
| + | |||
| + | System.out.println(positiveAndEven.test(4)); // true | ||
| + | System.out.println(positiveAndEven.test(3)); // false | ||
| + | System.out.println(positiveAndEven.test(-2)); // false | ||
| + | </code> | ||
| + | </note> | ||
| ===Function<T, R> – transformări=== | ===Function<T, R> – transformări=== | ||
| Line 1425: | Line 1460: | ||
| * [[https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html|Stream API - Oracle Docs]] | * [[https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html|Stream API - Oracle Docs]] | ||
| * [[https://www.baeldung.com/java-functional-programming|Java Functional Programming - Baeldung]] | * [[https://www.baeldung.com/java-functional-programming|Java Functional Programming - Baeldung]] | ||
| + | * [[https://www.baeldung.com/java-optional|Guide to Java Optional - Baeldung]] | ||