1. Комментарии и Документация - Идеальный код на PHP и

Лекция



Это продолжение увлекательной статьи про идеальный код.

...

шаблон, используемый во многих библиотеках, например в PHPUnit и Doctrine. Он делает вашу кодовую базу более выразительной и менее многословной. Поэтому я рекомендую объединять методы в цепочки (chaining), и вы сами увидите, насколько чистым станет ваш код. В конце каждой функции класса просто возвращайте this — и сможете прикреплять к нему следующий метод класса.

Плохо:

class Car {
    private $make, $model, $color;

    public function __construct() {
        $this->make = 'Honda';
        $this->model = 'Accord';
        $this->color = 'white';
    }

    public function setMake($make) {
        $this->make = $make;
    }

    public function setModel($model) {
        $this->model = $model;
    }

    public function setColor($color) {
        $this->color = $color;
    }

    public function dump() {
        var_dump($this->make, $this->model, $this->color);
    }
}

$car = new Car();
$car->setColor('pink');
$car->setMake('Ford');
$car->setModel('F-150');
$car->dump();

Хорошо:

class Car {
    private $make, $model, $color;

    public function __construct() {
        $this->make = 'Honda';
        $this->model = 'Accord';
        $this->color = 'white';
    }

    public function setMake($make) {
        $this->make = $make;

        // NOTE: Returning this for chaining
        return $this;
    }

    public function setModel($model) {
        $this->model = $model;

        // NOTE: Returning this for chaining
        return $this;
    }

    public function setColor($color) {
        $this->color = $color;

        // NOTE: Returning this for chaining
        return $this;
    }

    public function dump() {
        var_dump($this->make, $this->model, $this->color);
    }
}

$car = (new Car())
  ->setColor('pink')
  ->setMake('Ford')
  ->setModel('F-150')
  ->dump();

Композиция лучше наследования

Как говорится в известной книге «Шаблоны проектирования» Банды четырех, по мере возможности нужно выбирать композицию, а не наследование. Об этом говорит сайт https://intellect.icu . Есть много хороших причин использовать как наследование, так и композицию. Главная цель этой максимы заключается в том, если вы инстинктивно склоняетесь к наследованию, то постарайтесь представить, может ли композиция лучше решить вашу задачу. В каких-то случаях это действительно более подходящий вариант.

Вы спросите: «А когда лучше выбирать наследование?» Все зависит от конкретной задачи, но можно ориентироваться на этот список ситуаций, когда наследование предпочтительнее композиции:

  1. Ваше наследование — это взаимосвязь is-a, а не has-a. Пример: Человек → Животное vs. Пользователь → Детали пользователя (UserDetails).
  2. Вы можете повторно использовать код из базовых классов. (Люди могут двигаться, как животные.)
  3. Вы хотите внести глобальные изменения в производные классы, изменив базовый класс. (Изменение расхода калорий у животных во время движения.)

Плохо:

class Employee {
    private $name, $email;

    public function __construct($name, $email) {
        $this->name = $name;
        $this->email = $email;
    }

    // ...
}

// Bad because Employees "have" tax data. 
// EmployeeTaxData is not a type of Employee

class EmployeeTaxData extends Employee {
    private $ssn, $salary;

    public function __construct($ssn, $salary) {
        parent::__construct();
        $this->ssn = $ssn;
        $this->salary = $salary;
    }

    // ...
}

Хорошо:

class EmployeeTaxData {
    private $ssn, $salary;

    public function __construct($ssn, $salary) {
        $this->ssn = $ssn;
        $this->salary = $salary;
    }

    // ...
}

class Employee {
    private $name, $email, $taxData;

    public function __construct($name, $email) {
        $this->name = $name;
        $this->email = $email;
    }

    public function setTaxData($ssn, $salary) {
        $this->taxData = new EmployeeTaxData($ssn, $salary);
    }
    // ...
}

1. Комментарии и Документация

IDE становятся все более популярны в мире разработчиков, т.к. они предоставляют удобные инструменты для комментирования и документирования кода.

Вот пример:

Идеальный  код на PHP и Javascript

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

Вот еще пример вызова собственного метода:

Идеальный  код на PHP и Javascript

В этом примере стиль комментирования основан на PHPDoc, а IDE, которой я пользуюсь, - Aptana.

2. Отступы

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

Стиль 1:

Идеальный  код на PHP и Javascript

Стиль 2:

Идеальный  код на PHP и Javascript

Стиль 3:

Идеальный  код на PHP и Javascript

