前端代码可读性优化:让你的代码不再像天书

前端代码可读性优化:让你的代码不再像天书

毒舌时刻

代码可读性?听起来就像是前端工程师为了显得自己很专业而特意搞的一套复杂流程。你以为随便加几个注释就能提高代码可读性?别做梦了!到时候你会发现,注释比代码还多,维护起来比代码还麻烦。

你以为变量名取长一点就能提高可读性?别天真了!过长的变量名会让代码变得臃肿,反而影响可读性。还有那些所谓的代码规范,看起来高大上,用起来却各种问题。

为什么你需要这个

  1. 提高可维护性:良好的代码可读性可以提高代码的可维护性,减少维护成本。
  2. 减少错误:可读性高的代码更容易理解,减少出错的概率。
  3. 团队协作:良好的代码可读性可以便于团队成员之间的协作,减少沟通成本。
  4. 代码复用:可读性高的代码更容易被复用,提高开发效率。
  5. 降低学习成本:新团队成员可以更快地理解代码,降低学习成本。

反面教材

// 1. 变量名不清晰 function calc(a, b, c) { let x = a + b; let y = x * c; return y; } // 2. 函数过长 function processData(data) { let result = []; for (let i = 0; i < data.length; i++) { if (data[i].status === 'active') { let item = { id: data[i].id, name: data[i].name, value: data[i].value * 2 }; result.push(item); } } return result; } // 3. 注释过多或过少 // 计算两个数的和 function add(a, b) { // 声明结果变量 let result; // 计算和 result = a + b; // 返回结果 return result; } // 4. 代码嵌套过深 function getUsers(role, active) { return users.filter(user => { if (user.role === role) { if (user.active === active) { return true; } } return false; }); } // 5. 命名不一致 const user_name = 'John'; const userAge = 30; function getUserInfo() { return { user_name, userAge }; } 

问题

  • 变量名不清晰,难以理解其用途
  • 函数过长,难以维护
  • 注释过多或过少,影响代码可读性
  • 代码嵌套过深,难以理解逻辑
  • 命名不一致,影响代码一致性

正确的做法

命名规范

// 1. 变量名 // 不推荐 let x = 10; let y = 'John'; // 推荐 let counter = 10; let userName = 'John'; // 2. 常量名 // 不推荐 const pi = 3.14; const maxItems = 100; // 推荐 const PI = 3.14; const MAX_ITEMS = 100; // 3. 函数名 // 不推荐 function calc(a, b) { return a + b; } // 推荐 function calculateSum(a, b) { return a + b; } // 4. 类名 // 不推荐 class user { constructor(name) { this.name = name; } } // 推荐 class User { constructor(name) { this.name = name; } } 

代码结构

// 1. 函数长度 // 不推荐 function processUserData(userData) { // 100行代码... } // 推荐 function processUserData(userData) { const validatedData = validateUserData(userData); const processedData = transformUserData(validatedData); return saveUserData(processedData); } function validateUserData(data) { // 验证逻辑 } function transformUserData(data) { // 转换逻辑 } function saveUserData(data) { // 保存逻辑 } // 2. 代码缩进 // 不推荐 function calculate(a,b){ if(a>b){ return a; }else{ return b; } } // 推荐 function calculate(a, b) { if (a > b) { return a; } else { return b; } } // 3. 代码空行 // 不推荐 function calculateSum(a, b) { let sum = a + b; console.log(sum); return sum; } // 推荐 function calculateSum(a, b) { let sum = a + b; console.log(sum); return sum; } 

注释规范

// 1. 函数注释 /** * 计算两个数的和 * @param {number} a - 第一个数 * @param {number} b - 第二个数 * @returns {number} 两个数的和 */ function calculateSum(a, b) { return a + b; } // 2. 复杂逻辑注释 function processArray(array) { // 过滤掉空值 const filteredArray = array.filter(item => item !== null && item !== undefined); // 对每个元素进行处理 const processedArray = filteredArray.map(item => { // 转换为大写 return item.toUpperCase(); }); return processedArray; } // 3. 避免过度注释 // 不推荐 // 计算两个数的和 function add(a, b) { // 声明结果变量 let result; // 计算和 result = a + b; // 返回结果 return result; } // 推荐 function add(a, b) { return a + b; } 

代码简化

// 1. 简化条件语句 // 不推荐 if (user && user.isActive && user.role === 'admin') { // 管理员逻辑 } // 推荐 const isAdmin = user?.isActive && user?.role === 'admin'; if (isAdmin) { // 管理员逻辑 } // 2. 使用箭头函数 // 不推荐 function multiply(a, b) { return a * b; } // 推荐 const multiply = (a, b) => a * b; // 3. 使用解构赋值 // 不推荐 function getUserInfo(user) { const name = user.name; const age = user.age; return { name, age }; } // 推荐 function getUserInfo({ name, age }) { return { name, age }; } // 4. 使用模板字符串 // 不推荐 const message = 'Hello ' + userName + ', welcome to ' + websiteName; // 推荐 const message = `Hello ${userName}, welcome to ${websiteName}`; 

毒舌点评

代码可读性确实很重要,但我见过太多开发者滥用这个特性,导致代码变得过于冗长。

