Все продумано, мало что сделано хорошо — Брайан Рид, фронтенд-разработчик и музыкант

Как вы думаете, сколько строк кода может сделать хороший дизайн или хорошо выполненный дизайн?

Я не знаю, имеет ли этот вопрос смысл, так как на это есть много факторов. Основные факторы, которые приходят мне на ум:

  1. Проблема, которую нужно решить
  2. Используемый язык
  3. Знание языка и понимание проблемы и предметной области

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

  1. Проблема, которую необходимо решить: простой синтаксический анализатор JSON для встроенных устройств или проектов с малым объемом памяти.
  2. Используемый язык: язык C
  3. Знание языка: понимание массивов, структур и указателей.

Я не собираюсь изобретать велосипед для создания синтаксического анализатора, а беру в пример один из прекрасно написанных синтаксических анализаторов на C для данных JSON под названием JSMN (произносится Жасмин), созданный Сергеем Зайцевым. Спасибо Сергею Зайцеву за это чудесное творение. Вот ссылка на гитхаб:

zserge/jsmn: Jsmn — самый быстрый в мире парсер/токенизатор JSON. Это официальное репо, заменяющее старое на Bitbucket (github.com)

Файл readme проекта и соответствующий веб-сайт так много объясняют о коде.

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

Давайте начнем с основ. Вся реализация является частью всего одного файла JSMN.h.

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

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

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

#ifndef JSMN_H
#define JSMN_H

Также он содержит директиву, которая позволяет избежать искажения имен, которое выполняется компилятором C++.

Далее следуют стандартные определения проекта, перечисления и структуры, которые используются в проекте.

Далее по порядку идут прототипы функций, за которыми следуют определения функций.

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

// начинаем с директивы препроцессора, чтобы избежать многократного включения

//добавляем нужные заголовочные файлы

// создаем все стандартные определения, необходимые для проекта

// любые дополнительные глобальные данные

// перечисления

// структуры

// прототипы функций

// закрыть директивы препроцессора.

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

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

До следующей статьи…

Продолжайте учиться, продолжайте делиться и продолжайте расти.