Лично я чаще всего использую стиль номер #2, но иногда перехожу и на #1. Но это все конечно же дело вкуса. Скорее всего не существует самого “лучшего” стиля, который подошел бы абсолютно всем. Этим правилам, в первую очередь, нужно следовать тем, кто работает в команде или участвует в написании открытых проектов.

Также существуют стили, которые объединяют некоторые характеристики. К примеру, стандарты написания кода PEAR, где фигурная скобка "{" в условных операторах остается на той же строке, а в функциях переносится.

Стиль PEAR:

Идеальный  код на PHP и Javascript

Также следует отметить, что в этом стиле вместо табов используются 4 пробела.

Тут вы сможете узнать больше о различных стилях.

3. Избегайте лишних комментариев

Да, комментирование кода - это хорошо; однако тут не нужно перебарщивать. Вот пример:

Идеальный  код на PHP и Javascript

Если работа кода очевидна, то скорее всего не следует писать лишние комментарии.

Если уж не имется, то можно их немного сократить:

Идеальный  код на PHP и Javascript

4. Группирование кода

Чаще всего некоторые задачи требуют написания нескольких строк кода. Поэтому лучше всего объединять такие задачи в отдельные блоки, разделенные пробелами.

Вот простой пример:

Идеальный  код на PHP и Javascript

Если вы добавите комментарий перед началом каждого блока, то это еще больше улучшит читабельность вашего кода.

5. Схема именования

Иногда даже в языке PHP можно найти противоречия именования функций. И вот многочисленные примеры:

  • strpos() против str_split()
  • imagetypes() против image_type_to_extension()

Существует несколько популярных стилей:

  • camelCase: первая буква каждого нового слова заглавная.
  • underscores: Подчеркивание между словами: mysql_real_escape_string().

Если смешивать эти техники, то рано или поздно можно попасть в неловкую ситуацию. Если вы работаете над проектом, в котором применяется одна из этих техник, то вам надо следовать их примеру. Все еще может зависеть от языка программирования. К примеру, большинство Java разработчиков используют camelCase а PHP разработчики предпочитают underscores.

Но и тут не обошлось без гибрида. Некоторые разработчики используют подчеркивания в именовании классов и методов (вне классов), а в остальных случаях используют camelCase:

Идеальный  код на PHP и Javascript


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

6. Принцип DRY

DRY (Don’t Repeat Yourself) - не повторяйся. Так же известно как DIE: Дублирование - это зло.

Главная задача любой системы, будь то веб приложение или что-то еще, - автоматизировать повторяющиеся задачи. Этому принципу нужно следовать всегда и везде, особенно если ты разработчик. Один и тот же кусок кода не должен повторяться снова и снова.

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

Идеальный  код на PHP и Javascript

7. Избегайте глубокой вложенности

Читабельность кода резко уменьшается, если у вас глубокая вложенность.

Идеальный  код на PHP и Javascript

Для того чтобы исправить ситуацию, вам следует пересмотреть принцип работы вашего кода и оптимизировать его:

Идеальный  код на PHP и Javascript

8. Лимит длины строки

Всем известно, что процесс чтения становится куда приятней, когда текст разбит на колонки. Это главная причина, по которой наши газеты выглядят именно так:

Идеальный  код на PHP и Javascript

Подобную технику можно применить и к нашему коду:

Идеальный  код на PHP и Javascript

Большинство разработчиков придерживаются лимита в 80 и 120 символов.

9. Организация Файлов и Папок

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

Помню свои первые проекты, в которых я присоединял файлы. Однако организация у меня сильно хромала. Я создавал папку “inc”, в которой располагал несколько файлов: db.php и functions.php. В процессе написания приложения эта папка пухла и пухла и в конечном итоге было трудно понять что где.

Чтобы решить эту проблему лучше пользоваться различного рода фрэймворками или хотя бы придерживаться их структуры. Вот так выглядит проект на CodeIgniter:

Идеальный  код на PHP и Javascript

10. Названия переменных

Вообще имена переменных должны быть полностью осмысленными - это в идеальном случае. Для временных переменных можно сделать исключение.

Давайте рассмотрим несколько примеров:

Идеальный  код на PHP и Javascript

11 - Пишите ключевые слова в SQL заглавными буквами

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

Идеальный  код на PHP и Javascript

12. Разделяйте код и данные

Это еще один принцип, который поможет вам писать более понятные программы. Он заключается в том, чтобы вы готовили данные в одном месте (допустим моделях), а взаимодействовали с ними в другом.

