Что это значит, когда данные скалярные?

79

Я не знаю, что именно означает скаляр, но я пытаюсь понять, правильно ли я думаю об этом. Относится ли скаляр к произвольности, когда тип данных может быть любого типа, или система не может заранее знать, что это за данные.

Райан М
источник
Интересный факт: платформе XML, в которой я провел свои дни в последнее время (используя XQuery), нравится называть эти атомарные значения. Я думаю, что это тесно связано, добавив комментарий для ссылки / условия поиска.
Чарльз Росс

Ответы:

113

Термин «скаляр» происходит от линейной алгебры , где он используется для дифференциации одного числа от вектора или матрицы. Смысл в вычислениях похож. Он отличает одно значение, например, целое число или число с плавающей точкой, от структуры данных, например, от массива. Это различие очень заметно в Perl, где $символ (который напоминает «s») используется для обозначения скалярной переменной, а @символ (который напоминает «a») обозначает массив. Это не имеет ничего общего с типом самого элемента. Это может быть число, символ, строка или объект. Важно , чтобы называться скалярным, что есть один из них.

Карл Билефельдт
источник
6
Это хороший пример того, как один и тот же термин может означать разные вещи в разных контекстах. В таких языках, как C или Pascal, скаляр относится к простым типам «строительных блоков», таких как intили char, а не к структурированным типам, таким как объекты (даже если есть только один).
Калеб
2
Я также добавил бы, что в дополнение к массивам скаляр не является составной структурой данных, такой как структура или класс. Различие состоит в том, что массив состоит из нескольких элементов одного типа, а структура - из нескольких элементов произвольных типов.
1
Кроме того, строка может быть нескалярным значением. Такие языки, как Perl, рассматривают его как скаляр, но в любом языке на основе C я бы сказал, что это массив или объект.
1
@ Карл Я не знаю Perl, но не могли бы вы уточнить, что такое сигил ?
Компьютерщик
2
@ Гик, это символ, который вы ставите перед переменной, например $variable. Смотрите страницу википедии .
Карл Билефельдт
27

Скаляр - это просто переменная, которая содержит индивидуальное значение . Для целей этого обсуждения давайте предположим, что скаляр - это одно число, а не набор чисел.

Например, результат запроса SQL, который возвращает число вместо кортежа, как и метод ExecuteScalar () в классе SQLCommand , который возвращает значение первого столбца первой строки в наборе результатов, возвращенном запросом. Обычно он используется для получения совокупного значения, такого как COUNT или AVERAGE, идентификатор новой записи или количество записей, обработанных запросом.

Роберт Харви
источник
19

Дополнительная мнемоника к великому ответу Карла Билефельдта:

Простой способ думать об этом, "это может быть в масштабе?"

Целое число может быть в масштабе.

Целое число фиксированного размера может быть в масштабе, например, от -2147483648 до 2147483647.

Реальное число может быть в масштабе.

Символ, логическое значение или десятичная дробь с фиксированной точностью могут быть в масштабе. Даже строка может быть в масштабе (мы используем такие в сортировке).

Отсюда и «скаляр».

Строка базы данных не может быть в масштабе. Комплексное число не может быть в масштабе. Объект, представляющий сообщение электронной почты, не может быть в масштабе. Массив, вектор или матрица не могут быть в масштабе.

Джон Ханна
источник
10
Если строка может быть в масштабе, почему не массив? "это может быть в масштабе?" не дает интуитивных результатов, по крайней мере для меня.
VBCPP
2
@VBCPP, где в масштабе, содержащем {1, 2}, сидит {2, 1}? До или после? Теперь, при условии, что мы можем обеспечить порядок, но нет четкого порядка. Имейте также в виду, что я пытаюсь предложить простой способ обдумать это (ответ Карла Билефельдта хорошо дает более точный ответ IMO, и я бы не стал его улучшать, просто дополняя). Тем не менее, здесь есть элемент контекста. Строка может или не может считаться скалярной в зависимости от контекста; в SQL это скаляр по уважительной причине, в C - нет, также и по уважительной причине.
Джон Ханна
7
Это просто неправильно .
Эндрю Медико
2
Я не согласен, что это "просто неправильно", очевидно, хотя я думаю, что Карл Билефельдт должен иметь галочку. Это мнемоника, которая слишком длинна, чтобы быть комментарием, это лучший ответ.
Джон Ханна
2
Я думаю, что «это просто неправильно» происходит от идеи, что ответ не имеет никакого смысла, и ваш ответ на вопрос @VBCPP не отвечает на его вопрос. Мне, конечно, нравится идея мнемоники, но вам все еще нужно объяснить значение, например, целочисленного существа в масштабе. С таким же успехом можно говорить о помещении кота в телевизор.
Турболад
10

