Возможно, вы так много раз в жизни писали спагетти-код, что сожалеете об этом и спрашиваете следующее:

Как мне перейти от написания спагетти-кода к профессиональному программированию?

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

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

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

Проблема

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

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

То, что выше, является функцией суммы, а также тройной функцией, которая снова имеет функцию умножения и суммирования.

Функция triple на самом деле умножает и суммирует данный массив. Это неправильно названо, вводит в заблуждение и использовать функцию `triple` не так просто. Мало того, код вообще нельзя использовать повторно.

Итак, как нам это улучшить?

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

ПОЦЕЛУЙ: (Будь проще, глупо!)

Самые сложные жизненные проблемы легко решаются, оставаясь простыми.

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

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

Функция еще не завершена, но теперь я знаю, что там писать.

Будь проще.

ЯГНИ: (Оно тебе не понадобится)

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

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

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

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

Нам также не нужны эти скобки и возвратные скобки в es6, лучше мы их используем, пока у нас есть такая возможность.

Держи это в чистоте.

СУХОЙ: (не повторяйся)

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

Как это безумие, что мы повторяем, что не будем повторяться. Итак, повтори со мной,

Не повторяйся.

В более поздней версии у нас есть две отдельные функции, мы не повторяем функцию sum. Держите его сухим. Кому нравится мокрый (а не мокрый, мокрый означает Напиши все дважды)?

Конечный результат

Пришло время использовать все, что мы сделали,

Здесь tripleSum суммирует результаты, полученные с помощью функции triple. Мы можем написать их таким образом, чтобы наконец достичь того, что мы хотели,

То, что я поделился выше, может быть не лучшим примером, и вы можете применить другие принципы (например: SOLID и другие, перечисленные здесь). Я просто поделился способом упростить задачу. Потому что чем больше принципов вы попытаетесь запомнить одновременно, тем больше ошибок вы сделаете.

Это еще не конец

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

Мы можем минимизировать код до самых простых битов, таких как следующие:

И мы можем продолжить, пока не дойдем до следующей версии,

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

Задача «умножьте все элементы в массиве на 3, а затем просуммируйте их». также можно записать как «суммировать элементы в массиве и умножить их на 3.», где мы пытаемся ПОЦЕЛОВАТЬ. Это может быть другой случай пользователя, другая проблема. Но не помешает сделать это проще.

В итоге мы получим качественный код вроде следующего:

Мы также можем сделать его многоразовым, например,

Но мы изначально не этого хотели. Мы не должны исправлять то, что не сломано. Это еще один принцип Если не сломалось, не чини. Оставим это на потом.

Минусы принципов

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

Цена читабельности

Меньше кода определенно лучше, но если он настолько короткий, что никто, кроме вас, не может прочитать ваш код, то это снова спагетти-код. Здесь в игру вступают комментарии.

Цена времени

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

Цена опыта

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

Подумайте, как точное решение будет выглядеть в ES5, когда ES6 еще не существовало? Как бы вы объяснили однострочный код тому, кто не знает функции сокращения?

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

Не лучший пост с чистым кодом в Интернете, но я надеюсь, что он поможет вам в вашем путешествии по программированию спагетти. Если вы сочтете его полезным, поделитесь знаниями с другими, которые вам дороги :).