Когда PHP только начинал развиваться, он больше был похож на систему шаблонов. Проекты на данном языке содержали смешанный HTML и PHP код. Сейчас все изменилось, и всем следует переходить на новый уровень написания приложений.

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

Популяреные PHP Фрэймворки:

  • CodeIgniter
  • Zend Framework
  • Cake PHP
  • Symfony

Системы Шаблонов:

  • Smarty
  • Dwoo
  • Savant

Популярные CMS

13. Специальный синтаксис для шаблонов

Если вы не хотите использовать систему шаблонов, то вам скорее всего придется выработать свой собственный стиль внедрения PHP кода в HTML.

А вот и пример:

Идеальный  код на PHP и Javascript

Такая техника позволит вам избежать лишних скобок. Также такой код удачно вписывается в HTML контекст.

14. Процедуральный и объектно ориентированный подходы

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

Объекты прекрасно подходят для представления данных. Пример:

Идеальный  код на PHP и Javascript

Процедуральные методы имеют свою специфическую пользу.

Идеальный  код на PHP и Javascript

15. Читайте Open Source Код

Обычно проекты Open Source пишутся большим количеством разработчиков. С этой точки зрения, изучение написанного кода в подобных проектах может помочь вам набраться опыта. Так что не жалейте на это времени.

Идеальный  код на PHP и Javascript

16. Рефакторинг

Рефакторинг - это изменение кода без потери функциональности. Его также можно применять для улучшения читабельности.Тут нет места исправлению багов или добавлению функциональности. Вы просто немного меняете структуру вашего кода.

чистый код JavaScript

Оглавление

  1. Вступление
  2. Переменные
  3. Функции
  4. Объекты и структуры данных
  5. Классы
  6. ТВЕРДЫЙ
  7. Тестирование
  8. Параллелизм
  9. Обработка ошибок
  10. Форматирование
  11. Комментарии
  12. Перевод

Вступление

Идеальный  код на PHP и Javascript

Принципы программной инженерии из книги Роберта Мартина « Чистый код» , адаптированные для JavaScript. Это не руководство по стилю. Это руководство по созданию читаемого, многоразового и рефакторируемого программного обеспечения на JavaScript.

Не все принципы, изложенные в этом документе, должны строго соблюдаться, и даже меньшее из них будет согласовано во всем мире. Это рекомендации и не более того, но они систематизированы в результате многолетнего коллективного опыта авторов « Чистого кода» .

Нашему ремеслу в области разработки программного обеспечения чуть более 50 лет, и мы все еще многому учимся. Когда архитектура программного обеспечения так же стара, как сама архитектура, может быть, тогда нам придется соблюдать более жесткие правила. А пока позвольте этим рекомендациям служить пробным камнем для оценки качества кода JavaScript, создаваемого вами и вашей командой.

Еще одна вещь: знание этого не сразу сделает вас лучшим разработчиком программного обеспечения, а работа с ними в течение многих лет не означает, что вы не будете делать ошибок. Каждый фрагмент кода начинается с первого наброска, как мокрая глина, которая принимает окончательную форму. Наконец, мы устраняем недостатки, когда обсуждаем это с нашими коллегами. Не ругайте себя за первые наброски, которые нужно улучшить. Вместо этого взбейте код!

Переменные

Используйте осмысленные и произносимые имена переменных

Плохой:

const  ггггммдстр  =  момент ( ) . формат ( «ГГГГ / ММ / ДД» ) ;

Хороший:

const  currentDate  =  момент ( ) . формат ( «ГГГГ / ММ / ДД» ) ;

Идеальный  код на PHP и Javascript

Используйте один и тот же словарь для одного и того же типа переменной

Плохой:

getUserInfo ( ) ; 
getClientData ( ) ; 
getCustomerRecord ( ) ;

Хороший:

getUser ( ) ;

Идеальный  код на PHP и Javascript

Используйте имена с возможностью поиска

Мы прочитаем больше кода, чем когда-либо напишем. Важно, чтобы код, который мы пишем, был доступен для чтения и поиска. К не называя переменные , которые в конечном итоге смысл для понимания нашей программы, мы раним наших читателей. Сделайте ваши имена доступными для поиска. Такие инструменты, как buddy.js и ESLint, могут помочь идентифицировать безымянные константы.

Плохой:

// Какого черта 86400000? 
setTimeout ( blastOff ,  86400000 ) ;

Хороший:

// Объявить их как именованные константы с заглавной буквы. 
const  MILLISECONDS_PER_DAY  =  60  *  60  *  24  *  1000 ;  // 86400000;

