Skip to content

Latest commit

 

History

History
254 lines (179 loc) · 5.88 KB

09.2.errors.regex.md

File metadata and controls

254 lines (179 loc) · 5.88 KB
title
Fyrirlestur 9.2 – JavaScript villur og regex

Fyrirlestur 9.2 – JavaScript villur og regex

Vefforritun 1 — TÖL107G

Ólafur Sverrir Kjartansson, osk@hi.is


Strict mode

  • Kynnt í ECMAScript 5
  • Setur strangari kröfur á kóðann þinn
  • Villum kastað ef t.d.
    • Reynt að nota óskilgreindar breytur
    • Sama eigindi skilgreint oftar en einu sinni í hlut

  • 'use strict' skilgreinir strict mode
  • Tvö scope:
    • Per skrá
    • Per fall
  • Æskilegra að skilgreina per fall þar sem þá fáum við ekki óvart strict mode á allt

function sum(a, a, c) {
  'use strict';
  return a + b + c;
}
// Uncaught SyntaxError:
// Duplicate parameter name not allowed
// in this context

function canYouSpotTheProblem() {
  'use strict';
  for (counter = 0; counter<10; counter++) {
    console.log('Happy happy');
  }
}
canYouSpotTheProblem();
// ReferenceError: counter is not defined

Villumeðhöndlun

  • JavaScript hefur stuðning við try catch eða exceptions
  • Kóði getur kastað villum: innbyggðum og okkar eigin
  • Grípum villur og gerum eitthvað í þeim

Kasta villu

  • Köstum villu með throw
    • Notum Error, innbyggðan hlut sem heldur utan um villur
    • throw Error('villa');
  • Fáum stacktrace með villum, hvaðan þær koma upp

Grípa villu

  • Ef við grípum ekki villu flýtur hún upp þar til hún veldur usla á efsta lagi
    • Í versta falli stoppar keyrslu
  • Getum gripið villur og gert eitthvað við þær með try catch

try {
  // e-ð sem kastar villu
} catch (e) {
  // gera e-ð í villu
}

finally

  • Með finally getum við keyrt kóða hvort sem við grípum villu eða ekki
    • try { /* .. */ } catch (e) { /* .. */ }
  • T.d. til að hreinsa upp, loka tengingum

try {
  // e-ð sem kastar villu
} catch (e) {
  // gera e-ð í villu
}

Algengar villur

Getum fengið upp villur þegar við köllum í innbyggð föll eða gerum eitthvað vitlaust

  • TypeError – villa þegar gildi er ekki af þeirri tegund sem við gerum ráð fyrir
  • ReferenceError – villa þegar reynt að eiga við óskilgreinda breytu
  • o.fl.

Hvaða villa?

Getum notað instanceof virkja sem athuga hvernig hlutur gildi er til að vita hvernig villa kom upp:

try {
  /* ... */
} catch (e) {
  if (e instanceof TypeError) {
    console.log('TypeError', e);
  } else if (e instanceof ReferenceError) {
    console.log('ReferenceError', e);
  }
}

Notkun

  • Þegar við notum kóða frá öðrum
  • Verjast villum sem geta stoppað keyrslu
  • Pössum okkur samt, getur falið villur og búið til erfiða bögga
    • Setjum utan um eins fáar línur í einu og við getum

Regular expressions

  • Höfum stuðning við reglulegar segðir í JavaScript
  • Skilgreinum mynstur sem er borið saman við texta til að vinna með hann
    • Kraftmikið, flókið og oft óskiljanlegt

Reglulegar segðir

  • Að skrifa og skilja reglulegar segðir er sér verkefni sem við ætlum ekki að fara djúpt í
  • Skoðum aðeins nokkur dæmi sem geta verið handhæg
  • Reglulegar segðir ber að varast, það eru yfirleitt betri leiðir í boði

Some people, when confronted with a problem, think “I know, I'll use regular expressions.” Now they have two problems.


  • Skilgreindar með
    • let r = new RegExp('segð', flags);
    • let r = /segð/flags;
  • segð er regluleg segð og flags er strengur sem stillir til hegðun

Segð

  • Strengur skrifaður samkvæmt reglum
    • Myndar stöðuvél sem finnur og framkvæmir það sem segð biður um
  • ^[0-9]{1,2}.*AB?C$
    • Strengur sem byrjar á einni eða tveim tölum, eftir fylgir einhver strengur og endar síðan á nákvæmlega "AC" eða "ABC"

Hagnýtir hlutir í segðum

  • [] skilgreinir bil
    • [abcd], a, b, c eða d
    • [0-9], allar tölur
    • [a-z], ASCII lágstafir (unicode er vesen!)

  • ^ – byrjun strengs
  • $ – endi strengs
  • [^] skilgreinir bil sem við viljum ekki
    • [^a-c] ekki ac

  • \swhitespace, bil, tab, nýlína
  • .+ – einu sinni eða oftar
  • .* – núll sinnum eða oftar
  • .{n,m} – n til m sinnum
  • ? – Gæti verið eða ekki

Flags

  • g - global, ekki stoppa eftir fyrstu niðurstöðu
  • i - ignore case, ekki vera hástafanæm
  • m - multiline, ^ og $ virka milli lína

Grúppur

  • Þegar við keyrum regex fáum við niðurstöður til baka
  • Hvaða strengur fannst
  • Ef við notum sviga til að skilgreina subexpressions, fáum við í niðurstöðum hver þeirra fundust

Föll í JavaScript


/foo/.test('foo bar baz');
/bar/.test('foo baz');
const re = /quick\s(brown).+?(jumps)/ig;
re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
'The Quick Brown Fox Jumps Over The Lazy Dog'
  .match(/quick\s(brown).+?(jumps)/ig);
'foo bar er ekki fooz baz'
  .replace(/foo/g, 'lol');