Bueno llegamos al capítulo de los vectores los Sarris y los slicks.
Vamos a ver qué son los enlaces y vamos a saber cómo manejar todo lo que tiene que ver con vectores
y Arráiz engo.
Vamos a crearnos como ya estamos haciendo costumbre una nueva carpeta vamos a nuestra carpeta aguó vamos
a crear la carpeta Eger 0 7.
Muy bien dentro de ejercer OS 7 nuestro archivo Main punto y punto.
Escribimos lo habitual.
Bueno muy bien y estamos aquí vamos a empezar despacito vamos a ver distintas variantes distintas características
que tienen que ver con los vectores con los Sarris.
Ustedes saben que un vector o una raíz no es más que una colección de datos en memoria.
No voy a adentrarme en lo que la terminología y lo que tiene que ver con la explicación de Arráiz porque
se supone que ustedes ya vienen de otros lenguajes y conocen así que lo que vamos a ver es cómo maneja
Goh un vector o una raíz.
El primer ejemplo que vamos a ver es vamos a ir por fuera de nuestra función main.
Vamos a hacer una declaración con simple bar vamos a llamarlo tabla como solemos llamar a veces a nuestros
Herráiz entre corchetes vamos a poner la longitud de la tabla y le vamos a decir que es de tipo entero.
Recuerden que podemos poner que el tipo entero específico así es de 8 bits 64 32 o 16 y tengan en cuenta
que una vez que declaren ese tipo de datos luego solamente le van a poder mover ese tipo de datos.
Cuidado con eso porque hay muchas funciones que van a mover simplemente un entero y al ser un entero
de 32 lo va a tomar como que es un dato diferente y nos va a dar error.
Cómo se asigna valores a este array.
Recuerden que en todas las declaraciones que yo hago se inicializar a diferencia de otros lenguajes
inicializar en cero o con una cadena vacía o con un fouls.
En este caso esta tabla de posiciones enteras se va inicializar con precisamente diez posiciones en
cero yo puedo forzar que en la posición cero por ejemplo grabe 1 1 y que la posición 5 grabe otro dato
verdad.
Puede ser un 15 por ejemplo muy bien si yo ahora muestro por pantalla
precisamente la tabla completa vamos a grabar esto vamos a ir a nuestra terminal nos vamos a posicionar
en ejerceré 7 y vamos a hacer un corral de Main punto vamos a saber qué ocurre
muy bien.
Fíjense yo ya tengo a mi mi tabla de 10 posiciones en la posición cero la primera recuerden que lenguajes
C y demás.
Todo lo que tiene que ver con vectores arranca de la posición cero en la posición cero tengo un 1 que
lo he definido aquí y en la posición 5 tengo un 15 cero uno dos tres cuatro y en las cinco tengo un
15.
Muy bien ahora vamos a ver una variante de esto vamos a ir viendo variantes porque ustedes van a aprender
distintas maneras de crear vectores.
Vamos a ver cómo podemos directamente crear dentro de Main un vector vamos a sacarlo de aquí vamos a
ir a nuestro Main y vamos a colocar por ejemplo una asignación.
Esto es para diréctamente para que lo creé un vector le vamos a decir que es un vector de 10 fíjense
como comienza.
Le vamos a decir que es de tipo entero e inmediatamente le voy a grabar valores cualquier cosa que no
sea diez posiciones y le voy a grabar valores.
Si yo ahora muestro tabla vamos a agravarlo vamos a ir a nuestra consola y lo vamos a correr a esperar
que ejecute muy bien y ahí tenemos los diez valores que acabamos de ingresar.
Entonces ustedes pueden crear un vector por fuera de main.
Ojo con él es Copp porque al crearlo por fuera va a estar presente en todas las funciones y si lo crean
dentro de esa tabla solamente va a estar presente dentro de Main pero les muestro que esto es una forma
de crear un vector.
También podían haber puesto así es válido lo mismo que colocaron aquí es exactamente lo mismo y ahora
nuestra tabla está presente en toda la ejecución y en todas las funciones y todos los métodos que vamos
a crear en nuestra en nuestro desarrollo.
Vamos a ver una forma de recorrer una tabla por ejemplo vamos a vamos a dejar esto lo vamos a quitar
y aquí lo que vamos a hacer es vamos a mostrar los elementos de una manera diferente vamos a crear un
foro donde vamos inicializar una variable de tipo entera y vamos a recorrer toda la tabla fíjense que
usamos Selem es la función que me permite saber el largo de nuestro vector de nuestro arrullar de nuestro
Rey y vamos muy bien a mostrar.
Vamos a colocar el FMI aquí adentro perfecto y aquí vamos a mostrar elemento por elemento que vamos
a lograr con esto que cada elemento se va a mostrar en una línea diferente.
Vamos a grabarlo vamos a ejecutarlo y vamos a ver que en lugar de mostrarse horizontal se muestran uno
debajo del otro.
Muy bien aquí tenemos el resultado.
Esta es la manera de recorrer una tabla tenemos un león que es una función que me permite conocer la
cantidad de elementos que tiene un vector y esto es obviamente indispensable.
Vamos a ver ahora el tema matrices en el tema matrices son ni más ni menos que vectores pero con dos
dimensiones vamos a crear un vector llamado matriz y le vamos a decir que es un vector que tiene cinco
filas y siete columnas como si fuera una planilla Excel y luego yo internamente obviamente puedo vamos
a quitar todo esto porque en realidad no nos sirve para este ejemplo y yo aquí lo que puedo hacer es
decirle perdón si esto es muy básico van a haber cosas que las tengo que explicar así que en la posición
3 columna 5 Le voy a grabar un uno muy bien si ahora yo muestro matriz no sé por qué quedó ahí muy bien
vamos a grabar vamos a ver qué pasa cuando muestra la matriz.
Muy bien aquí vemos que una matriz es un conjunto de vectores en realidad y que en el primer vector
no tengo nada porque en realidad estoy sesteando el vector número tres cero uno dos tres en el vector
3 estoy moviendo un valor en la posición cinco cero uno dos tres cuatro cinco ahí tengo el 1 que yo
acabo de mover y esto es muy útil las matrices.
No hace falta que yo les explique lo útiles que son para alojar datos para hacer cálculos para hacer
muchas cosas.
Bueno esto es todo lo que tiene que ver con vectores luego van a tener que practicar con el Lean y recorrerlo
y hacer cálculos.
Por supuesto esto puede ser entero puede ser de tipo string puede ser de tipo booleano puede ser de
cualquier tipo de dato que ustedes tengan actualmente habilitados engo.
Bueno lo que vamos a saber ahora es slices Luis son en definitiva vectores dinámicos que significa que
sean vectores dinámicos son vectores donde yo puedo ampliar las dimensiones en tiempo real en tiempo
de ejecución cosas que con los vectores normales no se puede una vez que yo definí una matriz.
Por ejemplo aquí tenía definido una matriz y le digo que es de cinco y que tiene siete columnas.
Esto ya no lo puedo variar más.
Esto yo no lo puedo variar en un vector normal Lashes Lish es una creación de Google para asemejar lo
que son las listas.
Igual tenemos listas en Google pero vamos a ver este tipo de vectores dinámicos que me sirven para ir
alojando información en memoria y en un momento puede ser que me haya quedado sin espacio iban a ver
que yo puedo ir agregando dimensiones constantemente hasta cubrir la necesidad que tenga de alojar información.
Vamos a ver un ejemplo vamos a borrar esto de aquí vamos a hacer el nuestro en nuestra función main
vamos a hacer una asignación de matriz.
Por ejemplo le vamos a decir que matriz en realidad va a ser un desliz cuando yo no le coloco ningún
tipo de longitud entre corchetes eso significa que se va a convertir en un desliz.
No le estoy asignando ninguna longitud y ahora lo que voy a hacer es asignarle unos valores vamos a
colocar tres valores y vamos a hacer un vamos a quitar esto de aquí y vamos a mostrar por por consola
qué es lo que tenemos aquí.
Vamos a correr y nos va a mostrar lo que para nosotros a simple vista es un vector muy bien pero no
es un vector cualquiera es un slicks porque porque inicialmente más allá de que yo le he definido valores
no le he puesto ningún argumento de largo.
Esto que significa me lo creo de tres pero ahora como sabe que es un desliz el compilador me va a dejar
que yo trabaje internamente con esa matriz y le agregue elementos y demás.
Vamos a ver una primera variante la vamos a llamar variante variante 2 porque en realidad la primera
fue una variante vamos a crear una función variante 2 que no recibe ningún parámetro vamos a escribir
bien esto muy bien qué vamos a hacer aquí en variante 2.
Aquí lo que vamos a hacer es un ejemplo desliz vamos a crear por ejemplo elementos y vamos a crear elementos
y le voy a decir Fíjense que ahora lo que estoy creando es un vector ok.
Si le coloco si le estoy colocando una longitud es un vector muy bien creo un vector simple ahora no
me permite crear un desliz en base aún a un vector.
Cómo se hace este slice.
Este es se puede hacer de elementos por ejemplo puedo hacer esto puedo decirle que me creé un slice
llamado porcion con el que después voy a trabajar lo vamos a ver y que me lo cree.
En base a un vector llamado elementos desde la posición 3 hasta la última.
Esto significa eso desde la posición 3 que sería esta hasta la última si yo aquí hago si muestro por
consola porcion.
Vamos a agravarlo vamos a correrlo vamos a ver 2 2 display porque en realidad mantengo 1 fijense mantengo
este lo vamos a deshabilitar ahora para que no me lo muestre en lo sucesivo y me traen los elementos
4 y 5 por qué.
Porque porcion se creó es un vector de tipos Leys que se creó desde el vector elementos.
Esto puede ser así puede ser.
Vamos a saber por ejemplo puede ser así.
Esto es lo mismo que decir del primer elemento hasta el cuarto.
Esto puede ser así desde el segundo elemento hasta el cuarto.
Esto lo pueden hacer ustedes como quieran.
Me permite crear vectores de tipos Lish en base a vectores más grandes y los voy particionado y voy
juntando porciones de elementos en otros es Lish pero vamos a ver en la variante 3 porque por ahora
por ahora estamos viendo vectores.
En realidad yo les digo que esto es un desliz pero todavía no queda muy claro que cuál es la gracia
de tener un slice verdad.
Muy bien vamos a crear una variante 3 variantes 3 va a ser un funk.
Variante 3 y lo que vamos a ver ahora lo que vamos a ver ahora es qué necesitamos qué necesitamos para
que un lápiz para crear una hélice con un comando especial.
Porque estos son slice pero no fueron creados con un comando especial sino que fueron por asignacion.
Vamos a ver un comando especial que me permite crear es Lish y dotarlos de toda la capacidad necesaria
para que yo pueda adicionar elementos en algún momento de la ejecución.
Ese comando del cual yo les hablo es el comando MEIC.
Entonces vamos a crear vamos a crear un enlace de tipo elementos y le vamos a decir que vamos a usar
la función MEIC.
Fíjense que Goh me la reconoce como una función donde me pide el tipo de dato que voy a usar y la la
medida de lo Leslie que voy a crear ahora MEIC tiene en realidad más que dos parámetros tiene tres parámetros
y vamos a hablar muy bien de estos tres parámetros.
Primero qué es lo que vamos a crear vamos a crear un lápiz de tipo entero.
Recuerden que si no le coloco ningún tipo de dimensión lo asume como un elemento en base a MEIC va a
ser creado de tipos líes con un primer parámetro que es el largo el largo de elementos vamos a decirle
que es de tipo cinco de tipo de un largo cinco y luego me pide la capacidad y aquí metemos algo nuevo.
Engo que hace una diferenciación entre lo que es capacidad y lo que es el largo de un vector A qué se
refiere en memoria va a reservar lo que yo coloque como capacidad me va a crear en memoria un espacio
que va a soportar hasta 20 elementos pero inicialmente me va a crear un vector de cinco elementos me
reservo el espacio pero me crea un vector de 5 para qué se hace esto ustedes piensen que GOW es un lenguaje
que fue creado para soportar una carga de trabajo gigantesca estamos hablando de sitios como Google.
Entonces Google no quería crear vectores de 5 elementos y que cuando se quedara chico hubiera que hacer
todo un artilugio en memoria para ustedes saben que lo que es concatenación de textos y no lo es si
no lo saben lo van a aprender ahora una de las cosas más costosas en sistemas más costosas en cuanto
a tiempo de procesador más costosa en cuanto a recursos que utiliza un lenguaje de programación y un
ragtime es el tema de la concatenan concatenación de strings.
Si ustedes le preguntan a un ingeniero que trabaja en Microsoft a un ingeniero que trabaje en cualquier
proyecto de lenguaje de programación lo más costoso en cantidad de operaciones es cuando uno quiere
concatenar en memoria un string con otro por la cantidad de operaciones que tienen que hacer de reserva
operaciones de bajo nivel se entiende operaciones de lenguaje ensamblador de reserva de espacio de memoria
de migrar datos de un lado para el otro.
Entonces qué pasa.
Google lo que pensó con el tema de la capacidad es bueno vamos a dar la posibilidad de que los programadores
tengan una cantidad máxima de capacidad.
Ellos saben que van a trabajar con cinco elementos pero podría llegar a crecer y que ellos puedan determinar
una cantidad máxima.
Si lleváramos esto a base de datos sería como el famoso bar Char donde yo defino un campo de tipo parchar
de 200.
Pero por ahí internamente el campo grabó diez caracteres y va a ocupar 10 caracteres.
Esto vendría a ser algo parecido con la diferencia de que Goh va a reservar 20 posiciones en memoria
pero yo no quiero 20 posiciones.
Yo ya sé que voy a trabajar inicialmente con cinco podría crecer pero Gome va a reservar ese espacio
porque va a ser mucho más dinámico mucho más performance en el momento en que yo tenga que agregar elementos
si ya tengo reservado el espacio que si yo me quedé sin espacio y en tiempo real estoy constantemente
agregando elementos mi aplicación se va a resentir.
Imagínense que estamos hablando de aplicaciones que luego terminan siendo concurrentes con miles y miles
y miles de usuarios simultáneamente.
Entonces cómo estamos en el mundo de la alta performance.
Lo que ha creado es esto que es la capacidad de un desliz.
Yo cuando ITD cuando haga un Lain el me va a devolver cinco y cuando quiera iterar por la cantidad de
elementos del vector voy a iterar cinco veces.
Ahora supongamos que nosotros le vamos a ver esto vamos a ver esto muy claro.
Por ejemplo vamos a hacer un vamos a ver por pantalla por consola no voy a usar el F.
Así se los muestro mejor el FC el que me permite mezclar texto con datos.
Entonces yo aquí lo que voy a decir es largo por ciento y voy a poner capacidad por ciento de muy bien.
Ahora nosotros dijimos que con Len Sopó saber el largo de elementos no.
Bueno ahora vamos a ver un nuevo una nueva función que Ska-P que me permite conocer la capacidad de
un desliz y esto es muy importante porque porque yo con mi código voy a saber cuándo voy a estar crítico
con la capacidad y ahí voy a definir y voy a decidir si lo que voy a hacer es agregar ejecutar.
Por ejemplo el comando para agregar elementos a un slice es el Append.
Entonces yo voy a saber si.
Lamentablemente llegué al final y voy a tener que usar el APEN.
Vamos a saber cuál es el comportamiento de Goh ante estas características.
Entonces por ejemplo vamos a ver que vamos a hacer un favor a vamos a primero mostrar esto.
Así ustedes ven qué es lo que me muestra ejecutamos.
Qué pasó que no declare
porque aquí
vamos a sacar esto vamos a correrlo.
Vamos a ver qué es lo que nos muestra bueno me dice que largó el largo del desligue elemento hace cinco
y la capacidad es 20.
Esto que yo les estaba explicando Bueno muy bien entonces qué vamos a hacer.
Vamos a ver una variante cuatro para que entendamos lo del APEN.
Yo estoy haciendo todo con números enteros esto es factible hacerlo con strings booleanos.
Como ya dijimos antes muy bien qué vamos a hacer ahora.
Vamos a crear un vamos a crear otro enlace llamado noms.
Vamos a hacer un MEIC vamos a decirle que es de tipo Luis Lantero y aquí lo que vamos a hacer es decirle
que hay cero elementos y la capacidad es cero.
Esto es factible.
Me crea un vacío y yo ya sé que de movida lo primero que voy a tener que hacer para agregar elementos
son happens.
Si yo hiciera esto aquí arriba voy a estar con un Fornells haciendo asignaciones simples y cuando detecto
que ya no puedo hacer asignaciones simples voy a tener que usar el APEM pero yo quiero que ustedes vean
esto.
Vamos a hacer un favor vamos a crear una variable y que la vamos a inicializar en cero.
Vamos a agregar un 100 y vamos a por ejemplo pero me faltó el más más y aquí lo que vamos a hacer es
que noms porque entonces si yo ya crea enormes bueno pero noms hay que recrearlo constantemente con
una pend.
El Append lo que me va a devolver es un slices el Append recibe una slices y me devuelve un slice.
Entonces voy a tener que constantemente noms crearlo nuevamente o asignarlo nuevamente.
Entonces esto lo que hace es crear un elemento el noms y le va a agravar el valor de Y a ese nuevo elemento
muy bien.
Ahora fíjense una cosa yo creé una capacidad de cero se Akiba iterar 100 veces y va a estar 100 veces
agregando elementos y si yo estoy agregando elementos y va a agregar 100 elementos.
Cuánto creen que va a decir aquí en el largo de la matriz del vector y cuánto va a decir en capacidad.
Se van a llevar una sorpresa vamos a ver esto.
FBT print vamos ahora a usar printed F nuevamente vamos a alegre con un carries retarán porque arriba
ya tengo emprender Efeso y no me los va concatenar el largo y capacidad muy bien y aquí voy a ser un
león de nubes y un cap de nubes.
Muy bien yo creé un vacío vamos repasando un vacío y Terezín veces y le fui grabando en cada elemento
el valor de ello o sea va a grabar 0 1 2 3 y demás me va a ir creando y recreando noms constantemente
y redimensiona.
Aquí en un Redim lo que sea si esto se va agregando elementos y automáticamente se va redimensionado
vamos a ver qué es lo que hace Goh con el tema de la capacidad que es muy interesante vamos a ejecutarlo
muy bien me dice que el largo es 100 como ya previmos pero que la capacidad de 128 qué es lo que hace
GOW GOW me siempre me va a poner una cantidad mayor aquí a no ser que el multi la cantidad de largo
sea múltiplo de 8 de 4 de 2.
Esto en realidad se guía por la numeración binaria que es lo que hace.
Ustedes saben que en las computadoras todo es múltiplo de por ejemplo un un kilobits son 1024 bits y
así todo es no es múltiplo de mil sino que tiene connotación con lo binario.
Entonces la capacidad GOW empieza a reservar espacio lo primero que hace es reservar una u un elemento
lo sobre pacer me reserva dos elementos lo sobrepase me reserva 4 lo sobrepase me reserva 8 me reserva
16 me reserva 32 64 ne reserva 124 ciente perdón 64 128 12:56 y 512.
Todo múltiplo todo múltiplo y de 2 elevado a la potencia.
En definitiva no es múltiplo sino que es el número 2 elevado a una potencia.
Entonces siempre me va a reservar un poco más.
Si yo siguiera agregando elementos aquí diría una capacidad de 12:56 512 1024 2048 ya saben como es
la secuencia entonces son previsiones que hace GOW para que me hace agregando cosas.
Lo ideal no es usar siempre APEN.
Lo ideal es usar APEM cuando ya me quedé sin espacio porque el APEN tiene su costo en el proceso es
lo que yo le decía antes.
Entonces cómo yo voy a tener siempre este número.
La capacidad.
Y siempre voy a tener el largo cuando yo supere el largo y hago una pend para Gouges milésimas de segundo.
Por qué.
Porque mientras no me exceda de la capacidad para GoW es decir bueno yo ya tenía reservado ese espacio
voy agregando voy agregando elementos voy ubicando el dato en los elementos que correspondan porque
yo ya reservé el espacio.
El problema viene cuando yo ya superé mi capacidad que GoW lo resuelve.
Visto que esto no ha demorado tanto GOW lo resuelve el problema es que como vuelvo a repetir esto va
a tener que multiplicarse por miles y miles de usuarios concurrentes GOW tuvo que crear esto que es
la capacidad para manejarlos light.
Bueno espero que les haya gustado este capítulo y no haberlos mareado.
No tiene mucha complejidad tiene características nuevas que son las que yo puse más el acento más que
en explicarles cómo se maneja un vector en GOW porque es muy simple pero el tema de los links sí que
está muy bueno y tiene características nuevas que hay que aprender como el tema de la capacidad.
Así que bueno nos vemos en el próximo capítulo y vamos a seguir aprendiendo sobre el lenguaje.