setTimeout ( blastOff ,  MILLISECONDS_PER_DAY ) ;

Идеальный  код на PHP и Javascript

Используйте независимые переменные

Плохой:

const  address  =  "Один бесконечный цикл, Купертино 95014" ; 
const  cityZipCodeRegex  =  / ^ [ ^, \\ ] + [ , \\ \ s ] + ( . + ? ) \ s * ( \ d { 5 } ) ? $ / ; 
saveCityZipCode ( 
  адрес . match ( cityZipCodeRegex ) [ 1 ] , 
  адрес .совпадение ( cityZipCodeRegex ) [ 2 ] 
) ;

Хороший:

const  address  =  "Один бесконечный цикл, Купертино 95014" ; 
const  cityZipCodeRegex  =  / ^ [ ^, \\ ] + [ , \\ \ s ] + ( . + ? ) \ s * ( \ d { 5 } ) ? $ / ; 
const  [ _ ,  city ,  zipCode ]  =  адрес . совпадение ( cityZipCodeRegex ) ||    ; 
saveCityZipCode ( город ,  почтовый индекс ) ;

Идеальный  код на PHP и Javascript

Избегайте ментального картирования

Явное лучше, чем неявное.

Плохой:

const  location  =  [ "Остин" ,  "Нью-Йорк" ,  "Сан-Франциско" ] ; 
локации . forEach ( l  =>  { 
  doStuff ( ) ; 
  doSomeOtherStuff ( ) ; 
  // ... 
  // ... 
  // ... 
  // Подождите, для чего снова нужен `l`? 
  dispatch ( l ) ; 
} ) ;

Хороший:

const  location  =  [ "Остин" ,  "Нью-Йорк" ,  "Сан-Франциско" ] ; 
локации . forEach ( location  =>  { 
  doStuff ( ) ; 
  doSomeOtherStuff ( ) ; 
  // ... 
  // ... 
  // ... 
  dispatch ( location ) ; 
} ) ;

Идеальный  код на PHP и Javascript

Не добавляйте ненужный контекст

Если имя вашего класса / объекта вам что-то говорит, не повторяйте это в имени переменной.

Плохой:

const  Car  =  { 
  carMake : "Honda" , 
  carModel : "Accord" , 
  carColor : "Blue" 
} ;

функция  paintCar ( car ,  color )  { 
  car . carColor  =  цвет ; 
}

Хороший:

const  Car  =  { 
  марка : "Honda" , 
  модель : "Accord" , 
  цвет : "Blue" 
} ;

функция  paintCar ( car ,  color )  { 
  car . color  =  цвет ; 
}

Идеальный  код на PHP и Javascript

Используйте аргументы по умолчанию вместо короткого замыкания или условных выражений

Аргументы по умолчанию часто чище, чем короткое замыкание. Имейте в виду, что если вы их используете, ваша функция будет предоставлять только значения по умолчанию для undefined аргументов. Другие «falsy» ценности , такие как '', "", false, null, 0, и NaN, не будут заменены на значения по умолчанию.

Плохой:

функция  createMicrobrewery ( name )  { 
  const  breweryName  =  name  ||  "Hipster Brew Co." ; 
  // ... 
}

Хороший:

function  createMicrobrewery ( name  =  "Hipster Brew Co." )  { 
  // ... 
}

Идеальный  код на PHP и Javascript

Функции

Аргументы функции (в идеале 2 или меньше)

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

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

Поскольку JavaScript позволяет вам создавать объекты на лету, без большого количества шаблонов классов, вы можете использовать объект, если вам нужно много аргументов.

Чтобы сделать очевидным, какие свойства ожидает функция, вы можете использовать синтаксис деструктуризации ES2015 / ES6. У этого есть несколько преимуществ:

  1. Когда кто-то смотрит на сигнатуру функции, сразу становится понятно, какие свойства используются.
  2. Его можно использовать для имитации именованных параметров.
  3. Деструктуризация также клонирует указанные примитивные значения объекта аргумента, переданного в функцию. Это может помочь предотвратить побочные эффекты. Примечание: объекты и массивы, деструктурированные из объекта аргумента, НЕ клонируются.
  4. Линтер может предупредить вас о неиспользуемых свойствах, что было бы невозможно без деструктуризации.

Плохой:

function  createMenu ( title ,  body ,  buttonText ,  cancellable )  { 
  // ... 
}

createMenu ( "Foo" ,  "Bar" ,  "Baz" ,  истина ) ;

