**Intro a Pharo**
# Tipos Básicos: representando datos
## Números
Ejecuta el número 2
El factorial es multiplicar todos los números enteros del 1 hasta llegar al número dado. Ejemplo: 1x2x3x4x5x6x7x8x9x10x11x12x13x14x15x16x17x18x19x20
Operación básica de división
Arroja el resultado de la división solo en formato decimal
## Caracteres
Arroja un rectangulo como caracter. Sin embargo, es interesante observar las pestañas de la parte superior derecha en la cual indica las catacterísticas del caracter y a qué clase pertenece.
Arroja la letra A como caracter
Puedes encontrar cual es el número ASCII ( American Standard Code for Information Interchange) para un caracter. Es un código de caracteres donde cada bit individual representa un carácter único a partir de 8 bit equivalente a 256 caracteres del código extendido ASCII.
Existen caracteres, como los anteriores, que no arrojan código o son "no imprimibles".
El código anterior permite "imprimir" o ejecutar los 256 caracteres del código extendido ASCII. Se ejecutan palabras sin sentido por lo que puede haber un problema de visualización de los simbólos latinos o romanos.
## Cadenas
El resultado para esta cadena es: This class represents the array of 8 bit wide characters.
Representa un caracter asociado de Unicode. Problema: This is going to be a problem with the languages so called CJK (Chinese, Japanese, Korean. Or often CJKV including Vietnamese).
Si se ejecuta 'PharoTutorial' aparece la palabra en sí misma representada en caracteres individuales. Ejemplo: $P $h $a $r $o , lo cual se une como una cadena y forma o representa la palabra. Si se agrega la palabra "size" arroja 13, que quiere decir el número de caracteres que contiene la palabra.
Se ejecutan las letras en mayuscula
Arroja la cadena de palabras en reversa
Arroja la palabra en reversa; sin embargo, notese que es un palíndromo: se lee igual al derecho y al revés.
Arroja la palabre "T"; es decir, la sexta letra de la cadena de caracteres de la palabra
Permite concatenar/unir palabras
## Símbolos
Se ejecuta la palabra "PharoTutorial" como un solo símbolo.
Se ejecuta la palabra "PharoTutorial" como una cadena. No comprendo la diferencia en la ejecución entre "asSymbol" y "asString", ya que arroja exactamente el mismo resultado. ¿De qué se trata? La diferencia radica en que, si bien la sintaxis que arroja cuando se ejecuta se visualiza de la misma manera, internamente el código diferencia la acción; es decir, si es una cadena o un simbolo.
## Arreglos
Al ejecutar arroja el resultado 4. Lo que quiere decir que en el caracter número 4 inicia un arreglo dentro de la cadena
Arroja falso, pero no logré descifrar el por qué. ¿Quiere decir que no está vacio?
Ejecuta el número 1, porque es el primer número en la cadena. ¿Estoy en lo cierto?
## Arreglos Dinámicos
Al ejecutar me arroja dos items: 5: el resultado matemático del primer parentesís 36: el resultado matemático del segundo parentesís Me genera una duda porque en matemáticas se resuelve primero la multiplicación. ¿Estoy muy errada con este comentario?
Arroja el resultado 5. No comprendí qué significa; inicialmente pensé que era el número de caracteres de la palabra "hello"; ya no estoy segura, no lo creo.
En esta cadena cambia el númeral por el corchete y entre "hello" y "Stef" hay una flecha de diferencia. El resultado que arroja es 3, sin embargo no comprendí muy bien.
# Mensajes: procesando datos
## Unario
Consiste en una sola palabra. Tiene la forma de: 1 objeto 1 mensaje anObject aMessage
Al inspeccionar arroja el siguiente resultado: My instances are 31-bit numbers or 63-bit numbers depending on the image architecture, stored in twos complement form. The allowable range is approximately +- 1 billion (31 bits), 1 quintillion (63 bits) (see SmallInteger minVal, maxVal).
This class represents the symbols containing 8bit characters
Representa un cararter asociado al Unicode.
Resultado: falso
Resultado: verdadero
Arroja la hora actual incluyendo las milesimas de de segundos.
Arroja la fecha actua
Arroja la fecha del día anterior
Arroja la fecha del día después
Arroja el valor de π: la relación entre la longitud de una circunferencia y su diámetro en geometría euclidiana.
## Binario
Consisten en dos palabras. Tiene la forma de: 1 objeto 1 mensaje otro objeto
Arroja el resultado de la operación de la suma: 5
Arroja el resultado de la operación de la multipliación: 625
Arroja verdadero ya que el resultado de la suma es el correcto.
Arroja la fecha contando el día actual más tres semanas.
Arroja la fecha contando el día actual más tres años.
Arroja la fecha contando el día actual menos tres años.
Arroja falso. ¿porque la variable y el valor son: false'
Arroja verdadero ¿por qué? Quizás porque la variable es true?
Arroja verdadero porque la variable y el valor son: true
Arroja verdadero ¿por qué? responde al interrogante anterior: no es porque la variable sea true o false ¿Entonces?
Arroja true. ¿Quizás porque está diciendo "verdadero y verdadero: verdadero?
Arroja false: ¿por qué? ¿porque es el valor?
Arroja la sumatoria de x: y Arroja la sumatoria de y: 100
Arroja verdadero porque 10 es menos o igual que 12
Arroja falso porque 10 no es mayor o igual que 12
Arroja la cadena abcd. No sé porqué, pensé que "ab" asignaba algo a "cd".
Arroja false: operación matemática entre sí la fecha de hoy es menor que la de ayer.
Arroja true: operación matemática entre sí la fecha de hoy es mayor que la de ayer.
## Keyword
Los mensajes 'keyword' son mensajes con argumentos. Tienen la siguiente forma: anObject akey: anotherObject akey2: anotherObject2 Los mensajes keyword son mensajes que requieren uno o más argumentos y cuyo selector consiste en una o más palabras clave cada una terminada en dos puntos (:).
*"El mensaje lo que nos dice es: si (4) esta entre (0 y 10) cuya respuesta es verdadero, pero si cambio el valor del 0 por 3, el resultado es falso"*
Pero con 3 sigue siendo true porque 4 está entre 0 y 10. Si se ejecuta con el número 5 sería false porque 4 sale del rango.
Arroja 3 porque es el valor máximo entre 1 y 3.
Es la clase del color: arroja red
"*Si quieres usar código RGB usando valores de 0 a 255, como es la práctica usual, deberás escribirlos como cociente, de forma que sean un número entre 0 y 1. Por ejemplo r: x/255 g: y/255 b: z/255, donde x,y,z son los valores entre 0 y 255 correspondientes al código que color que queremos obtener.*"
## Prioridad
*"Los mensajes unarios son ejectuados primero, los mensajes binarios son ejecutados despues y finalmente las cadenas de mensajes: paréntesis > Unary > Binary > Keywords"*
Al ejecutar el resultado es el número 7 porque realiza la operación matemática. Pero realmente no pude distinguir cuál era el mensaje unario. Lo entendí de la siguiente manera: 2 negated es el mensaje binario; luego el símbolo + es el mensaje unario; y, por último, entre parentesis el mensaje tipo keywords. ¿Qué tan equivocada o acertada estoy? Creo que ninguno.
Arroja 9, es decir, el resultado de la operación matemática o la suma de estos. Sin embargo, sigo sin comprender la prioridad.
Al ejecutar el resultado es 32, porque es la respuesta de 2 elevado a las 5.
El resultado de la ejecución es: I represent an x,y pair of numbers usually designating a location on the screen. My instances are created either using the message `@` or `x:y:` or `r:degrees:` as follows:
Al ejecutar el resultado es el siguiente:
![ ](https://i.imgur.com/n0XONEa.png)
![ ](https://i.imgur.com/4B3VlxK.png)
![ ](https://i.imgur.com/Oays1KS.png)
Al ejecutar el resultado es el siguiente:
*"Entre mensajes de procedencia similar, las expresiones son ejectuadas de izquierda a derecha*".
![ ](https://i.imgur.com/hJd4qVf.png)
### Cambiando la prioridad de los mensajes
"*El uso de parentesis cambia el orden de evaluación de la sentencia, primero se ejecuta la parte interna() y posteriormente la sentencia*".
Primero resuelve los parentesís, es decir la suma de 2+3 es igual a 5 y luego ejeccuta la sentencia fuera del parentesís, o sea, al cuadrado. Por lo tanto el resultado es 25 porque es la respuesta de 5 al cuadrado.
Al igual que el ejemplo anterior, primero ejecuta los parentesis: Así pues, 2 elevado a la 3 es 8 + 2, que es la sentencía externa: el resultado es 10.
El resultado que ejecuta es el siguiente: Sin embargo, no entiendo muy bien.
![ ](https://i.imgur.com/4fQ2XxH.png)
### Prioridad de los mensajes matemáticos
*"Las reglas tradicionales de las matematicas NO aplican dentro de Pharo"*. "*Aqui el mensaje multiplicación (X) 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*".
El resultado es 40; porque opera de izquierda a derecha, es decir: 2 + 2: 4 y luego 4x10:40
El resultado es 22 porque resuelve los parentesís: 20 y luego suma 2 para un total de 22. Pero, en ese orden de ideas ¿se estaría contradiciendo con el enunciado *"Recuerda que todos los mensajes simpre siguen una regla precente de izquierda a derecha, sin excepciones*"?
Aunque el enunciado principal, escrito por el profe Offray, dice que no cumple las reglas generales de las matemáticas, me doy cuenta que arroja el mismo resultado que el ejemplo anterior, algo como "el orden de los factores no altera el resultado". Sin embargo, en este caso si respeta la regla de izquiera a derecha, ¿es cierto o muy equivocada?
El resultado es la siguiente fracción que resuelve la operación: 8-5:3 3/2: 1,5
![ ](https://i.imgur.com/8oeJuqz.png)
Arroja el mismo resultado anterior, pero no entiendo por qué ¿Los parentesís son invisibles?
![ ](https://i.imgur.com/8oeJuqz.png)
Arroja la siguiente fracción como resultado el cual realiza la siguiente operación matématica:
![ ](https://i.imgur.com/Bi0ya6x.png)
![ ](https://i.imgur.com/GMRMglq.png)
## Mensajes en Cascada
Para este caso se debe usar el operador en cascada ";", para enviar mensajes al mismo receptor.
El punto y coma permite que se ejecute el mensaje en cascada. Es decir, para este caso se visualiza la palabra "hello" y "pharo" que son el resultado de show. Para el caso de cr no arroja nada porque está en blanco. ¿o porque el comando significa otra cosa?
## Bloques
Un bloque es básicamente una función anónima y son expresiones encerradas en corchetes.
El resultado es 2.5
El resultado es 12
El resultado es -2
Un bloque se evalúa enviándole el mensaje value. El bloque responde con el valor de la última expresión de su cuerpo, si no existe un valor de retorno explícito (con↑), en cuyo caso no responde ningún valor. [ 1 + 2 ] value −→ 3 Los bloques pueden recibir parámetros, cada uno de los cuales se declara con dos puntos precediéndole. Una barra vertical separa la declaración de parámetros del cuerpo del bloque. Para evaluar un cuerpo con un parámetro, debes enviar el mensaje value: con un argumento. A un bloque de dos parámetros se le debe enviar value:value:, y así, hasta los 4 argumentos. [ :x | 1 + x ] value: 2 −→ 3 [ :x :y | x + y ] value: 1 value: 2 −→ 3 Tomado de: https://files.pharo.org/books-pdfs/pharo-by-example/2013-PharoByExample-2013-SP.pdf (pág. 58).
## Asignación de Bloques
# Condicionales
Los condicionales, se expresan generalmente a través del envío de mensajes a booleanos, números y colecciones, con bloques como argumentos. (Paráfrasis tomada de: https://files.pharo.org/books-pdfs/pharo-by-example/2013-PharoByExample-2013-SP.pdf )
Es la misma estructura que las fórmulas condicionales en excel; se expresa por ejemplo: Si el número 3 es mayor que 10 entonces arroje falso, pero si el número 3 es menor que 10 entonces arroje verdadero. En este caso es: el enunciado 3 es mayor que 10, entonces: Si es verdadero arroje que hay quizás hay un error Si es falso entonces arroje No: 3 es menor que 10.
# Ciclos e Iteradores
Teniendo en cuenta el documento de clase del profesor Offray, "*Un itereador es un elemento que recorre cada uno de los elementos de la colección."* (Tomado de: https://mutabit.com/repos.fossil/holonica/doc/trunk/wiki/es/collecciones-e-iteradores--baxom.md.html)
*"Las colecciones comprenden un gran número de clases diferentes, muchas de las cuales soportan el mismo protocolo. Los mensajes más importantes para iterar sobre las colecciones incluyen do:, collect:, select:, reject:, detect: and inject:into:.*" (Tomado de: https://files.pharo.org/books-pdfs/pharo-by-example/2013-PharoByExample-2013-SP.pdf)
Arroja un intervalo de 1 hasta 10
![ ](https://i.imgur.com/t8ZWObH.png)
El resultado es el número 1; pero no entiendo muy bien la secuencia de la segunda línea.
# Colecciones
Siguiendo la descripción del mismo documento de clase, "*una colección es un arreglo o secuencia de datos (ordenados o no y repetidos o no)*".
El # se usa para definir un arreglo literal; no logro entender la secuencia de la segunda línea. ¿Está diciendo que me muestre cada uno multiplicado por 2? No, no es eso.