⊗jsSpExcDAE 148 of 294 menu

Exemplo de exceção com atributos data- em JavaScript

Suponha que, ao carregar a página, o servidor crie um código HTML que armazena o nome, o preço e a quantidade do produto comprado:

<div id="product" data-product="maçã" data-price="1000" data-amount="5"></div>

Vamos criar uma função que receberá uma referência ao elemento do produto e calculará o custo total do item (preço multiplicado pela quantidade):

function getCost(elem) { return elem.dataset.price * elem.dataset.amount; }

Vamos encontrar o custo do nosso produto:

let product = document.querySelector('#product'); let cost = getCost(product); alert(cost);

Agora, suponha a seguinte situação: devido a alguma falha no servidor, ele nos enviou um produto que não tem preço ou quantidade (ou ambos), por exemplo, assim:

<div id="product" data-product="maçã" data-price="1000"></div>

Se tentarmos calcular o custo do produto agora, o resultado exibido na tela será NaN. Concorda, não é muito informativo.

Isso significa que precisamos de alguma forma nos proteger contra a ausência dos atributos de que precisamos. Isso pode ser feito de duas maneiras. A primeira maneira é considerar isso um comportamento normal e simplesmente verificar a presença dos atributos necessários com instruções if:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { return 0; // retornamos algo, por exemplo, 0 ou null ou false } }

A segunda opção é considerar que a ausência do atributo data-price ou data-amount é uma situação excepcional. Nesse caso, lançaremos uma exceção:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { throw { name: 'ProductCostError', message: 'preço ou quantidade ausentes para o produto' }; } }

Qual das duas opções é mais apropriada aplicar aqui - é uma escolha do programador. Ele pode considerar o problema como parte do funcionamento normal do script ou como uma situação excepcional.

Digamos que decidimos que a situação é excepcional. Então, o código para obter o custo do produto ficaria assim:

let product = document.querySelector('#product'); try { let cost = getCost(product); alert(cost); } catch (error) { // reagimos de alguma forma à exceção }

Modifique meu código para que a função getCost lance dois tipos de exceções: se o preço estiver ausente e se a quantidade estiver ausente. Pense bem sobre os nomes dessas exceções. No bloco catch, exiba mensagens de erro diferentes para exceções de tipos diferentes.

uzuzcptbyms