/Dictionary

Programming Dictionary

MIT LicenseMIT

Словарь-индекс понятий со ссылками

Внимание! Ссылки на видео по каждой теме помещены в соответствующие репозитории.

Оглавление:

Базовые понятия

  • Абстракция / Abstraction и повторное использование
    • обобщенное решение задачи, в отличие от конкретного решения, подходящее для широкого круга задач
    • модель реального объекта (множества объектов), являющаяся приближением к реальности, обобщением
    • множество свойств объекта, относящиеся к определенному его аспекту
    • Слои абстракций / Abstraction Layer
  • Парадигма программирования / Programming Paradigm
    • подход к решению задач на ЭВМ, характеризующийся стилем, набором приемов, допущений и ограничений
    • совокупность идей и понятий, применяемых для написания программного кода
  • Переменная / Variable
    • именованная область памяти, имеющая тип данных, адрес и значение
    • имя (идентификатор), с которым связано значение и тип данных
    • переменная предоставляет возможность менять значение (а для некоторых языков и тип)
    • let cityName = 'Beijing';
  • Константа / Constant
    • имя (идентификатор), с которым связано неизменяемое значение и тип
    • const WATCH_TIMEOUT = 5000;
  • Типы данных / Data Types
    • тип - это множество значений и операции, определенные на этом множестве
    • [5, 'Kiev', true, { city: 'Beijing' }, a => ++a ].map(x => typeof x);
  • Примитивные или скалярные типы / Scalar Types
    • примитивные типы имеют одно значение, а не несколько структурированных значений и передаются по значению (копирование значения), а не по ссылке
    • например: Number, String, Boolean
  • Структурные типы / Composed types
    • композитные типы или структуры состоят из нескольких скалярных значений, объедиенных в одно таким образом, чтоб над этим объединенным значением можно было выполнять набор операций
    • например: объект, массив, множество, кортеж
  • Ссылочные типы / Reference
  • Перечислимые типы / Enumerated types
  • Флаг / Flag
    • Логическое значение, определяющее состояние чего-либо, например, признак закрытия соединения, признак завершения поиска по структуре данных и т.д.
    • let flagName = false;
  • Массив / Array
    • коллекция эллементов, доступ к которым осуществляется по индексам
    • const cities = ['Tehran', 'Yalta', 'Potsdam'];
  • Цикл / Loop
    • многократное исполнение блока операторов
  • Условие / Conditional statements
    • синтаксическая конструкция, позволяющая выполнить разные действия или возвращающая разные значения (тернарный оператор) в зависимости от логического выражения (возвращающего true или false)
  • Строка / String
    • последовательность символов (в большинстве языков к каждому символу можно обратиться через синтаксис доступа к элементам массива, например, квадратные скобки)

