Значение слова «примитив»

Графические редакторы

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

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

Векторная графика использует геометрические примитивы. Что такое графический примитив в векторной графике, уже говорилось выше. Это точки, линии, кривые и многоугольники (или полигоны) или векторные изображения. Такие фигуры основаны на математических выражениях, для представления изображений в компьютерной графике. Конвертировать векторную графику в растровую довольно просто, но из растровой в векторную гораздо сложнее. Некоторые программы пытаются это сделать. В дополнение к статической графике, есть анимация и программное обеспечение для редактирования видео. Компьютерная графика также может использоваться другим программным обеспечением для редактирования, таким как Adobe Photoshop, Pizap, Microsoft Publisher, Picasa и т. д. Еще один вариант — это программы для анимации, и видеоредакторы, такое как Windows Movie Maker.

Методы toString/valueOf

Методы и берут своё начало с древних времён. Они не символы, так как в то время символов ещё не существовало, а просто обычные методы объектов со строковыми именами. Они предоставляют «устаревший» способ реализации преобразований объектов.

Если нет метода , движок JavaScript пытается найти эти методы и вызвать их следующим образом:

  • для хинта со значением «string».
  • – в ином случае.

Для примера, используем их в реализации всё того же объекта . Воспроизведём его поведение комбинацией методов и :

Как видим, получилось то же поведение, что и в предыдущем примере с .

Довольно часто мы хотим описать одно «универсальное» преобразование объекта к примитиву для всех ситуаций. Для этого достаточно создать один :

В отсутствие и , обработает все случаи преобразований к примитивам.

Преобразование к примитивам

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

Существуют три варианта преобразований («три хинта»), описанные в :

Для преобразования объекта к строке, когда операция ожидает получить строку, например :

Для преобразования объекта к числу, в случае математических операций:

Происходит редко, когда оператор «не уверен», какой тип ожидать.

Например, бинарный плюс может работать с обоими типами: строками (объединять их) и числами (складывать). Таким образом, и те, и другие будут вычисляться. Или когда происходит сравнение объектов с помощью нестрогого равенства со строкой, числом или символом, и неясно, какое преобразование должно быть выполнено.

Оператор больше/меньше также может работать как со строками, так и с числами. Однако, по историческим причинам он использует хинт «number», а не «default».

На практике все встроенные объекты, исключая (мы познакомимся с ним чуть позже), реализуют преобразования тем же способом, что и . И нам следует поступать так же.

Обратите внимание, что существуют лишь три варианта хинтов. Всё настолько просто

Не существует хинта со значением «boolean» (все объекты являются в логическом контексте) или каких-либо ещё. И если мы считаем и одинаковыми, как большинство встроенных объектов, то остаются всего два варианта преобразований.

В процессе преобразования движок JavaScript пытается найти и вызвать три следующих метода объекта:

  1. Вызывает – метод с символьным ключом (системный символ), если такой метод существует, и передаёт ему хинт.
  2. Иначе, если хинт равен
  3. В случае, если хинт равен или

Цифровой дифференциальный анализатор

Другой алгоритм — цифровой дифференциальный анализатор — представляет собой алгоритм генерации отрезка, основанный на вычислении либо dy, либо dx. Для этого нужно спроецировать линию на единичные интервалы в одной координате и определить соответствующие значения целого числа, ближайшие к пути линии, для другой координаты. Алгоритм принимает в качестве входных данных две позиции пикселей на концах отрезка. Горизонтальные и вертикальные различия между позициями конечных точек назначаются параметрам dx и dy. Разница с большей величиной определяет приращение шагов параметра. Начиная с положения пикселя определяется смещение, необходимое на каждом шаге, для создания следующего положения пикселя вдоль линии.

Дисплейный файл и кадровый буфер

Графическим примитивом является также программное обеспечение, при помощи которого на экран выводится определенное изображение. Один из них — дисплейный файл. Он является массивом некоррелированных данных или набором команд, которые необходимы для правильной отрисовки изображения на экране. Массивы заполняются из данных списка, хранящегося в памяти. В результате их обработки на ЭЛТ-мониторе создается картинка, состоящая из пикселей разного цвета. Кадровым буфером называют устройство для хранения и вывода видео на экран. Обычно это устройство или вид памяти, которое хранит несколько кадров видеоизображения. Изображение находится в памяти в виде массива данных, где записаны последовательные цветовые значения каждого пикселя.

Другой пример [ Step-by-step ]

Следующий пример поможет разобраться как JavaScript работает с примитивами.

JavaScript

// The Primitive 
let foo = 5;

// Defining a function that should change the Primitive value
function addTwo(num) {
   num += 2;
}
// Another function trying to do the same thing
function addTwo_v2(foo) {
   foo += 2;
}

// Calling our first function while passing our Primitive as an argument
addTwo(foo);
// Getting the current Primitive value
console.log(foo);   // 5

