Co to znaczy, gdy dane są skalarne?

78

Nie wiem, co dokładnie oznacza skalar, ale próbuję sprawdzić, czy dobrze o tym myślę. Czy skalar odnosi się do arbitralności, w której typ danych może być dowolnego typu, lub system nie jest w stanie wiedzieć, jakie dane są z góry.

Ryan M.
źródło
Ciekawostka: platforma XML, w której ostatnio spędzam swoje dni (używając XQuery) lubi nazywać te wartości Atomowe. Myślę, że jest to ściśle powiązane, dodając komentarz do referencji / wyszukiwanych terminów.
Charles Ross

Odpowiedzi:

112

Termin „skalar” pochodzi od algebry liniowej , gdzie jest używany do odróżnienia pojedynczej liczby od wektora lub macierzy. Znaczenie w informatyce jest podobne. Rozróżnia pojedynczą wartość, taką jak liczba całkowita lub liczba zmiennoprzecinkowa, od struktury danych takiej jak tablica. To rozróżnienie jest bardzo widoczne w Perlu, gdzie $sigil (który przypomina „s”) jest używany do oznaczenia zmiennej skalarnej, a @sigil (który przypomina „a”) oznacza tablicę. Nie ma to nic wspólnego z rodzajem samego elementu. Może to być liczba, znak, ciąg znaków lub obiekt. To, co można nazwać skalarem, to fakt, że jest jeden z nich.

Karl Bielefeldt
źródło
6
To dobry przykład tego, jak ten sam termin może oznaczać różne rzeczy w różnych kontekstach. W językach takich jak C czy Pascal, skalarne odnosi się do prostych „blokowych” typów, takich jak budowa intlub char, nie strukturyzowanych typów takich obiektów (nawet jeśli jest tylko jeden).
Caleb
2
Dodałbym również, że oprócz tablic skalar nie jest złożoną strukturą danych, taką jak struct lub klasa. Różnica polega na tym, że tablica składa się z wielu elementów tego samego typu, a struktura to wiele elementów dowolnych typów.
1
Również łańcuch może być wartością nieskalarną. Języki takie jak Perl traktują to jako skalar, ale w każdym języku opartym na języku C twierdziłbym, że jest to tablica lub obiekt.
1
@Karl Nie znam Perla, ale czy możesz wyjaśnić, co to jest sigil ?
Geek
2
@Geek, jest to symbol, który umieszczasz przed zmienną, na przykład $variable. Zobacz stronę wikipedii .
Karl Bielefeldt
27

Skalar to po prostu zmienna posiadająca indywidualną wartość . Dla celów tej dyskusji załóżmy, że skalar jest pojedynczą liczbą, a nie zbiorem liczb.

Na przykład wynik zapytania SQL, które zwraca liczbę zamiast krotki, podobnie jak metoda ExecuteScalar () w klasie SQLCommand , która zwraca wartość pierwszej kolumny pierwszego wiersza w zestawie wyników zwróconym przez zapytanie. Zwykle służy do pobierania wartości zagregowanej, takiej jak LICZBA lub ŚREDNIA, identyfikator nowego rekordu lub liczba rekordów przetworzonych przez zapytanie.

Robert Harvey
źródło
19

Uzupełniający mnemonik, do świetnej odpowiedzi Karla Bielefeldta:

Prostym sposobem myślenia na ten temat jest „czy może to być na dużą skalę?”

Liczba całkowita może być na skali.

Liczba całkowita o stałym rozmiarze może być w skali, np. Od -2147483648 do 2147483647.

Liczba rzeczywista może być na skali.

Dziesiętny znak, wartość logiczna lub stała precyzja mogą być w skali. Nawet łańcuch może być w skali (używamy go do sortowania).

Stąd „skalar”.

Wiersz bazy danych nie może być w skali. Liczba zespolona nie może być na skali. Obiekt reprezentujący wiadomość e-mail nie może mieć skali. Tablica, wektor lub macierz nie mogą znajdować się w skali.

Jon Hanna
źródło
10
Jeśli łańcuch może być w skali, dlaczego nie tablica? „czy może to być na skalę?” przynajmniej nie daje intuicyjnych rezultatów.
VBCPP
2
@VBCPP gdzie w skali zawierającej {1, 2} siedzi {2, 1}? Przed lub po? Oczywiście, możemy egzekwować zamówienie, ale nie ma jasnego zamówienia. Pamiętaj również, że staram się zaoferować łatwy sposób na zastanowienie się nad tym (odpowiedź Karla Bielefeldta daje dobrą odpowiedź, udzielając dokładniejszej odpowiedzi IMO, a ja nie próbowałbym tego lepiej, po prostu uzupełnij). To powiedziawszy, jest tu element kontekstu. Łańcuch może, ale nie musi być uważany za skalarny, w zależności od kontekstu; w SQL jest skalarny z dobrego powodu, w C nie jest, również z dobrego powodu.
Jon Hanna
7
To jest po prostu złe .
Andrew Medico,
2
Nie zgadzam się, że „po prostu źle”, oczywiście, choć uważam, że Karl Bielefeldt powinien mieć kleszcza. To mnemotyk, który jest zbyt długi, aby mógł zostać komentarzem, to lepsza odpowiedź.
Jon Hanna
2
Myślę, że komentarz „to po prostu źle” pochodzi z tego, że odpowiedź nie ma żadnego sensu, a twoja odpowiedź na pytanie @VBCPP nie odpowiada na jego pytanie. Z pewnością podoba mi się pomysł mnemoniczny, ale wciąż musisz wyjaśnić znaczenie, na przykład, liczby całkowitej będącej w skali. Równie dobrze może mówić o umieszczeniu kota w telewizji.
turboladen
10

