Определение чистого: «без грязи, следов или пятен».

Написание чистого кода для меня делает нас лучшими программистами. Мне потребовалось некоторое время, чтобы понять, насколько я мог бы стать лучшим разработчиком, просто действительно заботясь о написании единственной строчки кода. Мы склонны игнорировать и забывать, что код, который мы пишем сегодня, будет прочитан кем-то другим в будущем или даже нами.

Вы когда-нибудь писали код, а послезавтра вы просто не знаете, кто написал этот код? Да, я знаю, что вы чувствовали, это очень опасное чувство.

Прежде чем мы начнем больше говорить о чистом коде, чрезвычайно важно поблагодарить автора Роберта К. Мартина или то, как все его знают, дядю Боб за книгу под названием «Чистый код», которая была впервые опубликована в 2008 году, и она была признана одной из самых продаваемых книг на Amazon. Если вы разработчик и собираетесь им стать, эта книга действительно к прочтению.

Таким образом, все, что я собираюсь указать здесь, будет для меня наиболее осмысленным, основываясь на том, что дядя Боб описывает в своей книге, и на других обсуждениях чистого кода.

Функции

  1. Разбивайте функции очень маленькими кусками, примерно по 4–6 строк.
  2. Его следует извлекать из большего числа функций, пока он не будет выполнять только одну задачу. (Принцип единой ответственности).
  3. Он должен получать не более трех аргументов, в идеале - 0 аргументов.
  4. Он НЕ должен получать логические значения
// We should not do this.
public calculate(hasDiscount: boolean, isAdmin: boolean): number {}
// Now imagine you reading the code function being called
calculate(true, false) // What does true means, what about false?

5. Если функция возвращает void, это должно иметь побочный эффект, это изменяет состояние системы.

6. Если функция не возвращает void, она НЕ должна иметь побочных эффектов.

7. Функции должны иметь более короткие имена, когда область видимости большая, и длинные имена, когда область действия короткая. Таким образом, когда функция крошечная, вы можете лучше назвать ее, чтобы действительно объяснить ее цель, но когда объем большой, вы не можете описать все, что она делает, не имея безумно длинного имени. В большинстве случаев эта длинная функция может быть преобразована в небольшие функции.

// Short Function Example
calculateTheAreaOfCircle(): number {
  return Math.PI * this.radius * this.radius
}

8. Функции не должны иметь более одного или двух уровней отступа.

Комментарии

  1. Комментарии должны быть сделаны на последнем ресурсе, попробуйте все остальное, кроме комментариев, если код не может объяснить себя.
  2. Если вам нужно добавить комментарий, например TODO, постарайтесь не коммитить его, иначе это будет НЕ TODO в будущем.
  3. Когда вы пишете отличное имя функции, нет необходимости добавлять комментарии.
  4. Если комментарий не имеет смысла, просто удалите его, когда найдете.

Операторы переключения

  1. По возможности избегайте их.
  2. Вероятно, вы можете использовать полиморфизм, чтобы избежать использования операторов switch.
// Before
export class Textbox {
  draw(): void {
    // Draw a textbox
  }
}
export class Checkbox {
  draw(): void {
    // Draw a checkbox
  }
}
export class RadioButton {
  draw(): void {
    // Draw a radiobutton
  }
}
// Every new control we must come back and add a case.
drawUiControl(type: string) {
  switch (type) {
    case "TEXTBOX":
      new TextBox().draw();
     break;
    case "CHECKBOX":
      new Checkbox().draw();
    break;
    default:
      new RadioButton().draw();
    break;
}

// After using Polymorphism
export abstract class UiControl {
  abstract draw(): void {
    // Draw a control
  }
}
export class Textbox extends UiControl {
  draw(): void {
    // Draw a textbox
  }
}
export class Checkbox extends UiControl {
  draw(): void {
    // Draw a checkbox
  }
}
export class RadioButton extends UiControl {
  draw(): void {
    // Draw a radiobutton
  }
}
// No more switch statements
drawUiControl(control: UiControl) {
  control.draw();
}

Именование переменных

  1. Имя переменной должно говорить нам о значении того, что эта переменная содержит. например, elapsedTimeInDays.
  2. Избегайте произносимых имен, например InfoRTC123, DataSkk44.
  3. Избегайте использования переменных с префиксом. например, m_value или f_test

СУХОЙ - Не повторяйся

Любой дублированный код должен быть извлечен для небольших функций, это сократит количество строк кода, а также облегчит нашу жизнь, когда необходимо внести изменения.

Предпочитайте исключения, а не коды ошибок

Когда нам нужно вернуть коды ошибок, нам нужно сопоставить каждый код ошибки, а также проверить возвращаемый код ошибки. В большинстве случаев выброс исключения намного удобнее и упрощает работу.

Не конец

Нам предстоит еще многому научиться, надеюсь, мы сможем помочь себе и другим разработчикам в написании чистого кода.

Начните писать чистый код сегодня и обязательно прочтите книгу «Чистый код».

Поддерживать связь :)