Saltar al contenido principal
LibreTexts Español

4.2: Tipos de datos (y clases)

  • Page ID
    87593
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    Todos los datos en la computadora se almacenan como 0 y 1, dígitos binarios. Esto es más conveniente ya que las operaciones binarias se efectúan de manera muy eficiente en términos de los elementos de circuito no lineales necesarios. La unidad básica de memoria es la “longitud de palabra” de la máquina, el número de dígitos binarios, o “bits”, que se utilizan para representar datos. La mayoría de las máquinas en estos días se basan en palabras de 32 bits o 64 bits (que son 4 Bytes y 8 Bytes, respectivamente); en algunos casos, tipos de datos particulares pueden estar representados por dos palabras (o más).

    Pero obviamente necesitaremos interpretar estos 0 y 1 de diferentes maneras: en algunos casos los 0 y 1 podrían representar códigos de máquinas (instrucciones) que le dicen a la unidad aritmética qué ejecutar; en otros casos, los 0 y los 1 podrían representar datos sobre los que operarán las instrucciones (los “operandos”). Además, hay muchos tipos diferentes de datos: cualquier dato se define no solo por los 0 y los 1 que componen la palabra, sino también por el “tipo de datos” que le dice a la computadora cómo interpretar y operar sobre los datos. En cuanto a esto último, observamos que el mismo conjunto de 0 y 1 puede significar algo muy diferente -y ser operado de maneras muy diferentes- dependiendo del tipo de datos asociado a estos 0 y 1. Hay varios tipos importantes dentro de MATLAB (y tipos homólogos dentro de otros lenguajes de programación). Existen variables lógicas que son 0 o 1 que corresponden respectivamente a (y de hecho los datos pueden ser ingresados como) falsos o verdaderos. Hay datos enteros, un número entero con signo. Hay datos de caracteres, en los que los 0 y 1 codifican caracteres particulares como letras en el alfabeto o números, el famoso código ASCII y las extensiones recientes. Y particularmente importante para nosotros, hay números de punto flotante, que en MATLAB son 64 bits y se llaman (por razones mayormente históricas) simplemente dobles. La representación de números de punto flotante (FPNs) por 64 bits es probablemente menos obvia que la representación de un número entero, y por lo tanto discutiremos la representación de los FPNs, y también las operaciones de punto flotante, en una sección separada. MATLAB también admite un tipo de punto flotante complejo. Estos tipos son “atómicos” en el sentido de que forman parte del lenguaje de scripting principal de MATLAB.

    En algunos lenguajes de programación se requiere al usuario al crear una variable para especificar el tipo de datos. (Definimos variables en la siguiente sección; por ahora, piense en una variable como el nombre de un dato en particular). Cada variable debe ser una instancia de uno de los tipos de datos disponibles (en nuestro caso, MATLAB). MATLAB es mucho menos exigente que otros lenguajes de programación, una bendición y una maldición, y normalmente, si no se especifica ningún tipo, MATLAB simplemente asumirá un número de punto flotante (doble), que es por lo tanto el “predeterminado”.

    Sin embargo, es posible especificar que cualquier variable en particular es lógica, con la función lógica, un entero, con el comando (say) int32, un carácter, con el comando char (o más simplemente con comillas), y un número de punto flotante, con el comando double. También podemos determinar qué tipo de datos es una variable en particular con las funciones islogical, isinteger, ischar e isfloat.

    Ya arriba y con frecuencia a continuación nos referiremos a funciones. No definimos completamente las funciones hasta un capítulo posterior, en el que aprendemos a crear nuestras propias funciones. Por ahora, piense en una función como un programa que toma algunos (cero, uno, dos o muchos) argumentos de entrada y produce alguna salida; proporcionamos ilustraciones en la siguiente sección. Todas las funciones que describimos en el párrafo anterior son funciones “incorporadas” que forman parte del lenguaje de scripting principal de MATLAB; las ejerceremos en la siguiente sección una vez que estemos armados con la operación de asignación. (De hecho, false (y true) también son funciones integradas de MATLAB: false no toma argumentos y devuelve un cero lógico.) Tenga en cuenta que el “core” de MATLAB es bastante grande en comparación con otros lenguajes como Python, en el que la mayoría de las funciones deben ser incorporadas explícitamente como módulos. Sin embargo, hay extensiones oficiales de MATLAB al núcleo, conocidas como “kits de herramientas”. En la práctica real, las funciones pueden producir muchos resultados, no solo un solo resultado; discutimos esta extensión en un capítulo posterior.

    Observamos que a menudo podríamos realizar operaciones sobre datos de diferentes tipos. En ese caso podríamos efectuar “conversión” antes de continuar con la operación, o podríamos dejar que el lenguaje de programación realice automáticamente “coerción” - conversión a un tipo de datos común basado en reglas de precedencia. Por ejemplo, en MATLAB, si intentamos agregar un entero y un número de punto flotante, MATLAB convertirá (efectivamente) primero la variable entera en una variable de punto flotante. (Tenga en cuenta que incluso cuando invocamos las diversas funciones round, fix, floor y ceil MATLAB para redondear un número de punto flotante (la entrada) a un entero (la salida), la salida es de tipo de datos double.) En la mayoría de los casos MATLAB toma decisiones razonables, aunque en ocasiones se justifica un control más directo.

    Finalmente observamos que existe otro término que se utiliza para describir la correcta especificación e interpretación de los datos dados: “clase”. Por lo general, el tipo de datos es parte del idioma mientras que las clases de datos son creadas por el usuario. Y normalmente el tipo de datos se referiría a una palabra o tal vez a dos palabras mientras que la clase se referiría a un tipo compuesto de muchas palabras (cada una de las cuales podría especificarse como un tipo de datos diferente). La clase también tiene un significado especial en la programación orientada a objetos: una clase define no solo un tipo de datos compuesto (una instancia del cual se conoce como “objeto”), sino también funciones o “métodos” en los miembros de esta clase. MATLAB soporta programación orientada a objetos tanto ex plicitamente como implícitamente, sin embargo, solo abordaremos brevemente la programación orientada a objetos en este curso, y principalmente para fines de interpretación de varios operadores.

    Esta sección es bastante abstracta simplemente porque aún no sabemos cómo crear datos y por lo tanto no podemos demostrar ninguno de los conceptos. Como ya se indicó, ilustraremos la noción de tipos de datos, las funciones matlab utilizadas para definir variables de un tipo de datos en particular, y las funciones utilizadas para consultar variables en cuanto a su tipo de datos, una vez que aprendamos a crear variables, en la siguiente sección.


    This page titled 4.2: Tipos de datos (y clases) is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by Masayuki Yano, James Douglass Penn, George Konidaris, & Anthony T Patera (MIT OpenCourseWare) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.