Хороший:

function  createMenu ( { заголовок , тело , buttonText , cancellable } )  { 
  // ... 
}

createMenu ( { 
  заголовок : "Foo" , 
  body : "Bar" , 
  buttonText : "Baz" , 
  cancellable : true 
} ) ;

Идеальный  код на PHP и Javascript

Функции должны делать одно

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

Плохой:

функция  emailClients ( клиенты )  { 
  клиенты . forEach ( клиент  =>  { 
    const  clientRecord  =  база данных . поиск ( клиент ) ; 
    если  ( clientRecord . isActive ( ) )  { 
      электронная почта ( клиент ) ; 
    } 
  } ) ; 
}

Хороший:

функция  emailActiveClients ( клиенты )  { 
  клиенты . фильтр ( isActiveClient ) . forEach ( электронная почта ) ; 
}

функция  isActiveClient ( клиент )  { 
  const  clientRecord  =  база данных . поиск ( клиент ) ; 
  вернуть  clientRecord . isActive ( ) ; 
}

Идеальный  код на PHP и Javascript

Имена функций должны указывать на то, что они делают

Плохой:

function  addToDate ( число ,  месяц )  { 
  // ... 
}

const  date  =  новая  дата ( ) ;

// По названию функции сложно сказать, что добавлено 
addToDate ( date ,  1 ) ;

Хороший:

function  addMonthToDate ( месяц ,  число )  { 
  // ... 
}

const  date  =  новая  дата ( ) ; 
addMonthToDate ( 1 ,  дата ) ;

Идеальный  код на PHP и Javascript

Функции должны быть только одного уровня абстракции

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

Плохой:

функция  parseBetterJSAlternative ( код )  { 
  const  REGEXES  =  [ 
    // ... 
  ] ;

   Операторы  const =  код . сплит ( "" ) ; 
  const  tokens  =    ; 
  РЕГЕКСЫ . forEach ( REGEX  =>  { 
    операторы . forEach ( оператор  =>  { 
      // ... 
    } ) ; 
  } ) ;

  const  ast  =    ; 
  жетоны . forEach ( token  =>  { 
    // lex ... 
  } ) ;

  аст . forEach ( node  =>  { 
    // анализировать ... 
  } ) ; 
}

Хороший:

функция  parseBetterJSAlternative ( код )  { 
  const  tokens  =  tokenize ( код ) ; 
  const  syntaxTree  =  parse ( токены ) ; 
  syntaxTree . forEach ( node  =>  { 
    // анализировать ... 
  } ) ; 
}

функция  tokenize ( код )  { 
  const  REGEXES  =  [ 
    // ... 
  ] ;

   Операторы  const =  код . сплит ( "" ) ; 
  const  tokens  =    ; 
  РЕГЕКСЫ . forEach ( REGEX  =>  { 
    операторы . forEach ( оператор  =>  { 
      токены . push ( / * ... * / ) ; 
    } ) ; 
  } ) ;

  вернуть  жетоны ; 
}

функция  синтаксического анализа ( токены )  { 
  const  syntaxTree  =    ; 
  жетоны . forEach ( токен  =>  { 
    syntaxTree . push ( / * ... * / ) ; 
  } ) ;

  return  syntaxTree ; 
}

Идеальный  код на PHP и Javascript

Удалить повторяющийся код

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

Представьте, что вы управляете рестораном и отслеживаете свой инвентарь: все ваши помидоры, лук, чеснок, специи и т.д. в них. Если у вас только один список, есть только одно место для обновления!

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

Правильная абстракция имеет решающее значение, поэтому вы должны следовать принципам SOLID, изложенным в разделе « Классы ». Плохие абстракции могут быть хуже дублированного кода, поэтому будьте осторожны! Сказав это, если вы можете сделать хорошую абстракцию, сделайте это! Не повторяйтесь, иначе вы обнаружите, что обновляете несколько мест в любое время, когда захотите изменить что-то одно.

Плохой:

функция  showDeveloperList ( разработчики )  { 
  разработчики . forEach ( разработчик  =>  { 
    const  expectedSalary  =  developer . calculateExpectedSalary ( ) ; 
    const  experience  =  developer . getExperience ( ) ; 
    const  githubLink  =  developer . getGithubLink ( ) ; 
    const  data  =  { 
      expectedSalary ,
      опыт ,
      githubLink
    } ;

    рендер ( данные ) ; 
  } ) ; 
}

