Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Programming Dictionary

License

NotificationsYou must be signed in to change notification settings

HowProgrammingWorks/Dictionary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

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

Оглавление:

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

  • Абстракция / Abstractionэто обобщение, отвлеченное от конкретики с выделением существенных и отсечениемнесущественных свойств и связей. Абстрагирование - построение абстракций илимоделей, повышает повторное использование алгоритмов и структур данных.
    • Абстракция - обобщенное решение задачи (в отличие от конкретного решения),подходящее для широкого круга задач;
    • Абстракция - модель реального объекта (множества объектов), обобщениемножества, приближение к реальности, достаточное для решения задачи;
    • Абстракция - множество свойств и связей объекта, относящееся к определенномуего аспекту, необходимому для решения задачи;
    • Слои абстракций / Abstraction Layer
  • Парадигма программирования / Programming Paradigm
    • Парадигма задает набор идей и понятий, допущений и ограничений, концепций,принципов, постулатов, приемов и техники программирования для решения задачна ЭВМ;
    • Парадигма предлагает модель решения задач, определенный стиль, шаблоны(примеры хороших и плохих решений) применяемых для написания программного кода;
  • Синтаксис / Syntax - правила построения программного кода из символов, но незатрагивающие смысловую (семантическую) нагрузку кода. Синтаксис определяеттолько формальную структуру кода.
  • Значение / Value - величина, записанная в определенное место памяти вопределенном формате и представляющая данные, которым может манипулироватьпрограмма.
  • Тип / Type - множество значений и операции, которые могут быть произведены надэтими значениями. Например, в JavaScript типBoolean предполагает два значенияtrue иfalse и логические операции над ними, типNull предполагает однозначениеnull, а типNumber множество рациональных чисел с дополнительнымиограничениями на минимальное и максимальное значение, а так же ограничения наточность и математические операции+ - * ** / % ++ -- > < >= <= & | ~ ^ << >>.
  • Литерал / Literal - запись значения в коде программы. Например: литералы чисел,логических значений, null и undefined, строк, массивов, объектов, функций.Литералы могут иметь различный синтаксис, от очень простого, для записи чисел,до сложных синтаксических конструкций, для записи объектов.
  • Скаляр / Scalar / Primitive / Atomic value - значение примитивного типа данных.Скаляр копируется при присвоении и передается в функцию по значению.
  • Ссылка / Reference указывает на значение ссылочного типа, т.е. не скалярноезначение, для JavaScript это подтипыObject, Function, Array.
  • Идентификатор / Identifier - имена переменных, констант, функций, методов,аргументов, классов, как внутренние, так и импортированные из других модулей иглобальные.
  • Переменная / Variable -именованная область памяти (идентификатор), имеющая тип данных, адрес изначение. Мы можем менять значение переменной в отличие от константы (а длянекоторых языков и тип):let cityName = 'Beijing';
  • Присвоение / Assignment - связывания значения и идентификатора (напримерпеременной). Операция присвоения во многих языках возвращает присваиваемоезначение (имеет поведение выражения).
  • Константа / Constant -идентификатор, с которым связано неизменяемое значение и тип:const WATCH_TIMEOUT = 5000;
  • Структурные типы / Composed types -композитные типы или структуры состоят из нескольких скалярных значений,объединенных в одно таким образом, чтоб над этим объединенным значением можновыполнять набор операций, например: объект, массив, множество, кортеж.
  • Перечислимые типы / Enumerated types
  • Флаг / Flag - Логическое значение, определяющее состояние чего-либо, например,признак закрытия соединения, признак завершения поиска по структуре данных и т.д.Например:let flagName = false; Иногда флагами могут называть не логические, аперечислимые типы.
  • Алгоритм / Algorithm - это формальное описание порядка вычислений дляопределенного класса задач за конечное время (способность завершаться для любогомножества входных данных).
  • Программа / Program - программный код и данные, объединенные в одно целое длявычисления и управления ЭВМ.
  • Инженерия / Engineering - извлечение практической пользы из имеющихся ресурсовпри помощи науки, техники, различных методик, организационной структуры, а также приемов и знаний.
  • Инженерия программного обеспечения / Software engineering - приложениеинженерии к индустрии программного обеспечения. Включает архитектуру,исследование, разработку, тестирование, развертывание и поддержку ПО.
  • Программирование / Programming - это искусство и инженерия решения задач припомощи вычислительной техники.
  • Кодирование / Coding - написание исходного кода программы при помощиопределенного синтаксиса (языка), стиля и парадигмы по готовому ТЗ.
  • Разработка программного обеспечения / Software development - это соединениепрограммирования и кодирования на всех этапов жизненного цикла ПО:проектирования, разработки, тестирования, отладки, поддержки, сопровождения имодификации.
  • Инструкция / Instruction - один шаг алгоритма вычислений, например инструкцияпроцессора исполняется CPU.
  • Оператор / Statement - наименьшая синтаксическая часть языка программирования,исполняемая интерпретатором, средой или компилируемая в машинный код.
  • Команда / Command - атомарная задача для командного процессора.
  • Выражение / Expression - синтаксическая конструкция языка программированияпредназначенная для выполнения вычислений. Выражение состоит из идентификаторов,значений, операторов и вызова функций. Пример:(len - 1) * f(x, INTERVAL)
  • Блок кода / Block - логически связанная группа инструкций или операторов.Блоки создают область видимости. Блоки могут быть вложенными. Примеры:{},(+ a b),begin end, отступы в Python.
  • Процедура или подпрограмма / Procedure or Subroutine - логически связаннаягруппа инструкций или операторов, имеющая имя. Процедура способствует повторномуиспользованию кода и может быть вызвана из разных частей программы, много рази с разными аргументами. Процедура не возвращает значений, в отличие от функций,но в некоторых языках (но не в JavaScript) может модифицировать свои аргументы.Во многих языках процедура описывается при помощи синтаксиса функций (например,типа void).
  • Функция / Function - абстракция преобразования значений. Функция однозначноотображает одно множество значений в другое множество значений. Функция можетбыть задана блоком операторов или выражением. Функция имеет набор аргументов.Функция может быть вызвана по имени или через указатель. Функция способствуетповторному использованию кода и может быть вызвана из разных частей программы,много раз и с разными аргументами. В JavaScript функция описывается при помощиfunction или синтаксиса стрелок (лямбда-функций).
  • Сигнатура функции / Function signature - имя (идентификатор), количествоаргументов и их типы (а иногда и имена аргументов), тип результата.
  • Метод / Method
    • функция или процедура, связанная с объектным контекстом или программным интерфейсом;
    • { a: 10, b: 10, sum() { return this.a + this.b; } }
  • Цикл / Loop
    • многократное исполнение блока операторов
  • Условие / Conditional statements
    • синтаксическая конструкция, позволяющая выполнить разные действия иливозвращающая разные значения (тернарный оператор) в зависимости от логическоговыражения (возвращающего true или false)
  • Рекурсия / Recursion -задание алгоритма вычисления функции через вызов ее самой (прямой или непрямой)или определение функции, через нее саму.
    • Косвенная (непрямая) рекурсия - когда функция определена или вызывает себяне напрямую, а через другую или цепочку функций;
    • Хвостовая - частный случай, когда рекурсивный вызов является последнейоперацией перед возвратом значения, что всегда может быть преобразованов цикл, даже автоматическим способом. Не хвостовая тоже может бытьпреобразована в цикл и оптимизирована, но более сложным способом, обычновручную.
  • Строка / String
    • последовательность символов (в большинстве языков к каждому символу можнообратиться через синтаксис доступа к элементам массива, например, квадратныескобки).
  • Коллекция / Collection -структура данных, служащая для хранения набора значений и предоставляющая доступк ним по индексам или ключам.
  • Массив / Array - коллекция элементов, доступ к которым осуществляется поиндексам. Пример:const cities = ['Tehran', 'Yalta', 'Potsdam'];
  • Отладка / Debug - процесс обнаружения и устранения ошибок в программномобеспечении при помощи вывода сообщений или инструментов: отладчика,профилировщика, декомпилятора, систем мониторинга ресурсов и логирования,систем непрерывной интеграции и тестирования.
  • ЦП / CPU - центральный процессор / central processing unit - устройство,выполняющее машинные инструкции.
  • АЛУ / ALU - блок ЦП, выполняющий арифметические и логические преобразованиянад машинными словами, представляющими целые числа, числа с плавающей точкой,адресами памяти, строками, логическими величинами.
  • Компонент / Component - несколько программных объектов (например: функций,классов, монад, типов) объединенных и организованных по общему признаку.
  • Модуль / Module - целостный, функционально полный, независимый компонентпрограммной системы имеющий имя, интерфейс, реализацию.
  • Модульность / Modularity
    • модульность повышает переиспользование кода, упрощает интеграцию компонентов,улучшает компоновку и тестирование программ по частям;
    • ограничения: модули не должны использовать глобальные переменные илимодифицировать базовые классы/прототипы/функции языка программирования,платформы и/или фреймворка; модули должны быть слабо связаны, авзаимодействовать друг с другом должны через внешнее API (предпочтительно)или шину событий (если система построена на событийной модели, подписке).
  • Библиотека / Library - сборник программных объектов (например: функций,классов, монад, типов) подготовленный для повторного использования (частоопубликованный). Библиотека это более крупная логическая часть кода, чемкомпонент. Иногда библиотеку используют как синоним модуля, а иногда библиотекасостоит из нескольких модулей.
  • Сложность / Complexity
    • Вычислительная сложность / Computational complexity
    • Колмогоровская (описательная) сложность / Kolmogorov (descriptive) complexity
    • Если нет циклов, то описательная коррелирует с вычислительной

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

  • Объект или Экземпляр / Object or Instance -структура данных, содержащая состояние и методы, связанные с этим состоянием.Объект может быть создан как литерал{} или экземпляр классаnew ClassName()или как экземпляр прототипаnew PrototypeConstructor() или возвращен из фабрики.
    • const person = { name: 'Marcus', city: 'Roma', born: 121 };
    • const person = new Person('Marcus', 'Roma', 121);
  • Класс / Class -программная абстракция, объединяющая состояние и поведение (свойства и методы)своих экземпляров (инстансов).
    • class Point { constructor(x, y) { this.x = x; this.y = y; } }
    • class Rect { move(x, y) { this.x += x; this.y += y; } }
    • class Square extends Rect { constructor(x, y, m) { super(x, y, m, m); } }
    • class Point { static from(point) { return new Point(this.x, this.y); } }
  • Прототип / Prototype -специальный объект, на который ссылаются его экземпляры и наследники. Свойствапрототипа становятся видны у наследников, если эти свойства не переопределены унаследников. Формируется цепочка прототипов, по которой происходитпоследовательный поиск свойств, пока они не будут найдены или пока не будетдостигнут конец цепочки наследования. Иногда под прототипом понимается шаблон,который клонируется во время инстанциирования (не для JavaScript).
  • Инстанцирование / 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'];
  • Область видимости / Scope - часть кода, из которой "виден" идентификатор.
  • Лексический контекст / Lexical environment - набор идентификаторов, связанныхс определенными значениями в рамках функции или блока кода (в том числе блоковциклов, условий и т.д.).
  • Объектный контекст функции - объект, связанный со служебным идентификаторомthis. Все функции, кроме стрелочных, могут быть связаны с объектным контекстом.Объект связан сthis если функция является методом этого объекта, если функцияпривязана к нему черезbind или вызвана черезapply иcall.
  • Глобальный контекст / Global context - глобальный объект-справочник. Еслиидентификатор не находится ни в одном из вложенных лексических контекстов, тобудет выполнен его поиск в глобальном контексте (global, window, sandbox).
  • Объявление функции / Function definition - способ объявления функции, которыйвиден из любого места в лексическом контексте, в котором объявлена функция,пример:function sum(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
  • Инструкция / Instruction - один шаг алгоритма вычислений, например инструкция процессора исполняется CPU.
  • Оператор / Statement - наименьшая синтаксическая часть языка программирования, исполняемая интерпретатором, средой или компилируемая в машинный код.
  • Команда / Command - атомарная задача для командного процессора.
  • Выражение / Expression - синтаксическая конструкция языка программирования предназначенная для выполнения вычислений. Выражение состоит из идентификаторов, значений, операторов и вызова функций. Пример: (len - 1) * f(x, INTERVAL)
  • Блок кода / Block - логически связанная группа инструкций или операторов. Блоки создают область видимости. Блоки могут быть вложенными. Примеры: {}(+ a b)begin end, отступы в Python.
  • Процедура или подпрограмма / Procedure or Subroutine - логически связанная группа инструкций или операторов, имеющая имя. Процедура способствует повторному использованию кода и может быть вызвана из разных частей программы, много раз и с разными аргументами. Процедура не возвращает значений, в отличие от функций, но в некоторых языках (но не в JavaScript) может модифицировать свои аргументы. Во многих языках процедура описывается при помощи синтаксиса функций (например, типа void).
  • Функция / Function - абстракция преобразования значений. Функция однозначно отображает одно множество значений в другое множество значений. Функция может быть задана блоком операторов или выражением. Функция имеет набор аргументов. Функция может быть вызвана по имени или через указатель. Функция способствует повторному использованию кода и может быть вызвана из разных частей программы, много раз и с разными аргументами. В JavaScript функция описывается при помощи function или синтаксиса стрелок (лямбда-функций).Сигнатура функции / Function signature - имя (идентификатор), количество аргументов и их типы (а иногда и имена аргументов), тип результата.
  • Метод / Methodфункция или процедура, связанная с объектным контекстом или программным интерфейсом;{ a: 10, b: 10, sum() { return this.a + this.b; } }
  • Цикл / Loop - многократное исполнение блока операторов
  • Условие / Conditional statements - синтаксическая конструкция, позволяющая выполнить разные действия или возвращающая разные значения (тернарный оператор) в зависимости от логического выражения (возвращающего true или false)
  • Рекурсия / Recursion - задание алгоритма вычисления функции через вызов ее самой (прямой или непрямой) или определение функции, через нее саму.
  • Косвенная (непрямая) рекурсия - когда функция определена или вызывает себя не напрямую, а через другую или цепочку функций;
  • Хвостовая - частный случай, когда рекурсивный вызов является последней операцией перед возвратом значения, что всегда может быть преобразовано в цикл, даже автоматическим способом. Не хвостовая тоже может быть преобразована в цикл и оптимизирована, но более сложным способом, обычно вручную.
  • Строка / String - последовательность символов (в большинстве языков к каждому символу можно обратиться через синтаксис доступа к элементам массива, например, квадратные скобки).
  • Коллекция / Collection - структура данных, служащая для хранения набора значений и предоставляющая доступ к ним по индексам или ключам.
  • Массив / Array - коллекция элементов, доступ к которым осуществляется по индексам. Пример: const cities = ['Tehran', 'Yalta', 'Potsdam'];
  • Отладка / Debug - процесс обнаружения и устранения ошибок в программном обеспечении при помощи вывода сообщений или инструментов: отладчика, профилировщика, декомпилятора, систем мониторинга ресурсов и логирования, систем непрерывной интеграции и тестирования.
  • ЦП / CPU - центральный процессор / central processing unit - устройство, выполняющее машинные инструкции.
  • АЛУ / ALU - блок ЦП, выполняющий арифметические и логические преобразования над машинными словами, представляющими целые числа, числа с плавающей точкой, адресами памяти, строками, логическими величинами.
  • Компонент / Component - несколько программных объектов (например: функций, классов, монад, типов) объединенных и организованных по общему признаку.
  • Модуль / Module - целостный, функционально полный, независимый компонент программной системы имеющий имя, интерфейс, реализацию.)
    • 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 - при помощи замыканий,частичного применения, каррирования, вложенных лямбд.
  • Обертка / Wrapper
    • функция, которая оборачивает другую функцию (иногда объект, интерфейс илифункциональный объект), добавляя ему дополнительное поведение;
    • можно обернуть целый API интерфейс и даже асинхронную функцию вместе сколбеками (если известен контракт);
  • Дженерики / Generics
    • Обобщенное программирование - парадигма, позволяющая обобщенно описатьалгоритмы и структуры данных, абстрагируясь от конкретных типов.
  • Интерфейс / Interface
    • набор методов (функций) объединенных или общим объектным контекстом илиприменением к структурам данных одной предметной области т.е. смыслом (API);
    • способ определения (спецификации) контракта, по которому связаныпрограммные компоненты;
    • Набор методов с их именами, аргументами и типами аргументов
  • Программный интерфейс / Application Interface, API
    • интерфейс программных компонентов: модулей, слоев абстракции, приложений;
  • Синглтон / Singleton
    • шаблон проектирования, предполагающий, что в одном пространстве имен(процессе, приложении, базе данных) будет только один экземпляр класса(или просто один подобный объект) к которому можно обратиться по определенному(известному) имени;
  • Функция обратного вызова, колбек / Callback
    • функция передаваемая в качестве аргумента в другую функцию (или метод)для того, чтобы быть вызванной для возврата значения, ошибки или уведомления;
    • функции обратного вызова имеют подтипы:
  • Итерирование / Iteration -многократное повторение одного блока кода или одной функции над различнымиданными: элементами массивов, множеств, списков, коллекций и различнымизначениями переменной цикла.
  • Итератор / Iterator -интерфейс доступа к элементам коллекции: массива, множества, списка;
  • Файл / File
  • Поток, Файловый поток / Stream, File Stream
  • Сокет / Socket -программный интерфейс (или абстракция) для обмена данными между процессами.
  • Дескриптор / Handle -уникальный идентификатор программного объекта (чаще всего объекта операционнойсистемы): файла, сокета, окна, таймера, соединения и т.д.
  • Состояние / State - совокупность данных программного компонента (переменныхи структур данных), определяющие его поведение и реакцию на операции с ним.
  • Кэш / Cache - место временного хранения данных (буфер, коллекция, областьпамяти) для быстрого доступа и оптимизации. Возможно кэширование операцийчтения, вычислений, операций записи (когда запись не может быть произведенадостаточно быстро) или упреждающее чтение в буфер (когда можно определить,какие данные будут запрошены с наибольшей вероятностью).
  • Хэширование / Hashing - преобразование данных произвольной длины (буфера,массива, объекта или структуры данных) в последовательность битов определеннойдлины (хеш) при помощи хеш-функции (при изменении хоть 1 бита в данных хешменяется существенно).
  • Функциональный объект -объект функционального типа, который является функцией и объектом одновременно.Другими словами, функциональный объект может быть вызван, как функция и можетиметь свойства и методы, как объект.
  • Функтор / Functor - этофункциональный объект, который является еще и рекурсивным замыканием. Функторхранит в замыкании защищенное значение и позволяющий отобразить это значениев другой функтор через вызов функции (обычноmap).
  • Аппликативный функтор -функтор, который имеет методapply.
  • Монада / Monad - аппликативный функтор, который имеет методchain.
  • Мемоизация / Memoization -обертка, сохраняющая результаты выполнения функции для предотвращения повторныхвычислений.
  • Примесь / Mixin - добавлениесвойств, методов или поведения к объекту после его инстанциирования. Пример:Object.assign(target, { field1, field2 }, { field3 });
  • Декоратор / Decorator - шаблон оборачивания объектов или функций для добавленияновой функциональности без наследования при помощи специального синтаксиса.
  • Наследование / Inheritance
  • Множественное наследование / Multiple Inheritance
  • Непрямое наследование / Indirect Inheritance
  • Генератор / Generator
  • Итератор / Iterable and Iterator
  • Ввод/вывод / 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 -синтаксическая конструкция, паттерн, формальный язык, определяющий порядокпарсинга другой синтаксической конструкции.
  • Зависимость / Dependency -связанность программных компонентов, при которой один компонент (зависимый)"знает" другой; это значит, что в нем помещен вызов метода (реализация которогосодержится в другом) или он слушает событие, которое генерирует другой или он"знает" структуры данных, которые могут быть переданы из другого компонента.
  • Декомпозиция / Decomposition - разделение программного компонента на части попринципу функциональности, при этом, каждая часть будет решать подзадачу ипоявится часть кода, которая определяет порядок связи всех частей (композицию).
  • Ленивость / Lazy
  • Обработка ошибок / Error handling
  • Фабрика / Factory - функцияили метод для инстациирования объектов, функций, структур данных и любых другихпрограммных абстракций, например, экземпляров класса в обход конструктора илифункциональных объектов.
  • Объектный Пул /Object Pool -Множество заранее инстанциированных объектов (или массивов, сокетов, буферов,структур данных и других программных абстракций) из которого мы можем их братьинициализированные экземпляры (вместо инстанциирования новых) и отдавать ихпосле использования.
  • Таймеры / Timers
  • Адаптер / Adapter -Паттерн достижения совместимости, позволяющий обернуть класс, функцию илидругой программный компонент с несовместимым контрактом в программныйкомпонент с контрактом, который нам нужен.
  • Стратегия (Strategy) -Паттерн реализует выбор одного из совместимых и взаимозаменяемых классов,которые содержат поведение (алгоритм), аналогичный по функциональности иреализующий общий интерфейс. Актуален и для функционального программирования.
  • Фасад / Facade - Паттерндля скрытия сложности. Фасад скрывает несколько инстансов разных классов всвоих свойствах (иногда приватных, но для JS этого пока нет) и предоставляетобщий (фасадный) интерфейс для управления ими. Для функциональногопрограммирования возможен аналог фасада - функция обертка, скрывающаяинстансы в своем контексте и предоставляющая доступ к ним через возвратфункции (с замыканием) или другого инстанса (методы которого тоже имеютдоступ к скрываемым инстансам через замыкание).

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

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

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

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

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

