Escalar (informática)
# Escalar (informática)

Un escalar es una constante o variable que contiene un dato atómico y unidimensional. En contraposición al concepto de escalar, están los conceptos de array (vector), lista y objeto, que pueden tener almacenado en su estructura más de un valor.

El término viene heredado del álgebra lineal –véase Escalar (matemática)– y se refiere a un dato atómico y unidimensional, en contraposición al concepto de vector, que se refiere a un dato multidimensional.

El origen del término «escalar» data de los años setenta cuando se quería disponer de un significado opuesto a «vector», para distinguir la idea de procesado de vectores, en el diseño de procesadores computacionales.

## Tipos de datos escalares en C#

| Categoría | Clase | Alias | Descripción | Rango |
| - | - | - | - | - |
| Enteros | Byte | byte | Un entero sin signo (8-bit) | 0 255 |
| | SByte | sbyte | Un entero con signo (num negativo) (8-bit) | -128 127 |
| | Int16 | short | Un entero con signo (16-bit) | $2^{16}$ |
| | Int32 | int | Un entero con signo (32-bit) | $2^{32}$ |
| | Int64 | long | Un entero con signo (64-bit) | $2^{64}$ |
| Punto Flotante | Single | float | Un número de punto flotante de simple precisión (32-bit) | $2^{32}$ |
| | Double | double | Un número de punto flotante de doble precisión (64-bit) | $2^{64}$ |
| | Decimal | decimal | Un número decimal de 96-bit | $2^{96}$ |
| Lógicos | Boolean | bool | Un valor booleano (true o false) | 1 byte |
| Caracter | Char | char | Un caracter Unicode (16-bit) | $2^{16}$ |

## Tipos de datos escalares en diferentes lenguajes de programación

| Lenguaje de Programación | Tipos Escalares |
| - | - |
| C# | byte, sbyte, short, int, long, float, double, decimal, bool, char |
| C++ | int, bool, char, short, long, float, double, etc. |
| PHP | boolean, integer, float o double. |

## ¿Por qué el string no es escalar?

Si bien el string se ve como un único valor, no hay que confundirlo con un dato escalar. En realidad es un array de caracteres inmutable y de tamaño fijo.

Como los arrays en c# (al igual que en varios lenguajes) tienen tamaño fijo, cuando "modificamos" un string en realidad se crea un nuevo array, con la longitud necesaria y se pasa la referencia del nuevo objeto. Por eso decimos que es inmutable, no cambia, se genera uno nuevo.

