JSFiddle - React, Tailwind, and code Playground
JavaScript
"use strict";
Hamburger.SIZE_SMALL = { price: 50, calories: 20, desc: 'SMALL' }
Hamburger.SIZE_BIG = { price: 100, calories: 40, desc: 'BIG' }
Hamburger.TOPPING_MAYO = { price: 20, calories: 5, desc: 'MAYO' }
Hamburger.TOPPING_CONDIMENT = { price: 15, calories: 0, desc: 'CONDIMENT' }
Hamburger.STUFFING_CHEESE = { price: 10, calories: 20, desc: 'CHEESE' }
Hamburger.STUFFING_SALADE = { price: 20, calories: 5 , desc: 'SALADE' }
Hamburger.STUFFING_POTATO = { price: 15, calories: 10, desc: 'POTATO' }
function Hamburger(size, stuffing) {
var availableSizes = [Hamburger.SIZE_SMALL, Hamburger.SIZE_BIG];
var availableStuffings = [Hamburger.STUFFING_CHEESE, Hamburger.STUFFING_SALADE, Hamburger.STUFFING_POTATO];
var availableToppings = [Hamburger.TOPPING_MAYO, Hamburger.TOPPING_CONDIMENT];
var invalidSizeErrorMessage = 'Invalid size. Only ' + availableSizes.map(size => size.desc).join`, ` + ' sizes are available';
validatePriceCaloriesConst(availableSizes, size, invalidSizeErrorMessage);
var invalidStuffingErrorMessage = 'Invalid stuffing. Only ' + availableStuffings.map(stuffing => stuffing.desc).join`, ` + ' stuffings are available';
validatePriceCaloriesConst(availableStuffings, stuffing, invalidStuffingErrorMessage);
this.price = size.price;
this.calories = size.calories;
this.price += stuffing.price;
this.calories += stuffing.calories;
function validatePriceCaloriesConst(consts, givenConst, errorMessage) {
for (var i = 0; i < consts.length; i++) {
if (givenConst
&& consts[i].price === givenConst.price
&& consts[i].calories === givenConst.calories
&& consts[i].desc === givenConst.desc) {
return;
}
}
throw new HamburgerException(errorMessage);
}
var toppingsSetted = [];
this.addTopping = function(topping) {
validatePriceCaloriesConst(availableToppings, topping, 'Invalid stuffing');
if (~toppingsSetted.indexOf(topping.desc)) {
throw new...