**Copy of Intro a Pharo(id: f05d78b9)**
##Introducción Información en migración y en Spanglis: Se destaca su naturaleza en constante evolución y migración, proveniente de una libreta interactiva en Grafoscopio, originalmente concebida en 2016 y ahora adaptada a las tecnologías de Lepiter hasta 2021. Se enfoca en la importancia de rescatar información de sus contextos originales, incorporando nuevas tecnologías y manteniendo visiones críticas sobre datos y código. Se señala la preocupación por una mirada crítica hacia los datos y el código, promoviendo una formación de capacidades que democratice el acceso al conocimiento técnico. El objetivo es que el código no sea exclusivo de los desarrolladores de software, sino que refleje la diversidad de sujetos y mundos. Finalmente, se establece que la narrativa de datos combina prosa, código, datos y visualizaciones, y se profundizará en el uso de libretas interactivas para explorar los tipos básicos de datos ofrecidos por Pharo y las operaciones básicas en ellos.
###2. Interacción Básica
Inspeccionando y Haciendo: Esta operación implica ejecutar instrucciones (también conocidas como mensajes) y explorar más a fondo los objetos que contienen y representan los datos. La inspección es la operación principal para explorar datos, mientras que "hacer" también es comúnmente utilizada. Por lo tanto, estas operaciones se presentan juntas.
Imprimiendo: Esta operación consiste en mostrar los resultados de los mensajes que se están ejecutando.
### Tipos Básicos: representando datos
3.1 Números Pharo puede ser manipulado de varias maneras por ejemplo:
"Representa el número 2"
"Calcula el factorial de 20"
"Divide los factoriales de 1000 y 999"
"(1/3) representa la fracción 1/3"
"Suma dos fracciones"
"Convierte 1/3 a un número decimal"
- Pharo ofrece capacidades de cálculo avanzadas con números. - La sintaxis para expresar fracciones es clara y directa.
3.2 Caracteres Los caracteres representan letras o glifos del alfabeto y pueden ser creados así:
"Crea el caracter 'A'"
"Obtiene el código ASCII de '@'"
"Representa un salto de línea"
"Representa un espacio en blanco"
- Los caracteres pueden ser manipulados y utilizados en operaciones. - Pharo ofrece una forma sencilla de trabajar con códigos ASCII.
3.3 Cadenas Las cadenas son colecciones de caracteres y se manipulan de la siguiente manera: "Devuelve la clase de 'a', que es String"
"Devuelve la clase de $a, que también es String"
"Una cadena de texto"
"Devuelve la longitud de la cadena"
"Convierte la cadena a mayúsculas"
"Invierte la cadena"
- Las cadenas son objetos flexibles y pueden ser manipuladas de diversas maneras. - Pharo ofrece métodos convenientes para operar con cadenas.
3.4 Símbolos Los símbolos son cadenas únicas globalmente y se utilizan para representar identificadores:
"Convierte la cadena en un símbolo"
"Convierte el símbolo en una cadena"
"Compara un símbolo y una cadena"
"Compara la igualdad exacta entre símbolos y cadenas"
- Los símbolos son útiles para representar identificadores únicos de manera eficiente. - Pharo ofrece operaciones para convertir entre símbolos y cadenas.
3.5 Arreglos Los arreglos son colecciones de objetos y pueden ser estáticos o dinámicos:
"Un arreglo estático con tres elementos"
"Obtiene el tamaño del arreglo"
"Verifica si el arreglo está vacío"
"Obtiene el primer elemento del arreglo"
El anterior refleja un error en syntaxis (creo)
- Pharo ofrece manejo conveniente de arreglos estáticos. - Los arreglos pueden ser inspeccionados y modificados fácilmente.
3.6 Arreglos Dinámicos Los arreglos dinámicos se crean durante la ejecución y pueden contener cálculos:
"Un arreglo dinámico con dos elementos"
"Obtiene el tamaño del arreglo estático"
"Obtiene el tamaño del arreglo dinámico"
- Los arreglos dinámicos ofrecen flexibilidad para manejar datos durante la ejecución. - Pharo permite la creación y manipulación sencilla de arreglos dinámicos.
**Colecciones e Iteradores**
Una colección es un arreglo o secuencia de datos, que puede estar ordenado o no, y puede contener elementos repetidos o no. Un iterador es un elemento que recorre cada uno de los elementos de la colección.
Colección que duplica los primeros 20 números:
Colección de los primeros 20 enteros con saltos de 2, a la que se le suma 3 a cada elemento:
Selección de números pares de los primeros 20 enteros:
Rechazo de números pares, quedando los impares de los primeros 20 enteros:
Estos ejemplos muestran cómo usar mensajes como collect:, select: y reject: para realizar operaciones en colecciones en Pharo
**Mensajes: procesando datos**
En esta sección se describen los diferentes tipos de mensajes en Pharo y se proporcionan ejemplos para cada uno:
Mensajes Unarios: Son mensajes que involucran un objeto y una acción sin argumentos adicionales. Por ejemplo:
Mensajes Binarios: Son mensajes que involucran dos objetos y una operación. Por ejemplo:
Mensajes Keyword: Son mensajes que tienen argumentos específicos. Por ejemplo:
Prioridad: Los mensajes unarios son ejectuados primero, los mensajes binarios son ejecutados despues y finalmente las cadenas de mensajes: paréntesis > Unary > Binary > Keywords
Entre mensajes de procedencia similar, las expresiones son ejectuadas de izquierda a derecha
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
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.
Los Mensajes en cascada permiten enviar una secuencia de mensajes a un mismo objeto de manera abreviada, utilizando el operador ";". Por ejemplo, si tenemos un objeto messageBoard y queremos mostrar un conjunto de resultados, podemos hacerlo de la siguiente manera:
Esto es equivalente a enviar cada mensaje individualmente al objeto messageBoard, lo cual sería engorroso. Al utilizar el operador en cascada, podemos lograr el mismo resultado de manera más concisa.
En cuanto a los Bloques, estos son métodos anónimos que permiten 'congelar' código para ejecutarlo más tarde. Se delimitan por paréntesis cuadrados y pueden ser asignados a variables. Los argumentos de los bloques están precedidos por ":" y se separan por "|". Por ejemplo:
También es posible tener bloques que reciban varios argumentos, como se muestra a continuación:
Los bloques pueden ser asignados a variables y ejecutados posteriormente. Por ejemplo:
Condicionales, es posible enviar mensajes a objetos Boolean (booleanos) para realizar acciones basadas en condiciones. Por ejemplo:
En este caso, se muestra un mensaje diferente dependiendo de si la condición es verdadera o falsa.
- se discute la prioridad de los mensajes y cómo afecta el orden de evaluación de las expresiones en pharo. - Se incluyen ejemplos de expresiones con diferentes prioridades y cómo se resuelven. . - se habla sobre los mensajes en cascada, que permiten enviar múltiples mensajes a un mismo receptor de manera abreviada. - son métodos anónimos que pueden ser asignados a variables y ejecutados después. - Se describen los argumentos de los bloques y cómo se ejecutan mediante el envío del mensaje value. - se mencionan los condicionales, ciclos e iteradores, así como el uso de colecciones y algunos iteradores útiles en Pharo.
Los Ciclos e Iteradores en Pharo son herramientas poderosas para trabajar con colecciones de objetos. Aquí hay un resumen de los conceptos importantes y ejemplos:
Iteración con "to:": Se puede usar el mensaje to: para generar una secuencia de números enteros y realizar alguna acción en cada uno de ellos. Por ejemplo:
Iteración con "do:": El mensaje do: se utiliza para realizar una acción en cada elemento de una colección. Por ejemplo:
Iteración con "to:by:": Este mensaje permite especificar un paso para la secuencia de números generada. Por ejemplo:
Iteración con "to:by:" (números negativos): También es posible especificar pasos negativos para la secuencia de números. Por ejemplo:
Método "doWithIndex:": Este método se utiliza cuando se necesita tanto el índice como el objeto en la iteración. Por ejemplo:
Iteradores sobre colecciones: Pharo proporciona una variedad de iteradores convenientes para trabajar con colecciones. Por ejemplo:
Estos ejemplos muestran cómo se pueden realizar diferentes operaciones en colecciones utilizando iteradores en Pharo.
**Ejemplos de botones**
Los objetos son instancias de sus clases. El mensaje #allInstances enviado a una clase devuelve un arreglo con todas las instancias de esa clase. Puedes crear una nueva instancia de un botón y manipularla:
También puedes modificar propiedades de un botón existente:
Para eliminar un botón y limpiar la memoria:
Además, puedes crear un botón que te lleve a la siguiente lección:
Cambiando un Sistema en Ejecución: Puedes inspeccionar y cambiar el sistema en tiempo de ejecución. Por ejemplo, puedes ver el código fuente de un método específico de la clase True:
También puedes ver solo el comentario del método:
Para explorar todos los métodos implementados por la clase ProfStef:
Para compilar un nuevo método en la clase ProfStef, por ejemplo, uno llamado goToNextLesson:
Limpiando Métodos: Para verificar si la clase ProfStef responde al mensaje goToNextLesson:
Para eliminar el método goToNextLesson de la clase ProfStef:
Explorando Objetos: Cada objeto en Pharo entiende el mensaje explore, lo que abre una ventana de exploración para ver detalles sobre el objeto. Por ejemplo, para explorar el objeto Date today:
O para explorar la instancia de la clase ProfStef:
Estos ejemplos permiten interactuar con el sistema en tiempo de ejecución, crear y eliminar métodos, y explorar objetos en Pharo.