Objektorienterat

Jag avslutade förra veckan med att säga att jag var välbekant med objektorienterad programmering (OO) från Java, och då kan man ju tänka sig att det inte ska vara några konstigheter med OO i JavaScript. Men där hade jag fel!

Denna vecka kommer jag gå igenom objektorienterad programmering i JavaScript och funktionell programmering. Utöver det får vi se vad jag hinner med. Utöver det så har det hänt lite uppdateringar på Bokarenan också. När jag senast lämnade Bokarenan så hade jag uppdaterat den med en funktion så att jag kunde göra nyhetsinlägg som kunde publiceras på inställd tid. Det jag hade missat då var en funktion som inte ville låta mig föra inlägg. Lösningen var att byta ut ett likamedstecken till ett utropstecken. Senaste nyhetsinlägget kan läsas här: https://bokarenan.se/nyheter/post/2020-02-08_Bokarenan_förbättras_med_din_hjälp

Åter till objektorienterad programmering i JavaScript och vad jag har lärt mig från freeCodeCamp. Förvånansvärt lite class användes, men jag har lärt mig om prototypes för att hantera objektgemensamma egenskaper och ärftlighet. Mixins var ett helt nytt ämnesområde för mig. Jag skulle vilja säga att det påminner om interface så som jag känner det från Java, men ändå inte. Mixins kan komma med egna inplementeringar redo att används direkt i de objekt som vill importera dem. En svaghet verkar vara att mixins inte ställer något direkt krav på det objekt som ska använda det, vilket kan göra det enkelt att missa detaljer som en mixin kan vara beroende av. Med andra ord ser jag en risk att sätta en mixin som kräver en viss egenskap på ett objekt som saknar den egenskapen.

Jag har även fått lära mig om Immediately Invoked Function Expression (IIFE). Dessa typer av funktioner exekuteras så fort som de är deklarerade. Tydligen är ett populärt användningsområde för dem att skapa moduler. De skapade modulerna sparas till en variabel för att kunna användas vid ett senare tillfälle. Moduler var också ett nytt koncept för mig och de används för att para ihop funktioner för att sedan kunna åberopas genom den variabel de sparats i. Exempel på en IIFE och en modul med två funktioner:

let mathModule = (() => {
  return {
    add: function(...args) {
      let sum = 0;
      for (let i = 0; i < args.length; i++) {
        sum += args[i];
      }
      return sum;
    },
    average: function(...args) {
      return this.add(...args) / args.length;
    }
  }
})();

console.log(mathModule.add(5, 6));    // prints 11
console.log(mathModule.average(5, 6));// prints 5.5

Nu har jag lärt mig en hel del nya koncept men eftersom jag inte rört så mycket class så räknar jag med att återvända till OO för att lära mig mer.

Det var allt för idag. På onsdag kommer jag beröra funktionell programmering som handlar om att göra funktioner lättare att leva med. Vi ses då!