FJS26 · V48 · ONSDAG

Kodgranskning
och repetition

Granska AI:ns lösning på exempelprovet, och repetera inför torsdagen.

Chas Academy · Onsdag 25 november 2026


Idag

01Granska AI-kod02Övning: AI:ns lösning03Vad hittade vi?04Refaktorera05Repetition inför quizet06Inför provet
KODGRANSKNING OCH REPETITION2 / 28
”

I v46 granskade ni varandras kod. Idag granskar ni kod som ingen människa har skrivit, och som själv påstår att den är rätt.

01

Granska
AI-kod

FRÅN V46


Samma format som på workshoppen

Etiketten

praise, question, suggestion, issue eller nitpick, och (blocking) eller (non-blocking).

Kommentaren

Vad är problemet, varför är det ett problem, och hur kan det lösas?

KODGRANSKNING OCH REPETITION5 / 28

AI-KOD


Vad är speciellt med AI-kod?

Den låter säker

Kommentarer som ”Robust lösning” och ”bästa prestanda” är påståenden. De bevisar ingenting.

Den klarar testet

Men inte alltid uppgiften. Rätt utskrift med fel metod, eller ett krav som tolkats fel.

Den gör samma fel som vi

Mutation, ingen kontroll av response.ok, this i en callback, fel import. Bara snabbare och med bättre självförtroende.

KODGRANSKNING OCH REPETITION6 / 28

AI-KOD


Checklista för AI-kod

  • Kör koden. Lita inte på kommentarerna.
  • Läs uppgiften igen, ord för ord, och jämför med koden. Inte bara med testet.
  • Leta efter mutation. Ändras något som skickas in, eller något utanför funktionen?
  • Kolla felhanteringen. Vad händer vid en 404? Får användaren veta något?
  • Kolla att det går att köra. Importer, filändelser, type="module", och att det som importeras exporteras.
KODGRANSKNING OCH REPETITION7 / 28
”

Du ansvarar för koden du lämnar in, oavsett vem som skrev den.

02

Övning:
AI:ns lösning

Övning

Granska AI:ns lösning på exempelprov 2

Skapa ett eget repo från code-along-kodgranskning-261125 med Use this template, och kryssa i Include all branches. Öppna en pull request från ai-losning till main och kör koden fråga för fråga. Skriv kommentarer på raderna det gäller, med etikett och vad, varför och hur. Avsluta med en sammanfattning: hur många poäng av 30, och vilka tre saker är viktigast att rätta?

Tid

40 min

Mål

Du hittar brister i kod som ser färdig ut, och formulerar dem så att författaren kan rätta dem.

KODGRANSKNING OCH REPETITION10 / 28
03

Vad hittade
vi?

FRÅGA 2


En kopia som inte är en kopia

AI:n

// ✅ Skapar car2 och uppdaterar speed
const car2 = car;
car2.speed = 200;

const { name, speed } = car;
// Name: Volvo, Speed: 200

Rättat

const car2 = { ...car, speed: 200 };

const { name, speed } = car;
// Name: Volvo, Speed: 100
KODGRANSKNING OCH REPETITION12 / 28

FRÅGA 4 OCH 7


Samma fel två gånger till

Fråga 4

function combineArrays(arr1, arr2) {
  arr1.push(...arr2);
  return arr1;
}
// rättat:
return [...arr1, ...arr2];

Fråga 7.1

people.map((person) => {
  person.adult = person.age >= 18;
  return person;
});
// rättat:
people.map((person) =>
  ({ ...person, adult: person.age >= 18 }));
KODGRANSKNING OCH REPETITION13 / 28

FRÅGA 1.2 OCH 5


Rätt utskrift, fel lösning

Fråga 1.2: kräver map

const lastNameFirst = [];
fullName.forEach((name) => {
  const parts = name.split(' ');
  lastNameFirst.push(
    parts[1] + ', ' + parts[0]);
});

Fråga 5: bara liten bokstav

// ✅ Robust: hanterar både
// stora och små bokstäver
words.filter((word) =>
  word.toLowerCase().includes('a'));

// 'Apple' kommer med. Det ska det inte.
KODGRANSKNING OCH REPETITION14 / 28

FRÅGA 8


Fel ordning och halv felhantering

AI:n

