I've made a simple console application using JavaScript, NodeJS and yargs.
index.js
This is the startup file.
#!/usr/bin/env node
'use strict';
const yargs = require('yargs');
const argv = yargs
.option('celsius', {alias: 'c', default: false})
.option('fahrenheit', {alias: 'f', default: false})
.option('kelvin', {alias: 'k', default: false})
.help('h')
.argv;
let value = argv._[0];
if (!value) {
console.log('You need to pass a value to be converted.');
} else {
const convert = require('./convert')
if (argv.celsius) {
console.log(convert.fromCelsius(value));
} else if (argv.fahrenheit) {
console.log(convert.fromFahrenheit(value));
} else if (argv.kelvin) {
console.log(convert.fromKelvin(value));
} else {
console.log("You need to pass a valid flag.")
}
}
convert.js
This is required by index.js in order to transform values. Each scale has it own file.
'use strict';
let fixFloat = (value) => parseFloat(value).toFixed(2);
let fromCelsius = (value) => {
const conversion = require('./celsius');
let kelvin = fixFloat(conversion.toKelvin(value));
let fahrenheit = fixFloat(conversion.toFahrenheit(value));
return `${value}°C = ${fahrenheit}°F = ${kelvin}K`;
};
let fromFahrenheit = (value) => {
const conversion = require('./fahrenheit');
let celsius = fixFloat(conversion.toCelsius(value));
let kelvin = fixFloat(conversion.toKelvin(value));
return `${value}°F = ${celsius}°C = ${kelvin}K`;
};
let fromKelvin = (value) => {
const conversion = require('./kelvin');
let celsius = fixFloat(conversion.toCelsius(value));
let fahrenheit = fixFloat(conversion.toFahrenheit(value));
return `${value}K = ${celsius}°C = ${fahrenheit}°F`;
};
module.exports = {
fromCelsius,
fromFahrenheit,
fromKelvin,
};
celsius.js
'use strict';
let toKelvin = (value) => value + 273.15;
let toFahrenheit = (value) => (value * (9 / 5)) + 32;
module.exports = {
toKelvin,
toFahrenheit,
};
fahrenheit.js
'use strict';
let toCelsius = (value) => (value - 32) * (5 / 9);
let toKelvin = (value) => (value + 459.67) * (5 / 9);
module.exports = {
toCelsius,
toKelvin,
};
kelvin.js
'use strict';
let toCelsius = (value) => value - 273.15;
let toFahrenheit = (value) => 1.8 * toCelsius(value) + 32;
module.exports = {
toCelsius,
toFahrenheit,
};
You can see it running by installing it via npm
npm i -g thermo.js
thermo 10 -celsius
=> 10°C = 50.00°F = 283.15K
Is my implementation good? This is my first non-web JavaScript program. I want to make the code more idiomatic. I think I messed up some of ES6 variables declaration.