Главная

Четыре вещи, которым нужно разучиться, чтобы стать хорошим разработчиком.

Пришло время познакомиться с программированием с иного угла.

Поделиться:
 

8+

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

Разучите циклы

Циклы — одна из первых конструкций, которую вам приходилось изучать в программировании. Простой цикл while демонстрирует мощь автоматизации, когда вы можете многократно выполнять набор инструкций, пока будет выполняться условие.

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

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

Цикл while, безусловно, выполняет то, чего вы хотите, но вам нужно постоянно отслеживать индекс. Также существует риск того, что вы забудете инкрементировать индекс и получится бесконечный цикл.
Рассмотрим альтернативное решение:

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

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

Разучите условные выражения

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

Структуры данных

Рассмотрим следующую функцию для расчета скидки:

Вы должны добавлять новый case в оператор switch каждый раз, когда хотите добавить новый код для скидки. А если ошибетесь — нарушиться весь расчет.

Теперь давайте заменим условие на объект.

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

Полиморфизм

Второй способ заменить условные выражения — использовать ключевую особенность объектно-ориентированных языков программирования — полиморфизм.

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

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

Откажитесь от буквальных имен переменных

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

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

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

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

Забудьте о глобальной области видимости

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

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

Заключение:

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

Спасибо!

8+