想象一下,当你为了提高代码可读性,写了大量的注释和长变量名,结果导致代码量增加了几倍,这真的值得吗?

还有那些过度追求代码规范的开发者,为了满足规范的要求,写了大量的冗余代码,结果导致代码变得难以理解和维护。

所以,在优化代码可读性时,一定要把握好度。不要为了可读性而牺牲代码的简洁性,要根据实际情况来决定代码的风格。

当然,对于大型项目来说,良好的代码可读性是必要的。但对于小型项目,过度的代码可读性优化反而会增加开发成本和维护难度。

最后,记住一句话:代码可读性的目的是为了提高代码的可维护性,而不是为了炫技。如果你的代码可读性优化导致代码变得更难理解或更难维护,那你就失败了。

Read more

目标检测数据集——无人机视觉VisDrone数据集

目标检测数据集——无人机视觉VisDrone数据集

随着无人机技术的飞速发展,无人机在航拍、监控、农业、物流等领域的应用日益广泛。与此同时,无人机视角下的视觉任务,如目标检测、目标跟踪和场景理解,也成为了计算机视觉研究的热点。然而,相比传统的地面视角数据集,无人机视角下的图像具有高度变化、小目标密集、复杂背景等独特挑战,这对现有算法提出了更高的要求。 为了应对这些挑战并推动无人机视觉技术的发展,天津大学机器学习与数据挖掘实验室推出了 VisDrone数据集。作为一个大规模、标注精细的无人机视觉数据集,VisDrone 不仅涵盖了丰富的场景和多样化的目标类别,还为研究人员提供了一个极具挑战性的测试平台。无论是小目标检测的精度提升,还是密集场景下的鲁棒性优化,VisDrone 都成为了学术界和工业界不可或缺的资源。该数据集采集自中国14个不同城市,覆盖复杂城市场景、交通枢纽、密集人群等多种环境。 VisDrone官方Github下载渠道可点击访问: https://github.com/VisDrone/VisDrone-Dataset?tab=readme-ov-file 下载的数据集为VisDrone2019-DET-train

【滤波跟踪】机器人未知测量噪声的扩展卡尔曼滤波同时定位与地图绘制【含Matlab源码 15186期】含报告

【滤波跟踪】机器人未知测量噪声的扩展卡尔曼滤波同时定位与地图绘制【含Matlab源码 15186期】含报告

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞💞💞💞💞💞💞💞💞💥💥💥💥💥💥💥💥 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 🔊博主简介:985研究生,Matlab领域科研开发者; 🚅座右铭:行百里者,半于九十。 🏆代码获取方式: ZEEKLOG Matlab武动乾坤—代码获取方式 更多Matlab信号处理仿真内容点击👇 ①Matlab信号处理(进阶版) ⛳️关注ZEEKLOG Matlab武动乾坤,更多资源等你来!! ⛄一、机器人未知测量噪声的扩展卡尔曼滤波同时定位与地图绘制 1 扩展卡尔曼滤波(EKF-SLAM)概述 扩展卡尔曼滤波(EKF)是解决同时定位与地图绘制(SLAM)问题的经典方法。EKF-SLAM通过非线性系统的高斯近似,将机器人位姿和地图特征的状态估计联合在一个概率框架中。当测量噪声未知时,需采用自适应或鲁棒方法增强滤波器性能。 2 未知测

树莓派4B连接大疆M300无人机全网最细教程

树莓派4B连接大疆M300无人机全网最细教程

注:本教程适用于树莓派4B连接大疆M300_RTK无人机,若是其余型号可以参考本文思路,但是具体细节请前往官方教程或大疆开发者论坛查找,第三方开发板连接大疆无人机,不同型号之间会有很多细节差异,请确认自己的型号然后针对性查找 官方教程网址:Payload SDK (官方的是树莓派4B连接M350!并非M300,实现细节完全不同,请慎重查看) 大疆开发者论坛网址:Payload SDK – 大疆创新SDK技术支持论坛 (优点:几乎能找到所有问题的解决方法;缺点:太零散了,找解决方法如同大海捞针) 1 硬件准备 1.1 硬件选型 * 无人机型号:M300_RTKM300顶部一共有三个接口,其中OSDK端口和云台口(Payload SDK Port)可以用来运行PSDK程序,TypeC调参口,则是用来与电脑连接,打开DJI Assistant2软件后,可以升级无人机固件,导出日志,使用模拟器,绑定负载等。 1.FPV摄像头13.左视和右视红外感知系统25.调参接口2.前视红外感知系统14.

win11本地部署openclaw实操第2集-让小龙虾具有telegram机器人能力和搜索网站能力

win11本地部署openclaw实操第2集-让小龙虾具有telegram机器人能力和搜索网站能力

1 按照第一集的部署完成后,我们就开始考虑给小龙虾增加telegram机器人和搜索网站能力,实现效果如下: 2 telegram机器人能力部署 C:\Users\Administrator.openclaw的配置文件openclaw.json 增加一段内容 "channels":{"telegram":{"enabled": true, "dmPolicy":"pairing", "botToken":"你的telegram机器人的token", "groupPolicy":"allowlist", "streamMode":"partial", "network":{"