Skip to main content

Huts eragin azkar, balidatu argudioak liburutegi dedikatu baten laguntzarekin

Azalpena

Denok dakigu argudioak egiaztatzea eta azkar huts egitea garrantzitsua dela ezkutuko erroreak ekiditeko (ikusi ereduaren aurkako kodearen adibidea behean). Bestela, irakurri zerbait programazio esplizituaren eta babes programazioaren gainean. Errealitatean, hori ekiditeko ohitura daukagu, kodea idazteak suposatzen duen gogaikarritasuna dela eta (adibidez pentsatu posta elektronikoa eta datak bezalako alorrak dituen JSON objektu hierarkiko bat balioztatzea). Joi eta Validator bezalako liburutegiek asko leuntzen dute lan hori

Wikipedia: programazio defentsiboa

Programazio defentsiboa softwarea eta iturburu kodea hobetzeko ikuspuntua da, kalitate orokorrari dagokionez, software errore eta arazo kopurua murriztuz. Iturburu kodea ulergarria izango bada, irakurgarria eta ulergarria izan behar da kode auditoria batean onartua izan dadin. Softwarea aurreikusteko moduko eran jokatzeko egin behar da, ustekabeko sarrerak edo erabiltzaile ekintzak gertatu arren

Kode adibidea: balioztatu JSON sarrera koplexua ‘Joi’ erabiliz

var kideEskema = Joi.object().keys({
pasahitza: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/),
jaioteguna: Joi.number().integer().min(1900).max(2013),
postaElektronikoa: Joi.string().email(),
});

function kideBerriaGehitu(kideBerria) {
// lehenengo baieztapena dator
Joi.assert(kideBerria, kideEskema); //jaurti balioztatzeak huts egiten badu
// bestelako logika hemen
}

Anti eredua: balioztatze ezak errore kaskarrak dakartza

Javascript
// deskontua positiboa bada, bidali erabiltzailea bere deskontu tiketak inprimatzera
function bidaliDeskontuTiketakInprimatzera(httpResponse, kidea, deskontua) {
if (deskontua != 0) {
httpResponse.redirect(`/deskontuInpresioBistaratzea/${kidea.id}`);
}
}

bidaliDeskontuTiketakInprimatzera(httpResponse, kiderenBat);
// deskontu parametroa pasatzea ahaztuta, orduan zergatik bidali da erabiltzailea deskontu pantailara?
Typescript
// deskontua positiboa bada bidali erabiltzailea bere deskontu tiketak inprimatzera
function bidaliDeskontuTiketakInprimatzera(
httpResponse: Response,
kidea: Member,
deskontua: number
) {
if (deskontua != 0) {
httpResponse.redirect(`/deskontuInpresioBistaratzea/${kidea.id}`);
}
}

bidaliDeskontuTiketakInprimatzera(httpResponse, kiderenBat, -12);
// deskontu parametro negatiboa pasatu dugu, We passed a negative parameter discount, orduan zergatik bidali da erabiltzailea deskontu pantailara?

Blog aipua: "Errore hauek zuzenean jaurti beharko zenituzke"

Joyent bloga

Kasu degeneratu bat da norbaitek funtzio asinkrono bat callback gabe deitzea atzera deirik egin gabe. Errore horiek berehala jaurti beharko zenituzke programa apurtuta baitago eta hori arazteak gutxienez pila arrastoa eta errorearen lekuko fitxategia berreskuratzea eskatzen du. Hori egiteko, funtzioaren hasieran argudio guztien motak balioztatzea gomendatzen dugu