让我们谈谈一个良好的编程练习,即干净的代码。
我不想让这个主题很复杂,我认为有些过分。当然,随着时间的流逝和更大的资历,您的发展很高,但我想展示一些我相信所有人都应该做的时刻。
由于罗伯特·马丁(Robert C.他意识到编程大多数是在过程中进行维护。
清洁代码或干净的目的是简单的,具有清晰而客观的阅读。
一种肮脏的方式可能是造成这段时间的最大问题之一,很难理解另一个开发人员所做的事情或具有多种职责的功能,这使得很难改变。P> p>
但是,如果您现在从该区域开始,甚至没有寻找空缺,那就算了。专注于学习程序的基本程序,然后您是关于良好实践的。
我将在JavaScript中显示一些示例,但是该概念都适用于所有语言。
除了我称之为“市场模式”的那些,还有团队定义的模式。
免责声明:您不需要像我完全一样做,如果您认为定价要清洁,那可能没有错。
名称
// Bad
// Use explanatory variables
complete = true
elapsedTime = 5
date = moment().format('YYYY/MM/DD');
n = 'Raphael'
function addToDate(date, days) {
console.log(date.getDate() + days)
}
const date = new Date();
addToDate(date, 1);
在上面的示例中,我们看到变量和函数的名称并不能非常清楚该值。这只是从幻想中识别的方式中的摘录,但可以想象一个大型项目。
在代码中的“干净代码”注释中,应专门用于纪录片,并且不解释代码的功能,他的名称必须足够清晰。
一个很好的例子:
// Good
isComplete = true
elapsedTimeinDays = 5
currentDate = moment().format('YYYY/MM/DD');
userName = 'Raphael'
function addDaysToDate(todayDate, days) {
console.log(todayDate.getDate() + days)
}
const todayDate = new Date();
addToDate(todayDate, 1);
funã§ãµs
理想是一个函数没有超过3个部分。对于那些没有创建它的人来说,当许多人何时会很费力并生成测试时,预期价值是如何的。
具有多个责任的功能也被认为是一种好实践。
SOLID
的第一原则,单一责任原则或对NICA的责任原则说,班级只有一个理由改变,即,必须具有等级责任。在下面的课程中,该功能有两个职责,创建常规并发送电子邮件。
// Bad
// Use 2 or fewer ideally arguments
// The function must have single responsibility
function createUserAndSendEmail(name, city, jobId, active) {
console.log(name)
console.log('email sent')
}
createUserAndSendEmail('Raphael', 'Uberlândia', 5, true);
在VaniosParães的发明中,您可以通过对象。
还可以分开责任,用
发挥功能
责任。
// Good
function createUser({name, city, jobId, active}) {
console.log(name)
}
function sendEmail() {
console.log('email sent')
}
createUser({
name: 'Raphael',
city: 'Uberlândia',
jobId: 5,
active: true
});
sendEmail();
有条件
我们可以避免使用early return
的练习,包括您的习惯,您可以检查您想要的相反并尽可能返回以结束功能。
// Bad
const checkShipping = (totalToFreeShipping) => {
if (!isNaN(totalToFreeShipping)) {
if (totalPrice> totalToFreeShipping) {
setFreeShipping();
} else {
calculateShipping();
}
} else {
console.log('Value is not valid!')
}
}
checkShipping(80);
agora com早期返回
const checkShipping = (totalToFreeShipping) => {
// Early return. Validate possible problems before the “happy path”
if (isNaN(totalToFreeShipping)) return console.log('Value is not valid!');
if (totalPrice > totalToFreeShipping) {
setFreeShipping();
return;
}
calculateShipping();
}
checkShippin(80);
一个具有对象文字的示例,避免开关。
// Bad
const {role} = Subscriber
switch(role) {
case ADMINISTRATOR:
return <AdministratorUser />
case EDITOR:
return <EditorUser/>
case Subscriber:
return <SubscriberUser/>
}
// Good
const {role} = Subscriber
const components = {
ADMINISTRATOR: AdministratorUser,
EDITOR: EditorUser,
Subscriber: SubscriberUser
};
const Component = components[role];
return <Componenent />;
componentiza㧣o没有前端
使用较小的组件,我们可以重复使用代码,上下文隔离和最佳可读性。
存储库,示例:https://github.com/raphaelramos/cleancode-examples/
您也可以在现场编码中查看视频