can3p (can3p) wrote,
can3p
can3p

Category:

Про программирование, выпуск 5

Код

Код должен быть простым и понятным, как автомат Калашникова. Каждая новая абстракция добавляет сложность и делает код менее читаемым. Еще важно понимать инварианты - свойства, которые всегда должны выполняться для тех или иных сущностей в тех или иных условиях. Например, если есть сущность поставщик, то у него 100% есть телефон. Можно, конечно, в каждой функции проверять - вдруг нет? Но если есть возможность этот инвариант поддерживать без проверок, то код становится невероятно проще. Самое лучшее, если инварианты получается задавать средставми самого языка. Например, есть у вас поле в структуре и его нельзя задать как null. Готово, ну уровне языка у вас есть гарантия, что если код компилируется, то это поле есть, и в нем что-то есть. Конечно, конечно, там может быть мусор, но часто точек инициализации не так много (вы, конечно, контроллируете, как создаются ваши объекты, да?).

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

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

Tags: coding
Subscribe

  • В Москве

    Первые дни в Москве вызвали довольно странное впечатление. Как-то так получилось, что в России опять теория разошлась с реальностью, где-то слегка,…

  • Временной аспект

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

  • Из прочитанного^Wнедочитанного. Выпуск 58

    Решил протись по новой и не очень русской литературе 1) Третий роман писателя Абрикосова, Денис Драгунский 4 / 5 Если бы я открыл книгу…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 1 comment