Основные понятия

  • Объект / Object
    • структура данных, содержащая состояние и методы, связанные с этим состоянием
    • объект может быть создан как литерал {} или экземпляр класса (прототипа) new ClassName() или как экземпляр прототипа new PrototypeConstructor() или возвращен из фабрики
    • const person = { name: 'Marcus', city: 'Roma', born: 121 };
    • const person = new Person('Marcus', 'Roma', 121);
  • Инстанциирование / Instantiation
    • создание объекта (экземпляра) или выделение памяти для структуры данных
    • const rect = new Rectangle(-50, -50, 100, 150);
    • const rect = { a: { x: -50, y: -50 }, b: { x: 100, y: 150 } };
    • const cities = new Array(1000);
    • const cities = ['Tehran', 'Kiev', 'Yalta', 'Beijing', 'Potsdam', 'London'];
  • Класс / Class
    • программная абстракция, обобщающая свойства и методы, состояние и поведение своих экземпляров
    • class Point { constructor(x, y) { this.x = x; this.y = y; } }
  • Прототип / Prototype
    • специальный объект, на который ссылаются его экземпляры, и свойства которого становятся видны у наследников, если эти свойства не переопределены у наследников (формируется цепочка прототипов, по которой последовательно ищутся свойства, пока не будут найдены или пока не будет достигнут конец)
    • шаблон, который клонируется во время инстанциирования
  • Функция
    • определения
      • функциональное программирование: отображение или преобразование элементов одного множества в элементы другого множества
      • императивное программирование: ссылка на блок операторов (не обязательно именованный), реализующий последовательность действий
      • обобщенное определение: выражение или блок операторов, имеющий имя или анонимный, преобразующий аргументы в результаты, или изменяющий состояние контекстов или объектов
    • Контекст
    • Область видимости / Scope
    • Объявление функции / Function definition
      • function max(a, b) { return a + b; }
    • Функциональное выражение / Function expression
      • функциональное выражение с именованной функцией / Named function expression
        • const max = function max(a, b) { return a + b; };
      • анонимное функциональное выражение / Anonymous function expression
        • const max = function(a, b) { return a + b; };
      • лямбда-функция / Lambda function
        • const max = (a, b) => { return a + b; };
      • лябмда-выражение, Функция-стрелка / Lambda expression, Arrow function
        • const max = (a, b) => (a + b);
    • Чистая функция / Pure Function
      • функция, вычисляющая результат только на основе аргументов, не имеющая состояния и не обращающаяся к операциям ввода-вывода
      • функция, результат которой всегда детерминированный, т.е. для любого аргумента всегда будет один и тот же результат
      • функция, не имеющая побочных эффектов (см. побочный эффект)
    • Замыкание / Closure
      • если вернуть функцию g из функции f, то g будет видеть контекст функции f, так же, как и свои аргументы
      • если f возвращает g, то говорят, что экземпляр g замкнул контекст f
      • способ, позволяющий связать функцию с контекстом (с данными или переменными контекста)
      • замыкание является аналогом свойств в ООП, тоже связывающие свойства с методами через объект, по сути объект в ООП сам является контекстом связывания
      • при помощи замыкания можно реализовать функциональное наследование
      • const add = a => b => a + b;
      • const hash = (data = {}) => (key, value) => (data[key] = value, data);
    • Суперпозиция / Superposition
      • объединение вызова функций в выражения таким образом, что результат одних функций становится аргументами других функций
      • const expr2 = add(pow(mul(5, 8), 2), div(inc(sqrt(20)), log(2, 7)));
    • Композиция / Composition
      • const compose = (f1, f2) => x => f2(f1(x));
      • const compose = (...funcs) => (...args) => (funcs.reduce((args, fn) => [fn(...args)], args));
    • Частичное применение / Partial application
      • const partial = (fn, x) => (...args) => fn(x, ...args);
    • Каррирование / Currying
      • const result = curry((a, b, c) => (a + b + c))(1, 2)(3);
    • Побочные эффекты / Side effects
    • Функция высшего порядка / Higher-order Function
      • если функция только в аргументах, то это колбек
      • если функция только в результате, то это фабрика функций на замыканиях
      • если возвращаемая функция имеет тот же смысл, что и получаемая в аргументах (+ дополнительное поведение), то это обертка
      • очень редко бывает, что возвращаемая функция не связана с функцией из аргументов (но пока ни кто не нашел вразумительного примера, где это реально нужно)
      • если на выходе класс или функция-конструктор, то это фабрики классов и прототипов соответсвенно
    • Функциональное наследование / Functional Inheritance
      • при помощи замыканий, ч.п., каррирования, лямбд
  • Метод / Method
    • функция, связанная с объектным контекстом или программным интерфейсом
    • { a: 10, b: 10, sum() { return this.a + this.b; } }
  • Обертка / Wrapper
    • функция, которая оборачивает другую функцию (иногда объект, интерфейс или функциональный объект), добавляя ему дополнительное поведение
    • можно обернуть целый API интерфейс и даже асинхронную функцию вместе с колбеками (если известен контракт)
  • Интерфейс / Interface
    • набор методов (функций) объединенных или общим объектным контекстом или применением к структурам данных одной предметной области т.е. смыслом (API)
    • способ определения (спецификации) контракта, по которому связаны программные компоненты
    • Набор методов с их именами, аргументами и типами аргументов
  • Программный интерфейс / Application Interface, API
    • интерфейс программных компонентов: модулей, слоев абстракции, приложений
  • Синглтон / Singleton
    • шаблон проектирования, предполагающий, что в одном пространстве имен (процессе, приложении, базе данных) будет только один экземпляр класса (или просто один подобный объект) к которому можно обратиться по определенному (известному) имени
  • Функция обратного вызова, колбек / Callback
    • функция передаваемая в качестве аргумента в другую функцию (или метод) для того, чтобы быть вызванной для возврата значения, ошибки или уведомления
    • функции обратного вызова имеют подтипы:
  • Итерирование / Iteration
    • многократное повторение одного блока кода или одной функции над различными данными: элементами массивов, множеств, списков, коллекций и различными значениями переменной цикла
  • Итератор / Iterator
    • интерфейс доступа к элементам коллекции: массива, множества, списка
  • Файл / File
  • Поток, Файловый поток / Stream, File Stream
  • Сокет / Socket
    • программный интерфейс (или абстракция) для обмена данными между процессами
  • Дескриптор / Handle
    • уникальный идентификатор программного объекта (чаще всего объекта операционной системы): файла, сокета, окна, таймера, оединения и т.д.
  • Состояние / State
    • совокупность данных программного компонента (переменных и структур данных), определяющие его поведение и реакцию на операции с ним
  • Кэш, Кэширование / Cache
    • место временного хранения данных (буфер, коллекция, область памяти) для быстрого доступа и оптимизации
    • возможно кеширование операций чтения, вычислений, операций записи (когда запись не может быть поизведена достаточно быстро) или упрезжающее чтение в буфер (когда можно определить, какие данные будут запрошены с наибольшей вероятностью)
  • Хэширование / Hashing
    • преобразование данных произвольной длины (буфера, массива, объекта или структуры данных) в последовательность битов определенной длины (хеш) при помощи хеш-функции (при изменении 1 бита в данных хеш меняется существенно)
  • Функциональный объект
    • Функтор / Functor
      • функтор - это рекурсивное замыкание / recursive closure
      • объект функционального типа, хранящий в себе защищенное значение и позволяющий отобразить это значение в другой функтор через функцию
    • Аппликативный функтор
    • Монада / Monad
  • Мемоизация / Memoization
    • обертка функции, сохраняющая результаты выполнения функции для предотвращения повторных вычислений
  • Примесь / Mixin
    • добавление свойств, методов или поведения к объекту после его инстанциирования (создания)
    • Object.assign(target, { field1, field2 }, { field3 });
  • Декоратор / Decorator
    • шаблон оборачивания объектов или функций для добавления новой функциональности при помощи специального синтаксиса
  • Наследование / Inheritance
  • Множественное наследование / Multiple Inheritance
  • Непрямое наследование / Indirect Inheritance
  • Генератор / Generator
  • Синхронные операции
  • Асинхронные операции
  • Ввод/вывод / I/O, Input-output
    • операции, выходящие за рамки CPU и RAM (арифметико-логического устройства и памяти), т.е. операции с устройствами ввода вывода: сеть, диск, порты, консоль (клавиатура и экран), друге переферийные устройства (взаимодействие с которыми на порядки медленнее, чем внутренние операции а АЛУ и памяти)
  • EventEmitter
    • универсальная абстракция для работы с событиями чере подписку (subscription: addListener, on, once) и отправку (emit)
  • Чеининг / Chaining
    • цепочный синтаксис вызова функций total(april)(may)(july) или методов array.filter(f1).reduce(f2)
  • Сериализация / Serialization
    • преобразование структуры данных (развернутой в памяти) в битовую последовательность, обычно в последовательность байтов (бинарная сериализация) или в строку (текстовая сериализация)
  • Десериализация / Deserialization
    • операция, обратная сериализации, т.е. восстановление структуры данных из последовательности битов (чаще байтов или строки)
  • Парсинг / Parsing
    • синтаксический анализ текста, результатом чего может являться:
      • для формальной граматики - AST-дерево
      • для слабоструктурированного документа - структура данных, имеющая четкую структуру, в которую частично перенесены данные из слабой структуры
      • для других естественных или искуственных языков - информационные модели, им соответствующие
  • Регулярные выражения / Regular Expressions
    • синтаксическая конструкция, паттерн, формальный язык, определяющий порядок парсинга другой синтаксической конструкции
  • Модуль, модульность
    • целостный, функционально полный, независимый компонент программной системы имеющий имя, интерфейс, реализацию
    • модульность повышает переиспользование кода, упрощает интеграцию компонентов, улучшает компоновку и тестирование программ по частям
    • ограничения: модули не должны использовать глобальные переменные или модифицировать базовые классы/прототипы/функции языка программирования, платформы и/или фреймворка; модули должны быть слабо связаны, взаимодействовать друг с другом только через внешнее API (предпочтительно) или шину событий (если система построена на событийной модели, подписке или модели акторов)
  • Зависимость / Dependency
    • связанность программных компонентов, при которой один компонент (зависимый) "знает" другой; это значит, что в нем помещен вызов метода (реализация которого содержится в другом) или он слушает событие, которое генерирует другой или он "знает" структуры данных, которые могут быть переданы из другого компонента
  • Декомпозиция / Decomposition
    • разделение программного компонента на части по принципу функциональности, при этом, каждая часть будет решать подзадачу и появится часть кода, которая определяет порядок связи всех частей (композицию)
  • Ленивость / Lazy
  • Обработка ошибок / Error handling
  • Фабрика / Factory
    • функция или метод для инстациирования объектов, функций, структур данных и любых других программных абстракций, например, экземпляров класса в обход конструктора или функциональных объектов
  • Объектный Пул / Object Pool
    • Множество заранее инстанциированных объектов (или массивов, сокетов, буферов, структур данных и других программных абстракций) из которого мы можем их брать инициализированные экземпляры (вместо инстанциирования новых) и отдавать их после использования
  • Таймеры / Timers

