Що це означає, коли дані скалярні?


78

Я не знаю, що саме скаляр означає, але я намагаюся зрозуміти, чи правильно я думаю про це. Чи скаляр стосується довільності, коли тип даних може бути будь-якого типу, або система не в змозі знати, які дані є заздалегідь.


Факт забави: Платформа XML, в якій я нещодавно проводив свої дні (використовуючи XQuery), любить називати ці атомні значення. Я думаю, що це тісно пов'язане, додаючи коментар для довідкових / пошукових термінів.
charles ross

Відповіді:


112

Термін "скалярний" походить від лінійної алгебри , де він використовується для диференціації одиничного числа від вектора або матриці. Сенс у обчислювальній роботі аналогічний. Він відрізняє єдине значення, як ціле число або плавець, від структури даних, як масив. Ця відмінність є дуже помітною в Perl, де $сигіл (який нагадує 's') використовується для позначення скалярної змінної, а @sigil (який нагадує 'a') позначає масив. Це не має нічого спільного з типом самого елемента. Це може бути число, символ, рядок або об’єкт. Що важливо назвати скаляром, це те, що є одна з них.


6
Це хороший приклад того, як один і той же термін може означати різні речі в різних контекстах. У таких мовах, як C або Pascal, скалярний позначає прості типи "будівельних блоків", як, intабо char, не структуровані типи, як об'єкти (навіть якщо є лише один).
Калеб

2
Я також додав би, що крім масивів, скаляр не є складною структурою даних, такою як структура або клас. Різниця в тому, що масив - це декілька елементів одного типу, тоді як структура - це кілька елементів довільних типів.

1
Також рядок може бути непалярним значенням. Такі мови, як Perl, трактують це як скалярний, але будь-якою мовою, що базується на С, я б стверджував, що це масив чи об'єкт.

1
@Karl Я не знаю Perl, але ви можете, будь ласка, уточнити, що таке сигіл ?
Geek

2
@Geek, це символ, який ви ставите перед змінною, наприклад $variable. Дивіться сторінку вікіпедії .
Карл Білефельдт

27

Скаляр - це просто змінна, яка має індивідуальне значення . Для цілей цієї дискусії припустимо, що скаляр - це єдине число, а не сукупність чисел.

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


19

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

Простий спосіб мислення про це: "чи може це бути в масштабі?"

Ціле число може бути в масштабі.

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

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

Символьні, булеві або десяткові цифри з фіксованою точністю можуть бути на шкалі. Навіть рядок може бути в масштабі (ми використовуємо таке при сортуванні).

Звідси "скалярний".

Рядок бази даних не може бути в масштабі. Комплексне число не може бути в масштабі. Об'єкт, що представляє повідомлення електронної пошти, не може бути в масштабі. Масив, вектор або матриця не можуть бути в масштабі.


10
Якщо рядок може бути в масштабі, чому б не масив? "це може бути в масштабі?" не дає інтуїтивних результатів, принаймні для мене.
VBCPP

2
@VBCPP, де на шкалі, що містить {1, 2}, сидить {2, 1}? До чи після? Тепер, надано, ми можемо виконати замовлення, але чіткого замовлення немає. Майте на увазі також, що я намагаюся запропонувати простий спосіб подумати про це (відповідь Карла Білефельдта робить хорошу роботу, даючи більш точну відповідь ІМО, і я б не намагався покращити це, лише додаток). Однак, тут є елемент контексту. Рядок може бути або не вважатися скалярним залежно від контексту; у SQL це скаляр з вагомих причин, у C - це не так, і з вагомої причини.
Джон Ханна

7
Це просто неправильно .
Ендрю Медіко

2
Я не погоджуюся, що це "просто неправильно", очевидно, хоча я думаю, що Карл Білефельдт повинен мати галочку. Це мнемотик, який занадто довгий, щоб коментувати, це краща відповідь.
Джон Ханна

2
Я думаю, що коментар "це просто неправильно" походить від думки, що відповідь не має сенсу, а ваша відповідь на запитання @VBCPP не відповідає на його запитання. Мені, звичайно, подобається ідея мнемоніки, але вам все одно потрібно пояснити значення, наприклад, цілого числа, що знаходиться в масштабі. Можна також говорити про те, щоб покласти кішку в телевізор.
турболаден

10

Як це стосується багатьох термінів в обчислювальній техніці; походження слова стосується більше фізичних властивостей. Термін «Скаляр» порівняно старий у обчислювальних технологіях. Її визначення в наші дні менш суворе. Якщо ви зберігаєте дані в пам'яті комп'ютера, ці дані можуть або вміщуватися в одну адресу (1 байт *), або ні. Коли це було зроблено, його називали скалярним, коли не - називали складовим. Головним чином, через те, що процесори могли обробляти лише одну адресу / фрагмент даних (= 1 байт) одночасно. Як зазначає @Karl Bielefeldt; термін справді був взято з алгебри.

Ми називаємо рядок рядком, тому що це рядок символів. Значок є / був скалярним, а струна - / складовою. Зберігання 1 фрагмента даних (дата) у кількох адресах дещо розмиває рядок. Подумайте про це так: Коли процесор міг обробити дату в одній інструкції, це було скалярно.

Сьогодні скаляр - це будь-яке значення однини, і те, що є особливим значенням, може визначатися по-різному серед різних мов. цілі числа, поплавці, символи, рядки, булі та перерахунки - здебільшого вважаються скалярами в наші дні. Масиви, списки, дерева, об’єкти тощо - це не так.

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

Відмова: Я не можу знайти жодних посилань на це в Інтернеті, я отримав інформацію в школі та зі старих книг, серед яких (я думаю): Математичні таблиці та інші засоби для обчислення з 1944 року. не те, що було раніше, тож якщо хтось може змінити / підтвердити чи заперечити мою відповідь, було б добре.


9

Скаляр - це просте єдине числове значення (як у 1, 2/3, 3.14 тощо), як правило, ціле число, фіксована точка або поплавок (одинарне або подвійне), на відміну від масиву, структури, об'єкта, складного вектора ( реальний плюс уявна величина або величина плюс кутові компоненти), вищий розмірний вектор або матриця (тощо) тип даних, який містить більше одного єдиного числового значення.

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


Це дозволяє такі поняття, як нелегальні номери та незаконні примітки - числові зображення "незаконних" програм.
Андрій

Скаляр не повинен бути числовим. Рядок, булева чи дата / час також є скалярним.
david.pfx

Що робити, якщо я складу складний клас дат на основі полів декількох скалярів (наприклад, int для місяця, одного року та одного за день)?
П'єр Арло

1
@ david.pfx: рядок, коли розглядається як масив символів, не є скалярним.
MSalters

1
@MSalters: Звичайно, і ціле число, яке розглядається як масив бітів, теж не є. Все, що можна зберігати та отримувати як єдине незмінне анонімне значення, є скалярним, і більшість мов дозволяють робити це за допомогою рядка, дати, комплексу, точки тощо, навіть якщо їх також можна розглядати іншими способами.
david.pfx

1

Слово скаляр походить від латинського слова scalaris, дієприкметникової форми scala (лат. «Сходи»). Англійське слово "scale" також походить від 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.