// Trying again with our second function...
addTwo_v2(foo);
console.log(foo);   // 5

Вы ожидали, что будет 7 вместо 5? Если так, тогда прочитайте, как работает этот код:

  • При вызове обеих функций , JavaScript ищет значение для идентификатора . JavaScript правильно определяет нашу переменную, созданную с помощью первого оператора
  • После этого JavaScript передает найденный аргумент в функцию в качестве параметра
  • Перед выполнением операторов в теле функции, JavaScript берет исходный переданный аргумент (который является примитивом) и создает его локальную копию. Эти копии, существующие только внутри областей функций, доступны через идентификаторы, указанные в определениях функций ( для , foo для )
  • Затем выполняются операторы функций:
    • В первой функции был создан локальный аргумент . Мы увеличиваем его значение на 2 (а не значение исходной переменной ).
    • Во второй функции был создан локальный аргумент. Мы увеличиваем его значение на 2 (а не значение исходной (внешней) переменной ).  Кроме того, в этой ситуации, внешняя переменная является недоступной никаким способом. Это связано с лексическими областями JavaScript и, как следствие, с затенением переменных. Локальная переменная скрывает внешнюю переменную . Чтобы получить больше информации, смотри Closures.
  • Таким образом, никакие изменения внутри наших функций не будут влиять на ИСХОДНУЮ вообще, так как мы работаем с ее копиями

Вот почему примитивы неизменяемы (immutable). Потому что мы не работаем над ними напрямую. Мы создаем копию и продолжаем работать с ней, не касаясь исходных значений.

История примитивизма

Примитивизм (от лат. primitivus — первый, самый ранний) как отдельное направление в живописи появился лишь в конце XIX века. Но его истоки хорошо видны в древних культурах. Ясно различимые аналогии с творчеством примитивистов можно найти в наскальных рисунках первобытных людей, артефактах экзотических цивилизаций Африки и Океании. К примитивному искусству также можно отнести многие образцы детских рисунков, средневекового и народного изобразительного искусства.

Примитивизм появился на волне негативного восприятия многими деятелями изобразительного искусства буржуазной культуры конца XIX века. В тот период в живописи массово возникали новые революционные течения:

  • фовизм;
  • экспрессионизм;
  • кубизм;
  • дадаизм;
  • пуантилизм.

Огромный вклад в зарождение примитивизма внесли признанные мастера живописи: Поль Гоген (Paul Gauguin), Анри Матисс (Henri Matisse), Пабло Пикассо (Pablo Picasso). Черты примитивного искусства использовали в своем творчестве художники групп «Наби» (Франция), «Мост» (Германия), «Бубновый валет» и «Ослиный хвост» (Россия). Непосредственная искренность образов и родство с природой проявляется во многих работах Пауля Клее (Paul Klee), Марка Шагала, Амедео Модильяни (Amedeo Modigliani).

В картинах Поля Гогена четко прослеживается восхищение первобытной чистотой культуры Океании. Пабло Пикассо в определенный период времени после посещения этнографической выставки начал использовать в своих произведениях методы древних мастеров.

Искусствоведы того времени отказывались воспринимать примитивизм в качестве полноценного стиля изобразительного искусства. Картины выдающихся примитивистов рубежа XIX-XX веков Анри Руссо и Нико Пиросмани заслужили всемирное признание спустя многие десятилетия.

Интерес к примитивному искусству периодически возрастал и угасал на протяжении всего ХХ века. Но и сегодня художники часто обращаются к выразительным средствам примитивизма в своих работах.

Использование примитивов в редакторах

Графика в общем смысле состоит из трех основных элементов, в отличие от большого разнообразия графических приложений: пикселя, линии и полигона. Основная из этих элементарных структур — пиксель. Графические примитивы в графическом редакторе представляют собой простой объект, необходимый для создания или построения сложных изображений. Графика в программах для создания векторных изображений построена на таких элементах, как точка, линия и состоящие из них простые фигуры. Это круг, треугольник и квадрат, которые также можно назвать полигонами. Поэтому чаще всего при работе в графическом редакторе примитивами называются именно эти простые фигуры. Для растровой графики таким элементом будет пиксель.

Итого

Преобразование объектов в примитивы вызывается автоматически многими встроенными функциями и операторами, которые ожидают примитив в качестве аргумента.

Существует всего 3 типа преобразований (хинтов):

  • (для и других операций, которым нужна строка)
  • (для математических операций)
  • (для некоторых операций)

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

Алгоритм преобразований к примитивам следующий:

  1. Сначала вызывается метод , если он существует.
  2. Иначе, если хинт равен
  3. Иначе, если хинт равен или

На практике довольно часто достаточно реализовать только как «универсальный» метод для всех типов преобразований, возвращающий «читаемое» представление объекта, достаточное для логирования или отладки.

Оцените статью