Etikett Anders Björkland

Här görs det JS.

Denna veckan påbörjade jag #100DaysOfCode samtidigt som jag slängde mig in i JavaScript. Jag har använt mig av en kurs från freeCodeCamp och så här långt har jag hunnit gå igenom följande:

  • Basic JavaScript
  • ES6
  • Regular Expressions
  • Debugging
  • Basic Data Structures
  • Basic Algorithm Scripting

Vad har varit svårast så här långt då? Regex! Regex (regular expressions) handlar om att skapa instruktioner för att hitta mönster. I JavaScript kan man göra enligt följande:

let regex = /\w{1,}/g;
let str = "Words on the screen";
str.match(regex);
// results in ["Words", "on", "the", "screen"]

Då kommer regex användas för att hitta mönster som passar in mot instruktionerna. I exemplet ovan så säger instruktionen att den ska fortsätta kolla igenom hela textsträngen tills den hittar bokstäver (och siffror) i en följd. Det ska ingå minst ett tecken i strängen men inga specialtecken eller mellanslag ska matchas. Ibland har jag trott att jag har haft koll på hur det ska användas, men ofta har det blivit lite av trial and error.

Det som jag har tyckt varit roligast hittils är det avsnitt som kallas för Basic Algorithm Scripting. Det har inneburit mer frihet att komma fram till lösningar själv. En klassiker som kom var att göra en funktion för att beräkna fakultet. Den är ett klassiskt exempel på hur man kan använda sig av rekursion. Min lösning såg ut så här:

function factorialize(num) {
  if (0 === num) {
    return 1;
  } else {
    return num * factorialize(num - 1);
  }
}

Vad rekursion innebär är att funktionen kommer kalla sig själv med ett nummer mindre för varje gång tills numret är lika med 0. Låt oss ta ett exempel:

let product = factorialize(3);

Första steget:

function factorialize(3) {
  if (0 === num) {
    return 1;
  } else {
    return 3 * factorialize(3 - 1);
  }
}

Vi har skickat in 3 till funktionen och kommer ned till att den kallar sig självt med 3 – 1:

function factorialize(2) { 
  if (0 === num) { //fortfarande inte lika med 2
    return 1;
  } else {
    return 2 * factorialize(2 - 1);
  }
}

Som ni kan se så blir det att den åter kallar sig själv tills talet blir lika med 0. 0 fakultet är definierat som 1 och det är detta värde som kommer returneras. Vi kommer då att åter hamna där funktionen åberopades första gången, och sammanfattat ser det då ut så här:

function factorialize(3) {
  if (0 === num) {
    return 1;
  } else {
    //varje parantes motsvarar de gånger som funktionen kallar sig självt: 
    return 3 * (2 * (1 * (1))); 
  }
} 

Funktionen ger svaret att 3! är 6.

Det har varit en rolig vecka, och mycket har också varit tack vare det stödet som jag får från alla på Twitter. Det är många som gör eller har gjort liknande resa som jag själv gör just nu. Även om vi har lite olika uppfattningar om den. Nästa vecka blir det lite objekt orienterad programmering följt av funktionell programmering. Det förstnämnda är jag välbekant med från Java och PHP, men funktionell programmering kommer nog bli något nytt.

Trevlig helg, allihopa!


Det går framåt

Det blev visst en ordvist här. ”Det går framåt”. Jättekul! För att JavaScript ofta handlar om frontend. Men titta här:

Sedan jag startade min JavaScript-resa i måndags med freeCodeCamp så har jag nu gått igenom grundstegen. Jag gillar upplägget med ett interaktivt fönster som man kan koda i och jag tog mig snabbt genom de grundläggande delarna (Basic JavaScript). Jag har fortsatt till ES6. ES6 står för EcmaScript 6 och är synonymt med den senaste standarden av JavaScript. Det ES6 erbjuder är bland annat konkurrerande variabeldeklarationer till var; dessa är let och const. Med let så kan man få varning om man försöker deklarera en till variabel med samma namn. Det innebär också att den variabel som deklareras också kommer hålla sig inom det block där det deklarerades. I en for-loop så kommer let i att vara förbehållet den loopen. Men med var så kommer i att finnas tillgänglig utanför loopen. Med const så kan man skapa konstanter. Om jag gör en konstant const PI = 3.14; så kommer jag inte kunna ändra värdet på PI senare i koden.

Fler roliga saker är arrow functions. Dessa påminner om de lambda-funktioner som kom med Java 8. Det dessa gör är att det blir enklare att göra anonyma funktioner. Kombinerat med att man kan skicka godtyckligt många argument så får man väldigt mycket flexibilitet.

Än så länge har ES6 erbjudit JavaScript sådant som jag känner igen från min tid med Java. Något som jag däremot bara skrapat på ytan än så länge är callback functions och destructuring assignment. Jag behöver mer träning här.

Jag fortsätter med kurserna på freeCodeCamp och återkopplar vad jag lär mig. Under tiden rekommenderar jag att ni håller ögonen på #100daysOfCode på Twitter. Det är fantastiskt vad folk motiverar varandra där och det är något som gör mig glad. Vi ses på fredag!