1.3 Escribir tus primeros scripts

En esta sección aprenderemos a escribir sencillos scripts en el Workspace para probar y sentir el código Smalltalk. Los ejemplos se asocian con pequeños ejercicios para experimentar y los acompañan las soluciones en el apéndice. Intencionalmente dejamos los detalles de la sintaxis fuera de esta sección.

Se puede escribir el tradicional programa Hello World! en un Workspace de Smalltalk así:

Transcript show: 'Hello World!'

Ejemplo 1.1: El tradicional programa ’Hello World!’

Para ejecutar ese código, selecciónalo con el ratón y sobre él haz ...click derecho → Do it (d)... ¡Puede que no veas qué ocurre! De hecho para ver el resultado necesitas una ventana Transcript visible. El Transcript es un lugar donde un programador puede enviar información al usuario, como hemos visto aquí. Haz ...menú World → Open...Transcript... y ejecuta el código de nuevo.

ch01-img2

Figura 1.3: Ventana Transcript con salida

El código del Workspace tiene tres partes:

La acción de imprimir toma lugar en la clase Transcript. También se puede invocar la ejecución de código con atajos de teclado Ctrl-a (select All) luego Ctrl-d (Do it).

Transcript show: 'Hello World!'.
Transcript newLine.
Transcript show: 'I am Cuising'

Ejemplo 1.2: Varias líneas

En este script de tres líneas, observa cómo las líneas están separadas por un punto «.». Este punto (o punto y coma) es un separador de líneas, por lo que no es necesario en la tercera línea ni en un script de una sola línea. El mensaje #newLine no tiene ningún argumento.

Una String es la forma en que se representa el texto en un lenguaje de programación, es una colección de caracteres. Ya conocimos las cadenas en nuestro primer script, están entre comillas simples: 'hello world!'. Las ponemos en mayúsculas con el mensaje #capitalized message:

Transcript show: 'hello world!' capitalized
⇒ 'Hello world!' 

Para converitr todos los caracteres en mayúsculas se utiliza el mensaje #asUppercase:

Transcript show: 'hello world!' asUppercase
⇒ 'HELLO WORLD!'

Dos cadenas se concatenan con el mensaje #,:

Transcript show: 'Hello ', 'my beloved ', 'friend'
⇒ 'Hello my beloved friend'

Ejemplo 1.3: Concatenar cadenas

 CuisLogo Añade un mensaje para modificar el Ejemplo 1.3 para que produzca ’Hello MY BELOVED friends’.

Ejercicio 1.2: Concatenación y mayúsculas

1.3.1 Diversión con números

En tu Workspace, calcula un factorial ejecutando el ejemplo de abajo con Ctrl-a luego Ctrl-p (Print it):

100 factorial
⇒  9332621544394415268169923885626670049071596826438162146859
29638952175999932299156089414639761565182862536979208272237582
51185210916864000000000000000000000000

Cuis-Smalltalk maneja números enteros muy grandes sin requerir ningún tipo de declaración especial o método. Para convencerte a tí mismo prueba el ejemplo de aquí abajo:

10000 factorial / 9999 factorial
⇒ 10000

Si ejecutas e imprimes con Ctrl-p el código: 10000 factorial, verás que se tarda mucho más tiempo en imprimir un resultado factorial que en calcular dos factoriales y dividirlos. El resultado es un número entero, como era de esperar, y no un número decimal escalado, como devolverían muchos lenguajes de programación.

Como estamos hablando de división, es posible que no obtengas el resultado que esperas:

15 / 4
⇒ 15/4

Parece que Cuis-Smalltalk es perezoso porque no responde el número decimal 3.75 como esperábamos. De hecho, Cuis-Smalltalk quiere ser lo más preciso posible, y ¡su respuesta es un número racional! Después de todo, una fracción es solo una división que somos demasiado perezosos para calcular, –porque es complicado–, ¡pero Cuis-Smalltalk hace esto!

Prueba esto para comprender lo que, en el fondo, está sucediendo:

(15 / 4) + (1 / 4)
⇒ 4

¿No es maravilloso? Cuis-Smalltalk realiza cálculos con números racionales. Comenzamos con operaciones de división y suma con números enteros, y obtuvimos un resultado preciso gracias al cálculo intermedio con números racionales.

 note En el ejemplo, observa cómo se utilizan los paréntesis, aunque en el cálculo aritmético la división se realiza primero. Con Cuis-Smalltalk es necesario especificar el orden de las operaciones con paréntesis. Más adelante explicaremos por qué.

 CuisLogo Escribe el código para calcular la suma de los inversos de los cuatro primeros números enteros. El inverso de 4 es 1/4.

Ejercicio 1.3: Suma de inversos

Los enteros se pueden mostrar de diversas maneras con el mensaje apropiado:

2020 printStringRoman ⇒ 'MMXX' 
2020 printStringWords  ⇒ 'two thousand, twenty'
"Number as the Maya did"
2020 printStringBase: 20 ⇒ '510'

 CuisLogo Imprime 2020 como palabras, en mayúscula, capitalized.

Ejercicio 1.4: Número en palabras en mayúsculas

Los números enteros y decimales con los que hemos trabajado son literales numéricos. Los literales son los componentes básicos del lenguaje y se consideran expresiones constantes. Son literalmente lo que parecen.

Hay varias variantes sintácticas para denotar números:

Literal numéricoLo que representa
1entero (notación decimal)
2r101entero (base binaria)
16rFFentero (base hexadecimal)
1.5número de coma flotante
2.4e7coma flotante (notación exponencial)

Dependiendo del valor que necesitemos utilizar, podemos mezclar estas representaciones literales:

16rA + 1 + 5e-1 + 6e-2
⇒ 289/25