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

Процессуальный кодекс

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

var lowerCaseText = 'lowercase';
var upperCaseText = lowerCaseText.toUpperCase

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

var stringText = 'example string';
var formattedString = 'start ' + stringText + ' end';
var stringText2 = 'example string 2';
var formattedString2 = 'start ' + stringText2 + ' end';

Функции

Потом я узнал о функциях. Вы можете создать пользовательскую функцию, и тогда мы сможем использовать ее столько раз, сколько захотим, не записывая ее.

function wrapText(stringText) 
{
    return 'start ' + stringText + ' end';
}
var formattedString = wrapText('example string');
var formattedString2 = wrapText('example string 2');

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

Классы

Следующим, чему я научился, были уроки. Это было связано с изучением PHP, а не JavaScript.

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

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

Приносим извинения за чрезмерное использование термина «класс» в последнем абзаце.

class ExampleClass
{
    public function exampleMethod($exampleData)
    {
        $format = new FormatInterface();
        $data = $format->process->$exampleData;
    }
}
class FormatInterface
{
    public function process($data)
    {
        return 'Start ' . $data . ' end';
    }
}

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

Интерфейсы или контракты

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

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

Затем в один прекрасный день это просто щелкнуло.

Я писал набор классов для обработки некоторых данных в определенный вывод. Пока просто, но потом мне сообщили, что иногда данные будут поступать в формате a, а иногда в формате b. Затем я мог бы просто написать множество проверок внутри класса, чтобы проверить, является ли это форматом a или b, и изменить то, что обрабатывается. Это было бы нормально, но что, если бы был формат с?

Ад ремонтопригодности.

Потом я вспомнил про интерфейсы. Я мог бы сделать свой начальный класс очень простым, а затем извлечь функции для каждого формата данных в отдельный файл. Однако начальный класс не будет указывать непосредственно на файл a, b или c. Вместо этого он будет указывать на интерфейс. Затем интерфейс можно настроить для использования файла a, b или c в зависимости от использования при каждой установке на каждом сервере.

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

Настоящая выгода от этого заключается в том, что начальному классу все равно, что делает файл a, b или c, есть только контракт, в котором говорится, что я отправлю вам любые входные данные, а интерфейс отправит обратно выходные данные. Это контракт.

Ну и что дальше?

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

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

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

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