Java TUTORIAL Italiano: Cos'è la LAMBDA EXPRESSION (Espressione Lambda) e le Interfacce Funzionali

Поделиться
HTML-код
  • Опубликовано: 18 дек 2024

Комментарии •

  • @CodeBrothers
    @CodeBrothers  Месяц назад

    ✨ System.out.println("Ti piace ciò che facciamo?" } ✨
    🍂☕ Sostienici con un Java Coffee! ko-fi.com/codebrothers 🍂☕
    👾 Entra nella community Discord 🡆 discord.gg/bhA8TTQgGh 👾

  • @nicolaslazzari1818
    @nicolaslazzari1818 Год назад +4

    Sei veramente forte, riesci a rendere leggere lezioni su argomenti veramente pesanti e pallosi ma senza esagerare

    • @CodeBrothers
      @CodeBrothers  Год назад

      Ciao Nicola! Grazie è molto bello sapere che ti sia tornato utile 🤟😎 lo scopo del nostro canale è proprio rendere una materia trafiggi ma**ni un po' più divertente così da diventare ogni giorno dei dev migliori! Ultimamente stiamo cercando di migliorare ancora di più i video, ti consiglio quindi gli ultimi due sui Thread per avere una esperienza nuova e si spera..ancora migliore ✨

  • @karazero
    @karazero 11 месяцев назад +2

    Like obbligatorio, iscrizione anche, bravissimo!

    • @CodeBrothers
      @CodeBrothers  11 месяцев назад

      Ciao Karazero! Grazie mille cerchiamo di fare del nostro meglio in ogni video!:)

  • @raffaelemaisto8967
    @raffaelemaisto8967 Год назад +2

    Veramente ben fatto. Complimenti

    • @CodeBrothers
      @CodeBrothers  Год назад +1

      Ci fa un sacco piacere Raffaele! Ci abbiamo messo molto a prepararla 🥰

  • @eigherreight71
    @eigherreight71 7 месяцев назад +1

    Fortissimo, grazie!

    • @CodeBrothers
      @CodeBrothers  7 месяцев назад

      Ciao Eigherteight! Grazie mille a te 💪😎

  • @eigherreight71
    @eigherreight71 7 месяцев назад +1

    Ma quindi la annotation @FunctionalInterface serve solo ed esclusivamente a segnalare la presenza di metodi di troppo?

    • @CodeBrothers
      @CodeBrothers  7 месяцев назад

      Ehi ciao! Cosa intendi di preciso con la presenza di metodi di troppo?

    • @eigherreight71
      @eigherreight71 7 месяцев назад +1

      @@CodeBrothers Nell'interfaccia hai fatto vedere che inserendo un altro metodo dava errore, perchè appunto ne poteva contenere solo uno. Ma quindi quella annotation serve esclusivamente a segnalare il fatto che hai messo un altro metodo?
      Non so se mi sono spiegato

    • @CodeBrothers
      @CodeBrothers  7 месяцев назад +1

      @@eigherreight71 Lo scopo della annotation @FunctionalInterface è di INFORMARE che quella interfaccia dovrà contenere un solo metodo astratto, in questo modo se un altro sviluppatore arriverà lì e proverà ad aggiungere qualcosa ci penserà due volte vedendo quella annotation :)
      Inoltre sposterai il tuo problema direttamente nella tua interfaccia e non in giro per il codice in 2000 posti!
      In poche parole non è obbligatorio metterla ma aiuta molto a ridurre possibili errori. Facci sapere se ti è tutto chiaro e in caso entra pure nel nostro canale Discord dove possiamo anche conversare e ti puoi confrontare con altri CodeBrothers ;)

  • @RDB-jl2we
    @RDB-jl2we 2 года назад +1

    Ciao! Contenuto molto interessante, pensi di preparare un contenuto anche sugli stream?
    Ho dato un occhiata ai tuoi video, spesso lo utilizzi ma non ho trovato nullo in cui spieghi dettagliatamente questo costrutto.
    Grazie mille

    • @CodeBrothers
      @CodeBrothers  2 года назад +1

      Ciao R2! 😄
      Il corso che stiamo preparando vuole coprire ogni parte possibile di Java, e sebbene ci vorrà molto tempo questo è il nostro obiettivo. Gli stream sono fondamentali, presto arriveranno e meriteranno una Playlist a parte addirittura! Al momento, come detto nei video di domande di colloquio purtroppo ancora non li abbiamo trattati ma volevamo comunque mostrarli così da aiutare coloro che sono in fase di selezione (e chissà..magari se qualcuno vuole provare a studiarseli trova anche degli esercizi risolti!) Un saluto 🤟

    • @RDB-jl2we
      @RDB-jl2we 2 года назад +1

      @@CodeBrothers Allora non mi resta che iscrivermi, cosa che ho già fatto ed attivare la campanella.
      Complimenti per la bella iniziativa, posso chiederti ogni quando esce un video?

    • @CodeBrothers
      @CodeBrothers  2 года назад +1

      @@RDB-jl2we Grazie infinite per la fiducia! 🙏 Per il momento abbiamo sempre fatto uscire un nuovo video ogni lunedì alle ore 12 (è infatti proprio la nostra copertina se clicchi dentro il canale 🤣) e inoltre quando trattiamo esercizi molto veloci ne facevamo uscire anche uno il mercoledì sempre alle ore 12.
      Adesso stiamo per portare una grande novità sul canale, capiti in un momento davvero unico (ha a che fare con il penultimo video che abbiamo pubblicato).
      Ci sarà forse una piccola pausa per cui vale MOLTO la pena aspettare, ne parleremo nel video del prossimo lunedì quasi sicuramente! 😇

  • @BiagioRosarioGreco
    @BiagioRosarioGreco 2 года назад +2

    Salve Brothers.. il video mi ha chiarito degli aspetti ma l'apertura su questo argomento mi ha messo dubbi su alcune cose che pensavo essere certezze.. cioè boom avete mandato in Crash il mio coding.. non va bene!! 😭
    Rimanendo sul pezzo. Nei video indiani (purtroppo in lingua non italiana sono il 70% indiani) sulla FP si parla prevalentemente della classe producer e consumer per funzioni lambda che da quel poco che ho capito sono l'equivalente delle Arrow function di JS. Il punto è (e questo è un dubbio che mi rimane pur avendo guardato il vostro video) se ho bisogno di creare una lambda espression che usa in ingresso n > 3 parametri con consumer e producer come si fa esiste un metodo per non fare casino ed usare 3 o 4 o più parametri di ingresso?????
    In ultima istanza: approcciandomi alla fp in JS anzitempo, l'unica vera certezza che ho maturato è che, facendo un paragone con c++, una funzione lambda è una sorta di puntatore a funzione io creo questo puntatore che punta ad un'area di codice e lo uso come fosse una funzione passandoci anche parametri, non ha bisogno di un return ed è per via del LifeScooping più pratico...
    Vi prego, come dei massaggiatori mettete a posto le ossa rotte dovuto alla confusione che ho in testa 😂

    • @CodeBrothers
      @CodeBrothers  2 года назад +1

      Ciao Biagio! 😊
      Innanzitutto ci teniamo a sottolineare che una lambda non è un puntatore a funzione ma è un vero e proprio oggetto.
      Quando scriviamo _Consumer c = s -> System.out.println(s)_ stiamo assegnando la nostra lambda expression ad una reference variable *s* di tipo *Consumer* .
      Per forza di cose quindi la espressione viene valutata ad un oggetto di quel tipo o non potrebbe venire assegnata a quella variabile.
      Sulla questione "parametri >3", dato che la lambda la stiamo utilizzando per implementare una functional interface, dobbiamo per forza rispettare la sua firma.
      Consumer prevede 1 solo argomento, BiConsumer ne prevede due quindi da lì non si scappa.
      Per usarne tre o più hai due approcci:
      - ti crei una tua nuova interfaccia, ad esempio TriConsumer, che prende in input 3 parametri
      - usi la tecnica del currying
      Eccoti degli esempi per ognuno dei 2 casi:
      *Currying*
      Function f = d -> i -> s -> {
      System.out.println("" + d+ ";" + i+ ";" + s);
      };
      f.apply(1.0).apply(2).accept("s");TriConsumer:
      *TriConsumer*
      @FunctionalInterface
      public interface TriConsumer {
      void accept(A a, B b, C c);
      }

  • @antoninofabriziolabate3314
    @antoninofabriziolabate3314 2 года назад +1

    Finalmente

    • @CodeBrothers
      @CodeBrothers  2 года назад

      E vedrai la prossima che roba! 😄

  • @pincopanco131
    @pincopanco131 2 года назад +1

    Invece se voglio restituire un valore con la lambda?

    • @CodeBrothers
      @CodeBrothers  2 года назад +1

      Ciao Pinco! Per restituire un valore questo dipenderà dalla tua implementazione. Noi abbiamo solo usato un System.out ma tu puoi decidere ciò che preferisci 😊
      Puoi fare anche una addizione per esempio!
      return (a, b) - > a+b;
      La figata è che la lambda come ho detto, è proprio un valore 🤘

    • @pincopanco131
      @pincopanco131 2 года назад +1

      @@CodeBrothers la verità è che devo partire dall inizo. 😔 è un periodo incasinato ma appena farò sul serio like ad ogni video. Grazie per il lavoro che hai fatto.

    • @CodeBrothers
      @CodeBrothers  2 года назад +2

      @@pincopanco131 Tranquillo Pinco, anche una camminata di 10.000 passi comincia semplicemente col muovere in avanti la gamba destra (o sinistra! 😄).
      Il nostro corso lo abbiamo cominciato veramente dalle basi più totali quindi entra pure sul nostro canale, cerca la playlist di teoria e clicca sulla lezione 1 dove ti spiegherò proprio le basi della programmazione Java con tanto di storia e la sua nascita 🧐
      Facci sapere, a presto!

  • @luigimiranda98
    @luigimiranda98 2 года назад +1

    Ma quindi ogni volta che userò le lambda devo usare le functional interface? Intendo proprio come correttezza di scrittura

    • @CodeBrothers
      @CodeBrothers  2 года назад +1

      Ciao Luigi! 😉
      Ogni volta che scriviamo una Lambda stiamo usando "S.A.M" e quindi una @FunctionalInterface ma attenzione a non confondere i concetti: posso usare una lambda anche se non ho l'annotazione @FunctionalInterface.
      Quindi non è vero che se ho una @FunctionalInterface allora sto usando una Lambda.
      Fammi sapere se è tutto chiaro, a presto!

    • @luigimiranda98
      @luigimiranda98 2 года назад +1

      @@CodeBrothers si di fatti nel video all inizio viene usata la lambda senza l'annotazione, perché c'è solo un metodo.
      Però dico in generale se voglio usare una lambda devo usare un'interfaccia, che dovrà essere una factionalinterface, poi l'annotazione può essere omessa.
      Oppure ci sono altri metodi di dichiarare una lambda?

    • @CodeBrothers
      @CodeBrothers  2 года назад

      @@luigimiranda98 Esatto Luigi, ormai hai fatto tuo il concetto 💥
      Potremmo anche dire che, più che usare una interfaccia la Lambda è proprio lei stessa la implementazione di quella interfaccia

    • @luigimiranda98
      @luigimiranda98 2 года назад +1

      @@CodeBrothers perfetto quest'ultima risposta mi ha definitivamente chiarito le idee.
      Grazie come sempre♥️

    • @CodeBrothers
      @CodeBrothers  2 года назад

      @@luigimiranda98 ma figurati, è un piacere, buon proseguimento ✌️😎

  • @giuseppedestasio7358
    @giuseppedestasio7358 4 месяца назад +1

    opinione di uno che ne sa poco, a furia di passi indietro si confonde tutto, per me dovrebbe essere piu lineare chiaro semplice.... .meno parole.

    • @CodeBrothers
      @CodeBrothers  4 месяца назад

      @@giuseppedestasio7358 Ciao Giuseppe e grazie per il commento! Capisco il dubbio, e provo a rispondere: se mostrassi soltanto come fare in modo rapido e lineare non avresti mai saputo perché esiste la lambda, a quale necessità risponde, perché è nata e come tornare indietro da lambda a classe anonima. Queste cose a volte sono necessarie e soprattutto se te la chiedono ad un colloquio non puoi non saperla..
      PS: Inoltre la lambda si comporta in modo diverso dalla implementazione con classe anonima