Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-ca-cd:laboratoare:programare-functionala-lambda-si-streamuri [2025/12/15 11:18]
florian_luis.micu [Laboratorul 11: Programare Funcțională, Lambdas și Stream-uri]
poo-ca-cd:laboratoare:programare-functionala-lambda-si-streamuri [2025/12/15 11:44] (current)
florian_luis.micu [Obiective]
Line 6: Line 6:
     * 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 [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 18: 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 24: 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 343: 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 1426: 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]]
  
  
poo-ca-cd/laboratoare/programare-functionala-lambda-si-streamuri.1765790315.txt.gz · Last modified: 2025/12/15 11:18 by florian_luis.micu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0