Jak w przypadku wielu terminów w informatyce; pochodzenie słowa odnosi się do bardziej fizycznych właściwości. Termin „skalar” jest stosunkowo stary w informatyce. Obecnie jego definicja jest mniej rygorystyczna. Gdy przechowujesz dane w pamięci komputera, dane te mogą zmieścić się w jednym adresie (1 bajt *) lub nie. Kiedy tak się nazywało, nazywano go skalarem, a kiedy nie, nazywano go kompozytem. Głównie dlatego, że procesory mogły obsługiwać tylko jeden adres / kawałek danych (= 1 bajt) na raz. Jak stwierdził @Karl Bielefeldt; termin rzeczywiście pochodzi z algebry.

Łańcuch nazywamy ciągiem, ponieważ jest to ciąg znaków. Char jest / był skalarem, podczas gdy łańcuch jest / był złożony. Przechowywanie 1 kawałka danych (bazy danych) pod wieloma adresami nieco zacierało linię. Pomyśl o tym w ten sposób: gdy procesor mógł przetwarzać dane w jednej instrukcji, był to skalar.

W dzisiejszych czasach skalar jest dowolną wartością pojedynczą, a to, co jest wartością pojedynczą, może być różnie definiowane w różnych językach. liczby całkowite, zmiennoprzecinkowe, znaki, łańcuchy, booleany i wyliczenia są obecnie - w większości przypadków - skalarami. Tablice, listy, drzewa, obiekty itp. Nie są.

(* Mówię 1 bajt, aby wszystko było jasne, ale technicznie mówię o czasach, w których 6 bitów było częściej używanych na przykład na kartach perforowanych, a później na paskach magnetycznych)

Zastrzeżenie: Nie mogę znaleźć żadnych odniesień na ten temat w Internecie, mam informacje w szkole i ze starych książek, w tym (jak sądzę): Tabele matematyczne i inne pomoce do obliczeń z 1944 r. Biorąc to pod uwagę, moja pamięć jest nie takie, jak kiedyś, więc jeśli ktokolwiek może zmienić / potwierdzić lub zaprzeczyć mojej odpowiedzi, byłoby miło.

Wynicować
źródło
9

Skalar to prosta pojedyncza wartość liczbowa (jak w 1, 2/3, 3.14 itd.), Zwykle liczba całkowita, punkt stały lub liczba zmiennoprzecinkowa (pojedyncza lub podwójna), w przeciwieństwie do tablicy, struktury, obiektu, wektora złożonego ( rzeczywisty plus wyimaginowany lub jasność plus składowe kątowe), wektor danych o wyższych wymiarach lub macierz (itp.), który zawiera więcej niż jedną pojedynczą wartość liczbową.

Należy jednak zauważyć, że duży, bardzo złożony typ danych, który można również spłaszczyć i przedstawić w 8-bitowych bajtach pamięci komputera, może być również reprezentowany jako jedna bardzo długa / duża binarna liczba skalarna. Turing wykorzystał tę technikę do przedstawienia całych programów komputerowych jako tylko jednej liczby skalarnej.

hotpaw2
źródło
Pozwala to na takie pojęcia, jak nielegalne liczby i nielegalne liczby pierwsze - numeryczne przedstawienie „nielegalnych” programów.
Andrew
Skalar nie musi być liczbowy. Ciąg, wartość logiczna lub data / czas są również skalarami.
david.pfx
Co więc, jeśli utworzę klasę złożoną z dat na podstawie pól kilku skalarów (na przykład int dla miesiąca, jednego dla roku i jednego dla dnia)?
Pierre Arlaud
1
@ david.pfx: Ciąg znaków widziany jako tablica znaków nie jest skalarny.
MSalters
1
@MSalters: Oczywiście, liczba całkowita widziana jako tablica bitów też nie jest. Wszystko, co można przechowywać i odzyskiwać jako pojedynczą niezmienną anonimową wartość, jest skalarem, a większość języków pozwala ci to robić za pomocą łańcucha, daty, kompleksu, punktu itp., Nawet jeśli można je również przeglądać na inne sposoby.
david.pfx
1

Słowo skalar pochodzi od łacińskiego słowa scalaris, przymiotnikowej formy scala (łac. „Drabina”). Angielskie słowo „skala” pochodzi również od scala. Źródło

Skalar to zmienna posiadająca indywidualną wartość.

Na przykład:

Zmienna skalarna : Powiedz, że próbujesz reprezentować nazwiska różnych uczniów jako zbiór zmiennych. Każda z poszczególnych zmiennych jest zmienną skalarną, jak poniżej

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

Funkcje skalarne : Funkcje skalarne SQL zwracają pojedynczą wartość na podstawie wartości wejściowej.

UCASE() - Converts a field to upper case
LCASE() - Converts a field to lower case
Premraj
źródło