Все продумано, мало что сделано хорошо — Брайан Рид, фронтенд-разработчик и музыкант
Как вы думаете, сколько строк кода может сделать хороший дизайн или хорошо выполненный дизайн?
Я не знаю, имеет ли этот вопрос смысл, так как на это есть много факторов. Основные факторы, которые приходят мне на ум:
- Проблема, которую нужно решить
- Используемый язык
- Знание языка и понимание проблемы и предметной области
Следовательно, я хотел бы рассмотреть только 3 вышеуказанных фактора и попытаться объяснить, как несколько строк кода могут на самом деле создать прекрасный дизайн и код, который можно использовать для решения реальных проблем.
- Проблема, которую необходимо решить: простой синтаксический анализатор JSON для встроенных устройств или проектов с малым объемом памяти.
- Используемый язык: язык C
- Знание языка: понимание массивов, структур и указателей.
Я не собираюсь изобретать велосипед для создания синтаксического анализатора, а беру в пример один из прекрасно написанных синтаксических анализаторов на C для данных JSON под названием JSMN (произносится Жасмин), созданный Сергеем Зайцевым. Спасибо Сергею Зайцеву за это чудесное творение. Вот ссылка на гитхаб:
Файл readme проекта и соответствующий веб-сайт так много объясняют о коде.
Мое намерение и дополнение состоит в том, чтобы взять код и объяснить, как этот проект можно использовать для начала чтения кода, написания кода, а также оценить, как с тщательным обдумыванием легко создать дизайн, который выдерживает испытание временем и расширяется.
Давайте начнем с основ. Вся реализация является частью всего одного файла JSMN.h.
Заголовочный файл содержит даже определения функций, чего многие люди не ожидают, поскольку в большинстве случаев люди ожидают, что заголовочный файл содержит только объявления, а исходный файл содержит соответствующие реализации. Это просто хороший принцип, которому следуют. В противном случае язык как таковой не накладывает такого ограничения.
Важным моментом, который следует учитывать, является макет файла заголовка, который является хорошим уроком.
Файл начинается с директив препроцессора, что позволяет избежать множественных файлов включения.
#ifndef JSMN_H
#define JSMN_H
Также он содержит директиву, которая позволяет избежать искажения имен, которое выполняется компилятором C++.
Далее следуют стандартные определения проекта, перечисления и структуры, которые используются в проекте.
Далее по порядку идут прототипы функций, за которыми следуют определения функций.
Ниже приведен шаблон заголовочного файла, который можно взять и использовать в проектах.
// начинаем с директивы препроцессора, чтобы избежать многократного включения
//добавляем нужные заголовочные файлы
// создаем все стандартные определения, необходимые для проекта
// любые дополнительные глобальные данные
// перечисления
// структуры
// прототипы функций
// закрыть директивы препроцессора.
В следующей статье, которая будет исчерпывающей, я расскажу о фактической сути дизайна, о том, как с помощью этого простого кода можно обрести уверенность в запуске любого проекта на C, если они знают, какую проблему нужно решить.
Эта статья намеренно сделана так, чтобы она выглядела, ощущалась и звучала просто.
До следующей статьи…
Продолжайте учиться, продолжайте делиться и продолжайте расти.