Асинхронное программирование

  • Асинхронное программирование / Asynchronous Programming
  • Неблокирующая операция / Non-blocking I/O
  • Асинхронное итерирование / Asynchronous Iterable
  • Асинхронный коллектор данных / Asynchronous data collector
  • Промис / Promise
  • Генератор / Generator Function
  • Асинхронный генератор / Asynchronous Generator Function
  • Итератор / Iterator
  • Асинхронный итератор / Asynchronous Iterator
  • Итерируемый объект / Iterable
  • Асинхронная композиция функций / Asynchronous Function Composition
  • Thenable
  • async/await
  • Асинхронная очередь / Asynchronous Queue
  • Открытый конструктор / Revealing Constructor
  • Фьючер / Future
  • Дифер / Deferred
  • Модель акторов / Actor Model
  • Наблюдатель / Observer
  • Поток событий / Event stream

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

  • Состояние гонки / Race Condition - состояние в многопоточной или конкурентнойпрограммной системе, когда несколько потоков исполнения конкурируя за общийресурс портят данные, приводят к непредусмотренному порядку исполнения,зацикливаются, и т.д., что приводит к утечке ресурсов, непредсказуемому инеправильному поведению, уязвимостям, нестабильности работы.
  • Взаимная блокировка / Deadlock - состояние в многопроцессовой (распределенной)системе, когда несколько процессов захватили ресурсы, необходимые для дальнейшейработы друг друга, заблокировав, тем самым дальнейшую работу.
  • Livelock - зацикленная блокировка, бесконечно изменяющая состояние, но невыполняющая полезной работы.
  • Ресурсный голод / Resource starvation - состояние в программной системе (обычномногопоточной), когда она постоянно запрашивает доступ к ресурсам (обычноразделяемым), и не может их получить.
  • Критическая секция / Critical section - участок исполняемого кода, в которомпроизводится эксклюзивный доступ к разделяемому ресурсу.
  • Потоки / Threads
    • SharedArrayBuffer
    • worker_threads в Node.js
  • Атомарные операции / Atomics
  • Семафор / Semaphore
  • Мьютекс / Mutex

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

Sponsor this project

    Contributors9


    [8]ページ先頭

    ©2009-2025 Movatter.jp