提高代码优雅度:文件大小单位转换的最佳实践
在日常开发中,我们经常需要将文件大小从 KB 转换为 MB、GB 甚至 TB,以提供更直观的信息展示。
今天,我们就来看看如何优雅地实现这一功能,并推荐一种更简洁高效的代码写法。
传统写法:繁琐的 if-else
function formatSizeUnits(kb) {
var result = '';
if (kb < 1024) {
result = kb + ' KB';
} else if (kb < 1024 * 1024) {
result = (kb / 1024).toFixed(2) + ' MB';
} else if (kb < 1024 * 1024 * 1024) {
result = (kb / 1024 / 1024).toFixed(2) + ' GB';
} else {
result = (kb / 1024 / 1024 / 1024).toFixed(2) + ' TB';
}
return result;
}
这段代码能够正确地完成任务,但存在明显的问题:
- 冗余的 if-else 判断 每种单位都需要写一遍,代码不够简洁。
- 可拓展性差 如果以后需要支持 PB(Petabyte**)或者更大的单位,还需要继续添加 if-else。
- 重复计算 1024 操作重复出现,影响可读性。
推荐写法:更优雅的 while循环
function formatSizeUnits(kb) {
let units = ['KB', 'MB', 'GB', 'TB', 'PB'];
let unitIndex = 0;
while (kb >= 1024 && unitIndex < units.length - 1) {
kb /= 1024;
unitIndex++;
}
return `${kb.toFixed(2)} ${units[unitIndex]}`;
}
这段代码的优势:
✅ 结构更清晰 —— while 循环逐级转换单位,逻辑更加直观。
✅ 更易拓展 —— 只需在 units 数组中添加新的单位,无需修改核心逻辑。
✅ 减少冗余计算 —— 避免了多次 if-else 判断,提高可读性。
代码示例:
console.log(formatSizeUnits(500)); // "500.00 KB"
console.log(formatSizeUnits(2048)); // "2.00 MB"
console.log(formatSizeUnits(5 * 1024 ** 3)); // "5.00 TB"
结语
代码不仅要能完成任务,更要追求简洁、可读、可拓展。通过使用 while 循环,我们不仅减少了代码量,还让逻辑更加清晰,避免了硬编码**的 if-else 结构。希望这篇文章能帮助你在日常开发中写出更优雅的代码!
如果你觉得有用,欢迎 点赞、收藏、转发