Más que un ejercicio de 'qué pasaría si', me preguntaba si lo siguiente era posible:
output = convert(1200).from('mm').to('inches')donde 'from' y 'to' son funciones (o propiedades) de 'convert' a diferencia de las más estándar:
output = convert(1200, 'mm', 'inches') or: output = convert(value = 1200, from = 'mm', to = 'inches')addendum : Supongo que lo más cercano sería:
output = convert({ value: 1200, from: 'mm', to: 'inches' }); function convert({ value, from, to } = {}){ // ...do stuff here... }Si es posible. Ejemplo:
function convert(val) { const units = { mm: 1, cm: 10, dm: 100, m: 1000, in: 25.4, inches: 25.4, inch: 25.4, ft: 304.8, feet: 304.8, foot: 304.8, yd: 914.4, yard: 914.4, yards: 914.4 } return { from(unit1) { return { to(unit2) { return val * units[unit1] / units[unit2]; } }; } }; } const output = convert(1200).from('mm').to('inches'); console.log(output); console.log(convert(47.24409448818898).from('inches').to('mm')); console.log(convert(123).from('m').to('yards')); convert devuelve un objeto con un método from . from devuelve un objeto con un método to . to devolver un número. Los valores temporales se almacenan en un cierre.
Cree un constructor de objetos con las funciones convert, from y to, y las propiedades para almacenar los valores pasados a cada función correspondiente cuando se llame. Tanto en las funciones convert como from , devuelva la instancia a través de 'return this' y devuelva la respuesta en la función to .
https://www.w3schools.com/JS/js_object_constructors.asp
function Converter() { this.value = 0; this.fromUnit = ''; this.toUnit = ''; this.convert = function(value) { ... return this } this.from = function(unit) {... return this} this.to = function(unit) {... return answer} } const converter = new Converter() converter.convert(...).from(...).to(...)También puede seguir la sintaxis de clase en ES6 JavaScript. https://www.w3schools.com/Js/js_classes.asp
Al tratar esto como una sintaxis en lugar de una pregunta de diseño, aquí hay una solución fea pero funcional.
Sin embargo, me gustaría alentarlo a refactorizarlo o reconsiderar si esta API funcional es necesaria.
const convert = (num) => ({ from: (inputUnit) => { switch (inputUnit) { case "mm": return { to: (outputUnit) => { switch (outputUnit) { case "inches": return num / 25.4; } }, }; } }, }); console.log( convert(1200).from("mm").to("inches") )