rosko / Dictionary

Programming Dictionary

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Programming Dictionary

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

  • Абстракция / 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
  • Ссылочные типы / Reference
    • типы данных, передаваемые по ссылке, а не по значению
    • например: Object, Function, Array
  • Объект / 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
    • специальный объект, на который ссылаются его экземпляры, и свойства которого становятся видны у наследников, если эти свойства не переопределены у наследников (формируется цепочка прототипов, по которой последовательно ищутся свойства, пока не будут найдены или пока не будет достигнут конец)
    • шаблон, который клонируется во время инстанциирования
  • Флаг / Flag
    • Логическое значение, определяющее состояние чего-либо, например, признак закрытия соединения, признак завершения поиска по структуре данных и т.д.
    • let flagName = false;
  • Cтруктуры данных
  • Массив / Array
    • коллекция эллементов, доступ к которым осуществляется по индексам
    • const cities = ['Tehran', 'Yalta', 'Potsdam'];
  • Функция
    • определения
      • функциональное программирование: отображение или преобразование, элементов одного множества в элементы другого множества
      • императивное программирование: ссылка на блок операторов (не обяхательно именованный), реализующий последовательность действий
      • обобщенное определение: выражение или блок операторов имеющий имя или анонимный, преобразующий аргументы в результаты или изменяющий состояние контекстов или объектов
    • Контекст
    • Область видимости / 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
    • интерфейс доступа к элементам коллекции: массива, множества, списка
  • Цикл / Loop
    • многократное исполнение блока операторов
  • Условие / Conditional statements
    • синтаксическая конструкция, позволяющая выполнить разные действия или возвращающая разные значения (тернарный оператор) в зависимости от логического выражения (возвращающего true или false)
  • Строка / String
    • последовательность символов (в большинстве языков к каждому символу можно обратиться через синтаксис доступа к элементам массива, например, квадратные скобки)
  • Коллекция / Collection
    • структура данных, служащая для хранения набора значений и предоставляющая доступ к ним по индексам или ключам
  • Множество / Set
    • структура данных, реализующая математическое "множество"
    • структура данных, служащая для хранения одногодного набора значений, которые не имеют индексов или ключей (но внутри структуры данных они должны иметь порядок, например, индекс в массиве, однако, множество абстрагирует нас от этой особенности реализации)
  • Ключ-значение, Хешмап / Map, Key-value
  • Список / List *
  • Дерево *
  • Граф / Graph *
  • Файл / File *
  • Поток, Файловый поток / Stream, File Stream *
  • Буфер / Buffer *
  • Сокет / Socket *
  • Дескриптор / Descriptor *
  • Состояние / State
    • совокупность данных программного компонента (переменных и структур данных), определяющие его поведение и реакцию на операции с ним
  • Кэш, Кэширование / Cache *
  • Хэш, Хэширование / Hashing *
  • Функциональный объект
    • Функтор / 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 *
    • связанность программных компонентов, при которой один компонент (зависимый) "знает" другой; это значит, что в нем помещен вызов метода (реализация которого содержится в другом) или он слушает событие, которое генерирует другой или он "знает" структуры данных, которые могут быть переданы из другого компонента
  • Линтер / Linter
    • статический анализатор кода (без запуска), который может определить и предложить стилистические, грамматические или оптимизационное улучшение или просто выявить проблему (а иногда и исправить ее автоматически)
  • Декомпозиция / Decomposition
    • разделение программного компонента на части по принципу функциональности, при этом, каждая часть будет решать подзадачу и появится часть кода, которая определяет порядок связи всех частей (композицию)
  • Ленивость / Lazy
  • Обработка ошибок / Error handling
  • Фабрика / Factory
    • функция или метод для инстациирования объектов, функций, структур данных и любых других программных абстракций, например, экземпляров класса в обход конструктора или функциональных объектов
  • Объектный Пул / Object Pool *
    • Множество заранее инстанциированных объектов (или массивов, сокетов, буферов, структур данных и других программных абстракций) из которого мы можем их брать инициализированные экземпляры (вместо инстанциирования новых) и отдавать их после использования

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

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

About

Programming Dictionary

License:MIT License