Skip to content
Please note that GitHub no longer supports your web browser.

We recommend upgrading to the latest Google Chrome or Firefox.

Learn more
Programming Dictionary
Branch: master
Clone or download
Latest commit f0b8a7b Mar 21, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
LICENSE Update license Mar 21, 2019
README.md Add HTTP sessions repo Mar 20, 2019

README.md

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

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

Оглавление:

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

  • Абстракция / 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 интерфейс и даже асинхронную функцию вместе с колбеками (если известен контракт)
  • Рекурсия / Recursion
    • Рекурсия - определение функции, через нее саму или задание алгоритма вычисления функции через ее же вызов (или непрямой/косвенный вызов).
    • Косвенная рекурсия - когда фнкция определена или вызывает себя не напрямую, а через другую или цепочку функций.
    • Хвостовая - частный случай, когда рекурсивный вызов является последней операцией перед возвратом значения, что всегда может быть преобразовано в цикл, даже автоматическим способом. Не хвостовая может быть преобразована в цикл и оптимизирована более сложным способом, обычно вручную.
  • Дженерики / Generics
    • Обобщенное программирование - парадигма, позволяющая обобщенно описать алгоритмы и структуры данных, абстрагируясь от конкретных типов.
  • Интерфейс / 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
  • Адаптер / Adapter
    • Паттерн достижения совместимости, позволяющий обернуть класс, функцию или другой программный компонент с несовместимым контрактом в программный компонент с контрактом, который нам нужен.
  • Стратегия (Strategy)
    • Паттерн реализует выбор одного из совместимых и взаимозаменяемых классов, которые содержат поведение (алгоритм), аналогичный по функциональности и реализующий общий интерфейс. Актуален и для функционального программирования.
  • Фасад / Facade
    • Паттерн для скрытия сложности. Фасад скрывает несколько инстансов разных классов в своих свойствах (иногда приватных, но для JS этого пока нет) и предоставляет общий (фасадный) интерфейс для управления ими.
    • Для функционального программирования возможен аналог фасада - функция обертка, скрывающая инстансы в своем контексте и предоставляющая доступ к ним через возврат функции (с замыканием) или другого инстанса (методы которого тоже имеют доступ к скрываемым инстансам через замыкание).

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

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

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

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

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

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

Параллельное программирование

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

You can’t perform that action at this time.