const response = await fetch(url);
const todos = await response.json();

const completed = todos
  .filter((todo) => todo.completed)
  .slice(0, 20);
// 20 rader, testet väntar 11

Rättat

if (!response.ok) {
  throw new Error(
    `Kunde inte hämta (${response.status})`);
}

const completed = todos
  .slice(0, 20)
  .filter((todo) => todo.completed);
KODGRANSKNING OCH REPETITION15 / 28

FRÅGA 9 OCH 10


Det går inte att köra

Fråga 9

listBooks() {
  this.books.forEach(function (book) {
    console.log(`${this.name}: ...`);
  });
}
// TypeError: Cannot read properties
// of undefined (reading 'name')

Fråga 10

import { Book, Author }
  from './question9';
// saknar .js, och question9
// exporterar inget

<script src="question10.js" defer>
// Cannot use import statement
// outside a module
KODGRANSKNING OCH REPETITION16 / 28
”

Nästan allt ser ut att fungera. Min uppskattning: 15–17 poäng av 30. Det räcker inte till godkänt.

04

Refaktorera

REFAKTORERA


Bättre kod, samma beteende

  • Refaktorera betyder att ändra hur koden är skriven utan att ändra vad den gör.
  • En sak i taget. Kör koden efter varje ändring.
  • Rätta buggen först, refaktorera sedan. Blanda inte ihop dem i samma steg eller samma commit.
  • Stanna när det är tydligt. Kortast är inte alltid bäst.
KODGRANSKNING OCH REPETITION19 / 28

REFAKTORERA


Fråga 3 i två steg

1. Rätta buggen

list.innerHTML = movies
  .map((m) => `<li>${m.title} (${m.year})</li>`)
  .join('');

2. Refaktorera

const items = movies.map((movie) => {
  const li = document.createElement('li');
  li.textContent =
    `${movie.title} (${movie.year})`;
  return li;
});
list.append(...items);
KODGRANSKNING OCH REPETITION20 / 28
05

Repetition
inför quizet

KURSMÅL 1


I vilken ordning loggas det?

A

console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve()
  .then(() => console.log('C'));
console.log('D');

B

async function load() {
  console.log('1');
  await null;
  console.log('2');
}
load();
console.log('3');
KODGRANSKNING OCH REPETITION22 / 28

KURSMÅL 2


Var hamnar paketet?

dependencies eller devDependencies?

date-fns

Formaterar datum i appen.

vite

Utvecklingsserver och bygge.

eslint

Hittar fel i koden.

prettier

Formaterar koden.

KODGRANSKNING OCH REPETITION23 / 28

KURSMÅL 2


ESLint eller Prettier?

1

console.log(totl);
// totl is not defined

2

const name = "Ada"
// fel citattecken, inget semikolon

3

const result = calc();
// result används aldrig
KODGRANSKNING OCH REPETITION24 / 28

KURSMÅL 3


OOP, funktionellt eller båda?

1

En kortlek i ett spel. Den blandas, kort dras, och leken minns vilka kort som är kvar.

2

En lista med produkter som filtreras på pris, sorteras och visas.

3

En kassa med en varukorg och en totalsumma med rabatt och moms.

KODGRANSKNING OCH REPETITION25 / 28
06

Inför
provet

TORSDAG 26 NOVEMBER


Provdagen

  • 9.00–10.00: repetition på plats.
  • 10.00: quizet i Canvas, flervalsfrågor om async, verktygskedjan och paradigm.
  • 13.00–16.00: det praktiska provet. Länken till provrepot delas i Slack kl. 13.00.
  • Hjälpmedel: Sublime Text, terminalen, en webbläsarflik och ett A4 med egna anteckningar. Inga AI-verktyg.
  • Start: Use this template, privat repo, bjud in chasacademy-sandra-larsson, klona. Forka inte.
KODGRANSKNING OCH REPETITION27 / 28

I KVÄLL


Om du har en timme kvar

  • Gör om de frågor i exempelprov 2 som du tappade poäng på, med samma hjälpmedel som på provet.
  • Skriv ditt A4. Det du behövde slå upp i dag är det som ska stå där.
  • Öva starten en gång: template, privat repo, bjud in, klona.
  • Sov. Provet är tre timmar.
KODGRANSKNING OCH REPETITION28 / 28