From 44e31180617f1815b5bbe9e847d9a6895ae05dd3 Mon Sep 17 00:00:00 2001 From: Hans Dijkema Date: Sat, 29 Aug 2026 22:21:05 +0200 Subject: [PATCH] javascript-skill.md --- javascript-skill.md | 95 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 javascript-skill.md diff --git a/javascript-skill.md b/javascript-skill.md new file mode 100644 index 0000000..7f15a42 --- /dev/null +++ b/javascript-skill.md @@ -0,0 +1,95 @@ +# --- +name: javascript-programmeer-skill +description: Hiermee wordt mijn voorkeur racket programmeerstijl aangegeven. +--- + +--- +name: javascript-programmeerstijl +description: Gebruik deze skill wanneer je Javascript-code voor Hans schrijft, wijzigt, refactort of beoordeelt. Pas de bestaande, eenvoudige en object georiƫnteerde programmeerstijl toe; voorkom over-engineering en onnodige abstracties. Gebruik deze skill niet voor algemene uitleg over Racket waarbij geen code voor zijn projecten wordt gemaakt of aangepast. +--- + +# javascript-programmeerstijl + +Gebruik deze stijl wanneer je Javascript-code voor Hans schrijft of aanpast. + +## Uitgangspunt + +Schrijf code zoveel mogelijk in lijn met zoals Hans racket code schrijft. Zie daarvoor de racket skill. + +Gebruik bij javascript als je een closure definitie maakt, bij voorkeur classes, m.a.w. ga +voor OO en class definities in plaats van property gestuurde closures. + +Liever + +```javascript +class Rectangle { + constructor(height, width) { + this.height = height; + this.width = width; + } + // Getter + get area() { + return this.calcArea(); + } + // Method + calcArea() { + return this.height * this.width; + } + *getSides() { + yield this.height; + yield this.width; + yield this.height; + yield this.width; + } +} + +const square = new Rectangle(10, 10); + +console.log(square.area); // 100 +console.log([...square.getSides()]); // [10, 10, 10, 10]``` + +In plaats van: + +```javascript +const Rectangle = (() => { + function Rectangle(height, width) { + this.height = height; + this.width = width; + } + + Rectangle.prototype.calcArea = function () { + return this.height * this.width; + }; + + Object.defineProperty(Rectangle.prototype, "area", { + get: function () { + return this.calcArea(); + } + }); + + Rectangle.prototype.getSides = function* () { + yield this.height; + yield this.width; + yield this.height; + yield this.width; + }; + + return Rectangle; +})(); +``` + +## Modules / source files + +Houd bronbestanden overzichtelijk. +Geen grote javascript bouwwerken. +Ga voor module gewijze code. +Zorg dat modules zoveel mogelijk een eenheid zijn. + +OO is prima, en een setje OO classes in een module kan, maar als het boven de 750 regels code komt, +dan wordt het onoverzichtelijk. + +Voorkom eindeloze nestingen. +Probeer dingen functioneel op te zetten, zoals dat in racket zou werken. + + +