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.
Figura 1.3: Ventana Transcript con salida
El código del Workspace tiene tres partes:
'Hello World!'
#show: con su argumento 'Hello World!'
Transcript que recibe el mensaje #show: con su argumento
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
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
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.
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é.
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'
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érico | Lo que representa |
|---|---|
1 | entero (notación decimal) |
2r101 | entero (base binaria) |
16rFF | entero (base hexadecimal) |
1.5 | número de coma flotante |
2.4e7 | coma flotante (notación exponencial) |
Dependiendo del valor que necesitemos utilizar, podemos mezclar estas representaciones literales:
16rA + 1 + 5e-1 + 6e-2 ⇒ 289/25