**Intro a Pharo**
**Presentado por Katherin Padilla Moncada **
Unidades Semánticas
**Tipos Básicos** : representando datos Los tipos básicos son formas de reestablecer información dentro de este sistema. Consulte los nodos en el interior para obtener más detalles
3.1 Números Ahora ya sabes cómo ejecutar el código Pharo. Ahora hablemos de los objetos básicos. 1, 2, 100, 2/3 ... son números, y responden a muchos mensajes que evalúan expresiones matemáticas. Inspeccione estos:
![ Captura de Proceso Número ](https://i.imgur.com/ekHRUdu.png)
En la guía introductoria a Pharo, exploramos el concepto de números y su aplicación, Además de ofrecer una explicación detallada sobre estos conceptos fundamentales, la guía proporciona una serie de ejercicios diseñados para poner a prueba nuestra comprensión y habilidades en expresiones matemáticas. Estos ejercicios son una oportunidad para nuestro conocimiento y adquirir destreza en el uso de Pharo.
3.2 Caracteres Un caracter represetan una letra del alfabeto y puede ser usado el operador ($)
![ Ejemplo de Caracteres y letra del alfabeto ](https://i.imgur.com/CXp1Pf4.png)
Puedes encontrar cuál es el número ASCII de un carácter
![ Ejemplo de ASCII NUMERO 64 ](https://i.imgur.com/Z8oIfRo.png)
En esta tabla podemos Guiarnos de los Caracteres correspondientes para la ejecucion de la misma
![ ASCII CODIGO ](attachments/ane0mgvqv4h98vtpro2g9qlhs/Ejemp Tabla ASCII.png)
En este contexto podemos entender que al ejecutar el comando **($@ charCode) ** tenemos el caracter $@ que en la tabla de codigo ASCII nos indica que equivale a el numero 64.
Hay algunos caracteres que no se pueden imprimir, no se pueden visualizar al ser inspeccionados pero si podemos leer que el caracter a sido ejecutado.
![ Ejemplo Caracter Espacio ](https://i.imgur.com/j77vpNQ.png)
![ Ejemplo Caracter Espacio 2 ](https://i.imgur.com/kAwTe3K.png)
Puedes imprimir todos los 256 caracteres del código extendido ASCII
![ Ejemplo codigo ASCII ](https://i.imgur.com/SJwhxLq.png)
Si ves gliberish es porque hay algún problema de visualización con símbolos no romanos/latinos, generalmente causado por las fuentes que tienes instaladas en tu Sistema Operativo y la interacción de la con un sistema Pharo/GT
3.3 Cadenas Un String o cadena es una colección de caracteres. Usa comillas simples para crear un objeto String.
![ Ejemplo de cadenas-reverso ](https://i.imgur.com/GK0Rvaa.png)
La concatenación de cadenas (strings) es el proceso de unir dos o más cadenas para formar una sola cadena más larga y se realiza utilizando el operador coma
![ Ejemplo Pharo Tutorial ](https://i.imgur.com/BRkDQz6.png)
3. 4 Símbolos Un símbolo (Symbol) es una cadena (String) única globalmente. Hay uno y solo un símbolo #PharoTutorial. Pueden existir varios objetos de tipo cadena (String) cuyo contenido sea 'PharoTutorial' (Message=retorna 'true' si los dos objetos son IGUALES)
Para Smalltalk es: x := 3 ← Aginación. 2 = 3 ← Comparación. a == a ← Comparación fuerte. Se trata del mismo símbolo?
El operador = se utiliza para comparar dos objetos por igualdad La expresión 2 = 3 evalúa si el número 2 es igual al número 3, lo cual es falso
![ Ejemplo de Pharo Smalltalk true ](https://i.imgur.com/NfVpYzS.png)
![ Ejemplo expresiones ](https://i.imgur.com/MtlludI.png)
la comparación fuerte, Smalltalk utiliza == para verificar si dos objetos son el mismo objeto en memoria. La expresión a == a evaluará verdadero si y solo si a hace referencia al mismo objeto en memoria en ambos lados de la expresión
![ Ejemplo de Pharo Smalltalk false ](https://i.imgur.com/qzPP4Tt.png)
3.5 Arreglos Los arreglos son maneras de guardar colecciones de información diversa. Los hay de dos tipos, estáticos y dinámicos. Acá veremos los primeros. Los arreglos estáticos, o simplemente arreglos, son aquellos en los que los valores de todos los objetos que los conforman son conocidos en el momento en que el arreglo se define (es decir, no contienen cálculos o variables, como los dinámicos que veremos más adelante). Los arreglos están confinados por #( ) y sus elementos se separan por espacios. Por ejemplo, inspecciona la siguiente expresión, que define un arreglo de 3 elementos
![ Ejemplo de Arreglo de 3 elementos ](https://i.imgur.com/soMqj5d.png)
En la matriz principal, tenemos 3 elementos individuales: 1, 2, y 3. Luego, tenemos una matriz con 3 elementos: 4, 5, y 6. entonces La matriz principal contiene 3 elementos individuales, y una matriz con 3 elementos adicionales entonces el tamaño total de la matriz es 3 (elementos individuales) + 1 (matriz anidada) = 4 elementos en total.
![ Ejemplo Matiz ](https://i.imgur.com/wSmuxP5.png)
La expresión #(1 2 4) representa una matriz que contiene los elementos 1, 2 y 4 el mensaje isEmpty pregunta si la matriz está vacía o no, lo cual al ejecutarla sale FALSE, porque si contienen elementos
![ Ejemplo Matriz con Elementos ](https://i.imgur.com/NQZiJxe.png)
3.6 Arreglos Dinámicos Los arreglos dinámicos son creados durante el tiempo de ejecución. Es decir, que podemos guardar en ellos cálculos, que luego se ejecutarán y determinarán el valor de lo que en ellos se guarda. Están confinados por llaves { } y sus elementos se separan con el caracter "."
![ Ejemplo Arreglo Dinámico ](https://i.imgur.com/hplUage.png)
**Comparacion de arreglos** arreglo estático (2+3) es una expresión que suma 2 y 3, dando como resultado 5. (6+6) es una expresión que suma 6 y 6, dando como resultado 12. 'hello' , 'Stef' es una concatenación de dos strings cadena, estas se unifican ando un resultando en un único string 'helloStef y se pone size Entonces, #( (2+3) (6+6) 'hello' , 'Stef') size evalúa a 3
![ Arreglo Estático ](https://i.imgur.com/i6VZJ2M.png)
arreglo dinámico (2+3) es una expresión que suma 2 y 3, dando como resultado 5. (6+6) es una expresión que suma 6 y 6, dando como resultado 12. 'hello' , 'Stef' es una concatenación de dos strings cadena , se unifican y queda un resultado de un único string 'helloStef' y luego se evalua con size Por lo tanto, { (2+3) . (6+6) . 'hello' , 'Stef' } size evalúa a 3
![ Arreglo Dinámico ](https://i.imgur.com/QliPguB.png)
4 Mensajes: procesando datos Los mensajes son la forma en que los objetos se comunican entre sí y en que nosotros, los humanos, nos comunicamos con el sistema de cómputo. Hay tres tipos de mensajes: **unary (unarios), binary (binary) y keyword.**
4.1 Unario Los mensajes unarios tienen la forma siguiente. anObject aMessage los mensajes unarios son aquellos que se envían a un objeto sin requerir ningún argumento adicional
false not evaluará a true. Esto se debe a que false es un valor bque representa "falso". Al aplicar el operador not, se invierte su valor lógico, convirtiéndolo en "verdadero". Entonces, true not resultará en false
![ Ejemplo Unario False ](https://i.imgur.com/Wu9coYf.png)
El mensaje unario **not** se envía a un objeto que es** true**, el not invertirá el valor de **false** para que se convierta en true
![ Ejemplo Unario true ](https://i.imgur.com/6wal49O.png)
Date today se utiliza para obtener la fecha actual del sistema. Esto devuelve un objeto de tipo Date que representa la fecha actual
![ Ejemplo Mensaje Unario fecha de hoy ](https://i.imgur.com/0rm7I2H.png)
4.2 Binario los "mensajes binarios" son aquellos que se envían a un objeto junto con otro objeto, sin palabras clave o métodos especiales entre ellos. La forma típica de un mensaje binario es la siguiente anObjecto aMessage anotherObject
Este mensaje binario + se utiliza para agregar un período de tiempo a una fecha. En este caso, se está agregando un período de 3 años a la fecha actual.
![ Ejemplo Binario ](https://i.imgur.com/ongPyR1.png)
4.3 Keyword son aquellos que se envían a un objeto junto con uno o más argumentos, donde cada argumento está asociado a una palabra clave específica. La forma típica de un mensaje de palabra clave es la siguiente anObject akey: anotherObject akey2: anotherObject2
el mensaje r:g:b: es un ejemplo de un mensaje de palabra clave implementado en la clase Color. Este mensaje se utiliza para crear un color especificando los valores de los componentes rojo (r), verde (g) y azul (b)
la expresión Color r: 1 g: 0 b: 0, estamos creando un nuevo color donde el componente rojo (r) tiene un valor de 1 (máximo), mientras que los componentes verde (g) y azul (b) tienen un valor de 0 (mínimo), lo que resulta en un color rojo puro.
![ ejemplo Keyword ](https://i.imgur.com/Adzf9Wu.png )
4.4 Prioridad **Paréntesis:** Las expresiones dentro de paréntesis se evalúan primero. **Mensajes unarios: ** Los mensajes unarios, que consisten en un solo identificador, se evalúan después de las expresiones entre paréntesis. **Mensajes binarios:*** Los mensajes binarios, que consisten en operadores como +, -, *, etc., se evalúan después de los mensajes unarios. **Mensajes de palabra clave: ** Los mensajes de palabra clave, que consisten en uno o más identificadores seguidos de dos puntos y un argumento, se evalúan después de los mensajes binarios
Evaluemos la expresión dentro de paréntesis: (3 + 2). Esto da como resultado 5. Luego, elevamos 2 a la potencia (raisedTo) de 5. Esto significa que multiplicaremos 2 por sí mismo 5 veces. Entonces, 2 potencia de 5 =(2×2×2×2×2)= 32
![ Ejemplo de Prioridad ](https://i.imgur.com/Ryz9e6K.png)
4.4.1 Cambiando la prioridad de los mensajes Usar parentesis cambia el orden de evaluación de la sentencia, primero se ejecuta la parte interna() y posteriormente la sentencia
"Squared" Elevado al cuadrado la expresión dentro de los paréntesis: 2 + 3, que da como resultado 5 se aplica el mensaje squared al resultado de la suma, es decir, al número 5 (2 + 3) squared es a 25
![ Ejemplo de Squared Cambiando Prioridades de MSJ ](https://i.imgur.com/G4eYpNt.png)
4.4.2 Prioridad de los mensajes matemáticos Las reglas tradicionales de las matematicas NO aplican dentro de Pharo Aqui el mensaje multiplicación (*) es enviado al 2, y su resultado correspondiente es 20. Entonces 20 reciben el mensaje +, con argumento 2, para un total de 22. Recuerda que todos los mensajes simpre siguen una regla precente de izquierda a derecha, sin excepciones
![ Ejemplo de Prioridad de MSJ matemáticos ](https://i.imgur.com/53p1scd.png)
4.5 Mensajes en cascada los "mensajes en cascada" permiten enviar múltiples mensajes a un mismo objeto de forma encadenada. Esto proporciona una forma concisa de realizar una secuencia de acciones en un objeto sin tener que repetir el nombre del objeto en cada línea de código
**messageBoard**, puedes encadenar los mensajes en cascada para lograr el mismo resultado de una manera más concisa y legible. **show:** se utiliza para mostrar un mensaje en el objeto messageBoard Hola y Pharo **cr** : se utiliza para agregar un salto de línea
![ Ejemplo Mensaje en Cascada ](https://i.imgur.com/EzzsMul.png)
manera abreviada usamos el operador en cascada ";", que usado para enviar mensajes al mismo receptor. Así, una vez limpiemos el Transcript anterior
![ Ejemplo abreviar cascada ](https://i.imgur.com/HR7t28T.png)
aqui podemos ver que ya se implemento la manera abreviada.
![ Ejemplo implementado cascada abreviada ](https://i.imgur.com/TLdU41j.png)
4.6 Bloques son como piezas de código encapsuladas que pueden ser ejecutadas en un momento posterior o bajo ciertas condiciones.
Este bloque toma un argumento x y devuelve el resultado de la expresión x + 2.
![ Ejemplo de Bloque ](https://i.imgur.com/prC7wz6.png)
4.7 Asignación de bloques En Pharo, los bloques son piezas de código encapsuladas que pueden ser asignadas a variables y ejecutadas en un momento
[:x | x+2] value: 20. Este código crea un bloque directamente en el lugar donde se necesita y lo ejecuta inmediatamente con el argumento 20. El bloque toma x como argumento, suma 2 a x y devuelve el resultado. En este caso, se pasa 20 el resultado será 20 + 2 = 22 b := [:x | x+2]. b value: 20. primero se crea un bloque y se asigna a la variable b. Luego, el bloque almacenado en b se ejecuta con el argumento 20. Este enfoque permite reutilizar el mismo bloque en múltiples lugares o en momentos diferentes dentro del código
![ Ejemplo Pharo Asignación Bloques ](https://i.imgur.com/lqedIxv.png)
4.8 Condicionales Los condicionales son sólo menajes enviados a objetos
![ Ejemplo Condicion Es Cierto ](https://i.imgur.com/LGFaOE7.png)
![ Ejemplo de Es falso Condiciones ](https://i.imgur.com/i63bI0n.png)
4.9 Ciclos e Iteradores Los ciclos con iteradores de alto nivel sobre las colecciones, implementados como métodos regulares
4.10 Colecciones
miColeccion := #(11 38 3 -2 10) crea un array con los números (11 38 3 -2 10)
collect: mensaje collect: para aplicar un bloque a cada elemento del array.
[:each | each abs] El bloque proporcionado es [:each | each abs], que toma cada elemento (each)
![ Ejemplo de Colecciones ](https://i.imgur.com/MQFuWBA.png)