функция  showManagerList ( менеджеры )  { 
  менеджеры . forEach ( менеджер  =>  { 
    const  expectedSalary  =  manager . calculateExpectedSalary ( ) ; 
    const  experience  =  manager . getExperience ( ) ; 
    const  портфолио  =  manager . getMBAProjects ( ) ; 
    const  data  =  { 
      expectedSalary , 
      experience,
      портфолио
    } ;

    рендер ( данные ) ; 
  } ) ; 
}

Хороший:

функция  showEmployeeList ( сотрудники )  { 
  сотрудники . forEach ( сотрудник  =>  { 
    сопз  expectedSalary  =  сотрудника . calculateExpectedSalary ( ) ; 
    Const  опыт  =  работника . getExperience ( ) ;

    const  data  =  { 
      ожидаемая зарплата ,
      опыт
    } ;

    переключатель  ( сотрудник . тип )  { 
      кейс  "менеджер" :
         данные . портфель  =  сотрудник . getMBAProjects ( ) ; 
        перерыв ; 
      кейс  «разработчик» :
         данные . githubLink  =  сотрудник . getGithubLink ( ) ; 
        перерыв ; 
    }

    рендер ( данные ) ; 
  } ) ; 
}

Идеальный  код на PHP и Javascript

Установите объекты по умолчанию с помощью Object.assign

Плохой:

const  menuConfig  =  { 
  заголовок : null , 
  body : "Bar" , 
  buttonText : null , 
  cancellable : true 
} ;

функция  createMenu ( config )  { 
  config . title  =  config . название  ||  «Фу» ; 
  config . body  =  config . тело  ||  «Бар» ; 
  config . buttonText  =  конфигурация . buttonText  ||  «Баз» ; 
  config . cancellable  = 
    config . отменяемый  ! ==  undefined ? config . отменяемый :правда ; 
}

createMenu ( menuConfig ) ;

Хороший:

const  menuConfig  =  { 
  title : "Order" , 
  // Пользователь не включил ключ 'body' 
  buttonText : "Отправить" , 
  cancellable : true 
} ;

function  createMenu ( config )  { 
  let  finalConfig  =  Object . assign ( 
    { 
      title : "Foo" , 
      body : "Bar" , 
      buttonText : "Baz" ,
       cancellable : true 
    } , 
    config 
  ) ; 
  return  finalConfig 
  // конфигурация теперь равна: {title: "Order", body: "Bar", buttonText: "Send", cancellable: true} 
  // ... 
}

createMenu ( menuConfig ) ;

Идеальный  код на PHP и Javascript

Не используйте флаги в качестве параметров функции

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

Плохой:

функция  createFile ( имя ,  темп )  { 
  если  ( темп )  { 
    фс . создать ( `./temp/ $ { имя } ` ) ; 
  }  else  { 
    fs . создать ( имя ) ; 
  } 
}

Хороший:

функция  createFile ( имя )  { 
  fs . создать ( имя ) ; 
}

функция  createTempFile ( имя )  { 
  createFile ( `./temp/ $ { name } ` ) ; 
}

Идеальный  код на PHP и Javascript

Избегайте побочных эффектов (часть 1)

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

Теперь вам действительно нужно иногда иметь побочные эффекты в программе. Как и в предыдущем примере, вам может потребоваться запись в файл. Что вы хотите сделать, так это централизовать то, где вы это делаете. У вас нет нескольких функций и классов, которые пишут в конкретный файл. Есть одна служба, которая это делает. Один-единственный.

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

Плохой:

// Глобальная переменная, на которую ссылается следующая функция. 
// Если бы у нас была

продолжение следует...

Продолжение:


Часть 1 Идеальный код на PHP и Javascript
Часть 2 1. Комментарии и Документация - Идеальный код на PHP и
Часть 3 Объекты и структуры данных - Идеальный код на PHP и
Часть 4 Тестирование - Идеальный код на PHP и Javascript

создано: 2021-09-21
обновлено: 2026-07-18
0



Помог ли вам этот ответ?
Нажмите оценку и напишите коротко почему. Так мы сможем сделать следующие ответы точнее и полезнее.
Насколько вы довольны ответом?
Ваш отзыв напрямую влияет на качество следующих подсказок и ответов.


Поделиться:
Пожаловаться

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выполнения задания
  • Возможно применение функции гаранта на сделку
  • Приоритетная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можете продать (как исполнитель) или купить (как заказчик) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно применение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии

Оставить комментарий

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

Лекции и учебник по "Разработка программного обеспечения и информационных систем"

Термины: Разработка программного обеспечения и информационных систем