Переводчик: Front-end Xiaozhi
оригинал:Dev induct.com/blog post/22…
Ставь лайк и смотри, поиск в WeChat【Переезд в мир】Обратите внимание на этого человека, который не имеет большого фабричного прошлого, но имеет восходящий и позитивный настрой. эта статья
GitHub
GitHub.com/QQ449245884…Он был включен, статьи были классифицированы, и многие мои документы и учебные материалы были систематизированы.
Все говорили, что нет проекта для написания резюме, поэтому я помог вам найти проект, и это было с бонусом.【Учебник по строительству】.
Введение
Если вы сосредоточитесь на самом коде и на том, как он написан, а не на том, работает ли он, тогда вы будете писать код определенного калибра. Профессиональные разработчики будут писать код для себя в будущем и для «других», а не только тот код, который работает сегодня.
Исходя из этого, лаконичный код можно определить как не требующий пояснений, простой для понимания и легко изменяемый или расширяемый.
Следующий список - хороший способ написать, только для справки, конечно, если у вас есть лучший способ, добро пожаловать, чтобы оставить сообщение.
Если вы хотите читать больше качественных статей, нажмите [Блог GitHub][1], и каждый год вас ждут сотни высококачественных статей!
1. Строгая проверка типов
использовать===
заменять==
// 如果处理不当,它会极大地影响程序逻辑。这就像,你想向左走,但由于某种原因,你向右走
0 == false // true
0 === false // false
2 == "2" // true
2 === "2" // false
// 例子
const value = "500";
if (value === 500) {
console.log(value);
// 条件不成立,不会进入
}
if (value === "500") {
console.log(value);
// 条件成立,会进入
}
2. Переменные
Назовите переменные хорошо известным и осмысленным образом, чтобы, увидев их, их было легко найти и понять.
Плохой способ:
let daysSLV = 10;
let y = new Date().getFullYear();
let ok;
if (user.age > 30) {
ok = true;
}
Хороший способ:
const MAX_AGE = 30;
let daysSinceLastVisit = 10;
let currentYear = new Date().getFullYear();
...
const isUserOlderThanAllowed = user.age > MAX_AGE;
Не добавляйте в имена переменных лишних нежелательных слов.
Плохой способ:
let nameValue;
let theProduct;
Хороший способ:
let name;
let product;
Не сокращайте переменный контекст.
Плохой способ:
const users = ["John", "Marco", "Peter"];
users.forEach(u => {
doSomething();
doSomethingElse();
// ...
// ...
// ...
// ...
// 当上面代码很多的时候 ,这 `u` 是什么鬼
register(u);
});
Хороший способ:
const users = ["John", "Marco", "Peter"];
users.forEach(user => {
doSomething();
doSomethingElse();
// ...
// ...
// ...
// ...
register(user);
});
Не добавляйте ненужный контекст.
Плохой способ:
const user = {
userName: "John",
userSurname: "Doe",
userAge: "28"
};
...
user.userName;
Хороший способ:
const user = {
name: "John",
surname: "Doe",
age: "28"
};
...
user.name;
3. Функция
Используйте длинные описательные имена. Учитывая, что функция выражает какое-то поведение, имя функции должно быть глаголом или фразой, указывающей на ее намерение и назначение аргументов. Имена функций должны описывать то, что они делают.
Плохой способ:
function notif(user) {
// implementation
}
Хороший способ:
function notifyUser(emailAddress) {
// implementation
}
Избегайте использования большого количества параметров. В идеале функция должна указывать два или меньше аргументов. Чем меньше параметров, тем проще тестировать функцию, и объекты можно использовать для большего количества параметров.
Плохой способ:
function getUsers(fields, fromDate, toDate) {
// implementation
}
Хороший способ:
function getUsers({ fields, fromDate, toDate }) {
// implementation
}
getUsers({
fields: ['name', 'surname', 'email'],
fromDate: '2019-01-01',
toDate: '2019-01-18'
});
Вместо этого используйте параметры по умолчанию||
действовать
Плохой способ:
function createShape(type) {
const shapeType = type || "cube";
// ...
}
Хороший способ:
function createShape(type = "cube") {
// ...
}
Функция должна делать только одну вещь, не делайте несколько вещей в одной функции.
Плохой способ:
function notifyUsers(users) {
users.forEach(user => {
const userRecord = database.lookup(user);
if (userRecord.isVerified()) {
notify(user);
}
});
}
Хороший способ:
function notifyVerifiedUsers(users) {
users.filter(isUserVerified).forEach(notify);
}
function isUserVerified(user) {
const userRecord = database.lookup(user);
return userRecord.isVerified();
}
Используйте Object.assign для установки значений объекта по умолчанию.
Плохой способ:
const shapeConfig = {
type: "cube",
width: 200,
height: null
};
function createShape(config) {
config.type = config.type || "cube";
config.width = config.width || 250;
config.height = config.height|| 250;
}
createShape(shapeConfig);
Хороший способ:
const shapeConfig = {
type: "cube",
width: 200
// Exclude the 'height' key
};
function createShape(config) {
config = Object.assign(
{
type: "cube",
width: 250,
height: 250
},
config
);
...
}
createShape(shapeConfig);
Не используйте флаги в качестве аргументов, потому что они говорят функции делать больше, чем следует.
Плохой способ:
function createFile(name, isPublic) {
if (isPublic) {
fs.create(`./public/${name}`);
} else {
fs.create(name);
}
}
Хороший способ:
function createFile(name) {
fs.create(name);
}
function createPublicFile(name) {
createFile(`./public/${name}`);
}
Не засоряйте глобальные переменные. Если вам нужно расширить существующий объект, используйте классы ES и наследование вместо создания функций в цепочке прототипов собственного объекта.
Плохой способ:
Array.prototype.myFunc = function myFunc() {
// implementation
};
Хороший способ:
class SuperArray extends Array {
myFunc() {
// implementation
}
}
4. Условия
Избегайте использования отрицательных условий.
Плохой способ:
function isUserNotBlocked(user) {
// implementation
}
if (!isUserNotBlocked(user)) {
// implementation
}
Хороший способ:
function isUserBlocked(user) {
// implementation
}
if (isUserBlocked(user)) {
// implementation
}
Используйте условное сокращение. Это может быть тривиально, но об этом стоит упомянуть. Используйте этот метод только для логических значений, и если вы уверены, что значение не будетundefined
илиnull
, используйте этот метод.
Плохой способ:
if (isValid === true) {
// do something...
}
if (isValid === false) {
// do something...
}
Хороший способ:
if (isValid) {
// do something...
}
if (!isValid) {
// do something...
}
По возможности избегайте условных выражений и используйте вместо них полиморфизм и наследование.
Плохой способ:
class Car {
// ...
getMaximumSpeed() {
switch (this.type) {
case "Ford":
return this.someFactor() + this.anotherFactor();
case "Mazda":
return this.someFactor();
case "McLaren":
return this.someFactor() - this.anotherFactor();
}
}
}
Хороший способ:
class Car {
// ...
}
class Ford extends Car {
// ...
getMaximumSpeed() {
return this.someFactor() + this.anotherFactor();
}
}
class Mazda extends Car {
// ...
getMaximumSpeed() {
return this.someFactor();
}
}
class McLaren extends Car {
// ...
getMaximumSpeed() {
return this.someFactor() - this.anotherFactor();
}
}
5. Класс
class
— это новый синтаксический сахар в JavaScript. Все работает так же, как и предыдущий прототип, только теперь он выглядит иначе, и вы должны предпочесть их обычным функциям ES5.
Плохой способ:
const Person = function(name) {
if (!(this instanceof Person)) {
throw new Error("Instantiate Person with `new` keyword");
}
this.name = name;
};
Person.prototype.sayHello = function sayHello() { /**/ };
const Student = function(name, school) {
if (!(this instanceof Student)) {
throw new Error("Instantiate Student with `new` keyword");
}
Person.call(this, name);
this.school = school;
};
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
Student.prototype.printSchoolName = function printSchoolName() { /**/ };
Хороший способ:
class Person {
constructor(name) {
this.name = name;
}
sayHello() {
/* ... */
}
}
class Student extends Person {
constructor(name, school) {
super(name);
this.school = school;
}
printSchoolName() {
/* ... */
}
}
Используйте ссылку. Многие библиотеки (например, jQuery и Lodash) используют этот шаблон. В классе просто возвращайтесь в конце каждой функцииthis
Вы можете связать с ним больше методов этого класса.
Плохой способ:
class Person {
constructor(name) {
this.name = name;
}
setSurname(surname) {
this.surname = surname;
}
setAge(age) {
this.age = age;
}
save() {
console.log(this.name, this.surname, this.age);
}
}
const person = new Person("John");
person.setSurname("Doe");
person.setAge(29);
person.save();
Хороший способ:
class Person {
constructor(name) {
this.name = name;
}
setSurname(surname) {
this.surname = surname;
// Return this for chaining
return this;
}
setAge(age) {
this.age = age;
// Return this for chaining
return this;
}
save() {
console.log(this.name, this.surname, this.age);
// Return this for chaining
return this;
}
}
const person = new Person("John")
.setSurname("Doe")
.setAge(29)
.save();
Суммировать
Это лишь малая часть улучшения кода. В обычной жизни упомянутые здесь принципы — это принципы, которым люди обычно не следуют. Они пытаются это делать, но по разным причинам не придерживаются этого. Возможно, в начале проекта код лаконичен, но когда дело доходит до соблюдения сроков, эти принципы часто игнорируются и переносятся в раздел «TODO» или «REFACTOR». На этом этапе ваш клиент предпочитает, чтобы вы укладывались в срок, а не писали чистый код.
общаться
Статья постоянно обновляется каждую неделю. Вы можете выполнить поиск «Big Move to the World» в WeChat, чтобы прочитать и обновить ее как можно скорее (на одну или две статьи раньше, чем в блоге). Эта статья находится на GitHub.GitHub.com/QQ449245884…Он был включен, и многие мои документы были разобраны. Добро пожаловать в Звезду и совершенство. Вы можете обратиться в тестовый центр для ознакомления во время собеседования. Кроме того, обратите внимание на паблик-аккаунт и ответьте в фоновом режиме.Благосостояние, вы можете увидеть преимущества, вы знаете.