[AUDIO_EN_BLANCO] Seguimos con la lección dos del módulo dos donde, como habíamos hablado antes, vamos a ver un poco qué son los strings. Los strings son una variable que se usa para texto. Y en Arduino hay dos representaciones posibles para string. Yo puedo usar un arreglo de char como string. Por ejemplo, si yo tengo un conjunto de ocho letras puedo formar una palabra. O puedo usar la clase String que es con mayúscula, que es un tipo de dato que está definido en Arduino. O sea, este no es un tipo de dato sino que yo uso un arreglo de char, mientras que este String es un tipo de dato definido en Arduino. Vamos a partir por el primero. Esta expresión va a ser bastante descriptiva. No es importante que aprendan esto de memoria pero sí es importante que tengan una noción de cómo se forma un string. Entonces, para usarlo como un arreglo de char, yo solamente necesito eso. Necesito un arreglo de char que termine en un char null. ¿Qué era un char null? Era un char que no fue asignado o que fue asignado por su valor por defecto, como lo vemos en este cuadro. Este es un char que no fue asignado. Este es un char que le asigné su valor por defecto como número cero. Y este es un char que le asigné su valor por defecto con su caracter por defecto. Entonces, ¿cómo yo declaro y asigno un string? Yo, como les decía, tengo un arreglo de char. Tipo char, arreglo, y aquí tengo el nombre de mi variable. Entonces, si es que yo declaro un arreglo de char de esta forma me sirve para usarlo como string, porque veamos que el último la última variable, el último char, al igual que todo lo demás no es asignado. Por lo tanto tiene su valor por defecto. También yo puedo asignarlo directamente. ¿Cómo es esto? Tengo un arreglo tipo char, que tiene largo ocho, y tiene uno, dos, tres, cuatro, cinco, seis, siete caracteres. Y tiene largo ocho. ¿Está bien? Sí, porque yo necesito tener un caracter adicional que no esté inicializado, que es aquí el que me falta que no lo muestro explicitamente. Alternativamente, yo puedo mostrarlo explícitamente definiéndolo como el caracter nulo. Pero lo importante es que yo siempre la dimensión del arreglo, si es que yo hubiese usado un arreglo de chars tiene que terminar en un caracter nulo, que me sirve para marcar la delimitación. Alternativamente, yo lo puedo inicializar directamente como texto. Y esto es lo mismo que vimos en la diapositiva anterior. Yo acá tengo la palabra Arduino formada por caracteres. Yo, directamente, puedo decir que tengo este texto y quiero guardarlo en un arreglo de char. El largo en este caso está definido implícitamente. ¿Cuál va a ser el largo? Siete letras más uno que es el char nulo. También puedo hacerlo explícitamente. Al igual que en el ejemplo anterior, yo necesito un arreglo de largo ocho para guardar la palabra Arduino o un arreglo de largo mayor. Mientras el largo sea mayor no hay problema porque todos los caracteres que van desde el número siete en adelante el que viene adelante, o sea, el octavo no está definido. ¿Qué pasa si yo declaro explícitamente el arreglo con largo siete? Dado que tengo siete letras me falta uno. No me alcanza para guardar el arreglo. Y el código, cuando verifique el programa, o cuando lo intente compilar me va a dar error. Como les dije antes, no es importante que se aprendan todas estas reglas de memoria pero si se encuentran con algún error o se encuentran en algún código con algo como esto van a saber qué es lo que está pasando. Alternativamente y esto en general se usa más, se puede usar el tipo de dato String. Que en realidad más que un tipo de datos es una clase. No vamos a entrar en detalles de qué es una clase pero vamos a ver cómo se usan los String y vamos a ver algunas funciones. Una en particular de la clase String que es bastante útil. Entonces, partamos por cómo se crea un String. Un String se puede crear de varias formas. Al igual que todos los demás tipos de variables, yo primero pongo el tipo de variable y después asigno un nombre. Y en este caso declaré el String pero no le asigné ningún valor. Alternativamente, al igual que como lo hacíamos con los enteros, por ejemplo yo puedo declarar mi variable. Aquí tengo el nombre el tipo, e inmediatamente le asigno un valor. En este caso el valor es este texto. Contenido que se entrega entre comillas. Las comillas no son parte del String que se guarda. Lo que se guarda es el String que está entre las comillas. Y la otra forma en la que yo puedo crear un String es usando la función String. Esto es un poco confuso por lo que mencionaba antes de que String es una clase pero lo único de lo que tienen que preocuparse es de que hay una función String que me permite crear, de muchas formas, variables de tipo String. Me permite inicializarlas. Y la mejor forma de ver esto es con un ejemplo. No se pueden abarcar todos los casos pero con un ejemplo, vamos a ver uno de los más típicos con los que ustedes se pueden encontrar. Entonces veamos este código de ejemplo. En este código vamos a ver diferentes formas de inicializar un String, y vamos a ver cuál es la salida en consola cuando aplicamos cada una de ellas. Como siempre, empezamos inicializando la comunicación serial y esperamos dos segundos para abrir el terminal serial. En este ejemplo en particular, pusimos todo dentro de setup. No hay nada en void, simplemente porque queremos que se ejecute todo una sola vez, por simplicidad. Entonces, ¿qué hacemos? Primero enviamos una introducción. Imprimimos la línea ejemplo función String con un retorno antes y un retorno después. Entonces va a haber una línea antes y una línea despues de esta frase. Después probamos cinco tipos de inicialización. Primero, la directa donde definimos directamente STR1 como un texto entre comillas. Ya lo hemos hecho antes e imprimimos eso en consola. Después usamos la función String con el mismo texto entre comillas. Y deberíamos ver en consola exactamente el mismo texto. Estas dos inicializaciones son equivalentes. ¿Qué pasa cuando usamos un char? Es lo mismo. Si usamos un caracter entre comillas, deberíamos ver en consola la letra A. Y después, ¿qué pasa si damos un entero? El número 13, yo no tengo una variable que sea int x igual 13, pero si yo escribo 13 directamente el programa asume eso como un entero. Por lo tanto, si yo uso la función String con un entero ¿voy a obtener cuando imprima, el número 13 o voy a obtener el caracter equivalente al 13? La respuesta la vamos a ver cuando ejecutemos el programa. Y por último, yo puedo sumar esos Strings. Eso se llama concatenación. ¿Cómo es esto? Yo voy a crear un String, que es STR5 que tiene el STR3, que es la letra A más espacio Y espacio, más STR4 que es el número 13. Y todo eso lo voy a imprimir como un solo String. Veamos qué pasa. Ahora que se cargó, abrimos el terminal serial y esperamos a ver el resultado. Aquí está. Entonces, ¿qué tenemos? Primero se imprime ejemplo funcional String, como esperábamos. Después tenemos inicialización directa, e inicialización con String. En ambos casos imprime exactamente lo que está en el texto entre comillas. Después imprime el caracter A, como lo esperábamos. Después imprime el número 13, no el caracter correspondiente al 13 porque le dimos como input un int y el String guarda el texto equivalente a ese int para poder imprimir el mismo número. Y finalmente imprimimos la concatenación de A y 13, y obtenemos este resultado. Ustedes pueden en sus casas modificar este archivo. Está disponible en la página del curso. Prueben todas las combinaciones que se les ocurran y vean qué es lo que sale porque esa es la forma más fácil de entender qué es lo que está pasando con esta función. Veamos otro ejemplo que es bastante corto. Con esto simplemente queremos mostrar que uno puede usar cualquiera de las dos representaciones de String de forma indiferente y obtener el mismo resultado. Vamos a declarar, primero, un char que se llama frase. Es un arreglo de char y que tiene un cierto largo. Está declarado el largo implícitamente. Y tiene todos estos chars que forman esta es una frase, y finalmente termina con un char nulo definido explícitamente. Y vamos a declarar una variable de tipo String directamente, dándole texto, donde digo esta es otra frase. Iniciamos la comunicación serial, esperamos dos segundos, e imprimimos ambas frases y vamos a ver cuál es el resultado. Abrimos el terminal serial y vemos que se imprimen ambas frases como corresponde. Eso es todo por hoy. Muchas gracias.