Как и в случае со многими терминами в вычислительной технике; Происхождение слова связано с более физическими свойствами. Термин Скалярный является относительно старым в вычислительной технике. Его определение в наши дни менее строгое. Когда вы храните данные в памяти компьютера, эти данные могут помещаться в один адрес (1 байт *) или нет. Когда это было, это называлось скалярным, когда это не называлось составным. Главным образом потому, что процессоры могут обрабатывать только один адрес / часть данных (= 1 байт) за раз. Как заявлено @Karl Bielefeldt; термин действительно был взят из алгебры.

Мы называем строку строкой, потому что это строка символов. Символ является / был скаляром, а строка является / была составной. Хранение 1 части данных (данных) по нескольким адресам несколько размыло линию. Подумайте об этом так: когда процессор мог обрабатывать данные в одной инструкции, это было скалярно.

В наши дни скаляр - это любое единственное значение, и то, что такое единственное значение, может быть различным для разных языков. целые числа, числа с плавающей запятой, символы, строки, логические значения и перечисления - по большей части - считаются скалярами в наши дни. Массивы, списки, деревья, объекты и т. Д. Не являются.

(* Я говорю 1 байт, чтобы прояснить ситуацию, но технически я говорю о тех днях, когда 6 бит чаще использовались, например, на перфокартах, а затем на магнитных полосах)

Отказ от ответственности: я не могу найти какие-либо ссылки на это в Интернете, я получил информацию в школе и из старых книг, среди которых (я думаю): математические таблицы и другие пособия для вычислений с 1944 года. При этом моя память не то, что раньше, так что если кто-то может изменить / подтвердить или опровергнуть мой ответ, было бы неплохо.

выворачивать наизнанку
источник
9

Скаляр - это простое одиночное числовое значение (как в 1, 2/3, 3.14 и т. Д.), Обычно целочисленное, с фиксированной точкой или с плавающей точкой (одинарное или двойное), в отличие от массива, структуры, объекта, сложного вектора ( действительные плюс мнимые или величины плюс угловые компоненты), вектор данных более высокого размера или матрицы (и т. д.), содержащий более одного числового значения.

Однако обратите внимание, что большой очень сложный тип данных такого рода, который также может быть сведен и представлен в 8-битных байтах компьютерной памяти, также может быть представлен как одно очень длинное / большое двоичное скалярное число. Тьюринг использовал эту технику для представления целых компьютерных программ как одного скалярного числа.

hotpaw2
источник
Это допускает такие понятия, как недопустимые числа и недопустимые простые числа - числовые представления «нелегальных» программ.
Андрей
Скаляр не должен быть числовым. Строка, логическое значение или дата / время также является скаляром.
david.pfx
Так что, если я сделаю сложный класс даты, основанный на полях нескольких скаляров (например, int для месяца, один для года и один для дня)?
Пьер Арло
1
@ david.pfx: строка при просмотре в виде массива символов не является скалярной.
MSalters
1
@MSalters: Конечно, и целое число, рассматриваемое как массив битов, тоже нет. Все, что может храниться и извлекаться как одно неизменное анонимное значение, является скаляром, и большинство языков позволяют вам делать это со строкой, датой, комплексом, точкой и т. Д., Даже если их можно просматривать и другими способами.
david.pfx
1

Слово скаляр происходит от латинского слова scalaris, прилагательной формы scala (в переводе с латыни «лестница»). Английское слово «шкала» также происходит от скалы. Источник

Скаляр - это переменная, которая содержит индивидуальное значение.

Например:

Скалярная переменная . Предположим, вы пытаетесь представить имена разных учеников в виде набора переменных. Каждая из отдельных переменных является скалярной переменной следующим образом

NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"

Скалярные функции : Скалярные функции SQL возвращают одно значение на основе входного значения.

UCASE() - Converts a field to upper case
LCASE() - Converts a field to lower case
Premraj
источник