Вспомогательные материалы

  • Линтер / Linter
    • статический анализатор кода (без запуска), который может определить и предложить стилистические, грамматические или оптимизационное улучшение или просто выявить проблему (а иногда и исправить ее автоматически)
  • Система контроля версий
  • Менеджер пакетов
  • Непрерывная интеграция
  • Тестирование

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

  • Запись или структура / Struct or Record
  • Массив / Array
  • Буфер / Buffer
  • Список / List
    • Односвязный, двусвязный, кольцевой, развернутый список (список массивов)
    • Реализация на объектах, массивах и замыканиях
    • Реализация на синтаксисе прототипов, классов и фабрик
    • Реализация на замыканиях и функциональных объектах
    • Реализация на одной и двух категориях (только узел или список и узел)
  • Стек, очередь, дек
    • Стек / Stack - Список, работающий про принципу LIFO
    • Очередь / Queue - Список, работающий про принципу FIFO
    • Дек / Dequeue двухсторонняя очередь (одновременно LIFO и FIFO)
  • Дерево
  • Двоичное дерево, поисковое дерево, красно-черное дерево
  • Куча / Heap - древовидная структура данных или область памяти для динамического распределения под хранение данных
  • Граф / Graph
  • Буфер / Buffer
    • область памяти для хранения данных (обычно для операций ввода/вывода)
  • Типизированные массивы
  • Коллекция / Collection
    • структура данных, служащая для хранения набора значений и предоставляющая доступ к ним по индексам или ключам
  • Множество / Set
    • структура данных, реализующая математическое "множество"
    • структура данных, служащая для хранения однородного набора значений, которые не имеют индексов или ключей (но внутри структуры данных они должны иметь порядок, например, индекс в массиве, однако, множество абстрагирует нас от этой особенности реализации)
  • Ключ-значение, Хешмап / Map, Key-value

Расширенные понятия

Примеры кода и комплексного использования технологий

Парадигмы программирования