《代码规范》如何写出干净的代码,前端面试题及解析

耐心看完,你一定有所收获;

函数的构成

===============================================================

首先我们明确,函数与方法并没有本质上的区别,定义在对象上的函数我们一般称之为方法,两者其实非常的接近,另外干净的函数包含两部分:

第一部分是函数的定义,也就是如下这种:

function getName(type){

if(type===“name”){

return “oliver”;

}

else{

return “oliver yin”

}

}

第二部分则是函数的使用

getName(“name”)

只有两者都是易于阅读,逻辑清晰,分层明确,我们才能称之为干净的函数;

参数

============================================================

参数,是函数或者方法中非常重要的一个点,无论是参数的个数,还是顺序,又或者是名字,都可能会给读者阅读代码造成一定的困惑,因此,干净的函数的参数从个人感觉上应该具备以下几点:

合理的参数数量


个人认为,参数的数量控制需要遵循一个规范,那就是:当前环境下最小化的参数数量,怎么理解呢,就是当前函数阅读者在看到后可以快速的理解、阅读那么就是最小化的,接下来看个例子吧

// 登录函数

function login(username, password, identity, code){

// 登录代码

loginRequest({

username,

password,

identity,

code

}).then(res=>{})

}

// 执行登录

login(“oliver”, “123456”, “admin”, “123”)

这个函数接收4个变量作为参数,从函数的定义上看4个变量的含义都是一目了然,即使不写注释,我们基本也能猜到是什么意思,分别是:用户名,密码,身份和验证码,名字和个数看上去觉得都相对比较合理,但是我们说,干净的函数还要包括使用,也就是下面执行登录时调用函数,由于login接收了4个参数,那么对于顺序的输入就变得十分重要,如果输错,那么函数的运行就会出现异常,因此显然这边就相对没有那么合理,那我们优化一下呢

// 登录函数

function login(user){

// 登录代码

loginRequest(user).then(res=>{})

}

const user={

username,

password,

identity,

code

}

// 执行登录

login(user)

这么改后,登录函数和执行函数都改成了接收一个对象作为参数,更上面相比好处就是此时我们不再需要关心参数的数量和顺序了,并且在扩展性上得到了提升,很明显这种就更合理;

再来看一个例子

// 接收两个参数

function log(msg, isError){

if(isError){

console.error(msg)

}

else{

console.log(msg)

}

}

log(“oliver”,false)

相对于上面那个例子,这个明显问题更大,别的不说,仅从使用者的角度来看, 根本理解不了第二个参数的意思是什么,需要阅读函数内部的逻辑才可以理解,给使用带来了一定的困难,那么这种代码很明显就可以拆分,参数的数量并不合理

// 重构

function log(msg){

console.log(msg)

}

function logError(msg){

console.error(msg)

}

当一个函数变成两个函数以后,明显对于代码的理解上来说有了非常大的提升,阅读的时候由于其单一性,因此并不会给理解带来困扰;

动态参数数量


上面说的参数数量其实都是固定的,那么还有一种函数或者方法,它的参数数量是不固定的,比如

const total = sum(1, 2, 3, 4, 5, 6);

const totalNext = sum(10, 11, 12, 14);

function sum(…numbers){

let total = 0;

for(let number of numbers){

total += number;

}

return total;

}

通过阅读,我们知道这是一个求和的函数,并且参数的数量也是不固定的,那么这种函数需要优化吗,我个人认为是需要的,因为这种函数并不符合我们上面说的最小参数数量规则,那么怎么改,其实很简单

const total = sum([1, 2, 3, 4, 5, 6]);

const totalNext = sum([10, 11, 12, 14]);

简单的就是将其变成一个数组,那么参数的数量就会变得固定有且只有一个,这种就会变得相对合理一些,但是可能会有小伙伴问,上面那种不行吗?看着也很清晰,很合理,其实也行,不要忘记干净代码的核心就是代码结构清晰,易于理解,容易维护,只要团队成员一致觉得可行,那么其实就是最合理的,所谓的规则就是在为团队服务,并不是一成不变的东西;

编码规则

==============================================================

在函数体的编码过程中,有一些我个人认为是非常有意思的注意点,这些注意点可以帮助我们更好的写出干净的代码;

避免直接输出参数


比如某些情况下,我们可能需要对一个对象进行加工处理,之后再将这个对象返回,先看一个最不推荐的方式

// 不推荐

function createId(user){

user.id = “oliver”

// …其他一些操作

}

createId({name: “Oliver”})

这种为什么不推荐,因为在这个函数里面对用户这个对象进行了操作,这种操作从名字上看就是不可预知的,对于未知操作我个人非常不推荐因为会造成不可控的结果,稍微好一点的,那么会从函数的名字上会有体现,比如,明确需求是给用户添加一个id,那么代码可能如下:

// 相对合理些

function addId(user){

user.id = “oliver”

}

addId({name: “Oliver”})

从名字上看,我们能知道这个函数的作用就是为用户添加一个id,因此和第一种比,这种函数我们是能预知到结果的,因此相对合理些,那么有没有更合理的方式,那肯定有的

// 个人觉得最优

class User{

constructor(name){

this.name = name;

}

addId(){

this.id = “oliver”;

}

}

const customer = new User(“Oliver”);

customer.addId();

跟上面两种相比,是不是更加合理一些,我们实力化了一个用户,并且通过执行addId这个方法为customer添加了id这个属性,不管使用代码的结构上还是理解上都相对很清晰,因此,我个人认为这种方法相对最优;

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

最后前端到底应该怎么学才好?

如果你打算靠自己摸索自学,那么你首先要了解学习前端的基本大纲,这是你将要学习的主要内容,理解以及掌握好这些内容,便可以找到一份初级的前端开发工作。你还需要有一套完整的前端学习教程,作为初学者最好的方式就是看视频教程学习,初学者容易理解接受。

不要选择买书学习,这样的方式没有几个人能学会,基本都是看不下去书,也看不懂书。如果喜欢看书的学弟,可以买一些经典的书籍作为辅助即可,主要还是以看教程为主。每天抽出固定几个小时学习,做好长期学习的准备。学习编程并不是每天光看视频,你学习编程最重要的目的是为了编写软件产品,提供给大众使用,所以用手写出代码实现功能才是我们要做的事情。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

29119539cde243f97.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h6aXQ0OTQ4MDE4MzE=,size_16,color_FFFFFF,t_70#pic_center)

在这里插入图片描述

在这里插入图片描述

  • 29
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值