title |
---|
Fyrirlestur 9.3 – JavaScript einingar |
Ólafur Sverrir Kjartansson, osk@hi.is
- Þegar við vinnum með forrit er þeim yfirleitt skipt upp í einingar
- Safnar saman virkni á einum stað, inniheldur föll og breytur
- Skilgreinum API (Application Programming Interface) fyrir einingu
- Einfaldar að hugsa um forritið, ákveðin eining gerir ákveðin hlut
- Getur hjálpað við að stýra flækjustigi
- Þurfum ekki að „halda öllu forritinu í hausnum“ í einu
- Skilgreinum namespace, minnkar líkur á að við skemmum fyrir öðrum eða aðrir skemmi fyrir okkur
- Sérstaklega í JavaScript með global og local scope
- Ýtir undir endurnýtingu á kóða
- Getur verið flókið að ákveða hvernig og hvenær skipta eigi forriti upp
- Að skrifa gott API er erfitt
- Lærum hægt og rólega með því að skrifa sjálf og nota önnur forritasöfn
// forrit sem reiknar lengd milli a og b
// hvaða skil eru „best“?
program.doStuff(a, b);
program.calculate(a, b);
program.calulateDistance(a, b);
program.distance(a, b);
- Þurfum að geta búið til sérstakt scope fyrir hverja einingu
- Einingar eru ekki studdar í ECMAScript 5 en getum notað nafnlaus föll
- Einingar eru studdar í ECMAScript 6 með
import
ogexport
- Stuðningur ekki mikill í vöfrum eða node, þurfum tól
- Eða IIFE, „iffy“
- Sjálfkeyrandi nafnlaus föll
- Býr til fall sem heldur hlutum utan global scope
- Notað til að búa til einingar í JavaScript
((i) => {
console.log(i * 2);
})(10);
// 20
- Nýtir lokun til að einangra forritið okkar
- Aðeins nafnið á einingu í global scope, ekki öll föll eða allar breytur
- Skilum hlut sem skilgreinir API forrits
const Module = (() => {
const privateVar = 1;
function privateMethod() { return privateVar; }
return { // má ekki vera í sér línu!
publicVar: 2,
publicMethod: () => privateMethod(),
};
})(); // köllum í fallið og búum til hlut
- Búið að staðla nokkrar aðferðir til að vinna með einingar, t.d. CommonJS, AMD
- Getum því sótt aðrar einingar til að nota í forritinum okkar, þarf þó uppsetningu með tólum
- npm er stærsta samansafn af einingum skrifuðum í JavaScript, bæði fyrir framenda og bakenda