sábado, 28 de julho de 2007

Smalltalk

VisualWorks Faz tempo que quero escrever algo sobre Smalltalk.

Smalltalk é a linguagem de programação orientada a objetos. O conceito de orientação a objetos foi criado pela equipe que desenvolveu Smalltalk, no MIT durante o final da década de 1960, ainda antes da criação de C. A primeira versão oficial foi Smalltalk-71.

[update 2008-04-19]Pequena correção: o conceito de orientação a objetos foi aprimorado em Smalltalk. A linguagem Simula já era orientada a objetos antes de Smalltalk.[/update]


Em Smalltalk tudo são objetos. Números são objetos, classes são objetos, métodos são objetos, blocos de código, strings, etc., tudo mesmo.

Outros conceitos que leigos acreditam ter sido criados na década de 1990 também proveem de Smalltalk, como bytecode e máquina virtual. É como Smalltalk trabalha.

Para ter Smalltalk instalado, eu uso Cincom VisualWorks.


Este artigo tem por objetivo exibir alguns exemplos.

Vamos então ao famoso «Olá Mundo!»:

Se você também instalou VisualWorks, inicie um novo workspace, digite e execute:
Transcript show: 'Hello World'.
Transcript cr.


Dica: é preciso selecionar o código para executá-lo.

O botão para execução é o raiozinho (Do it).


Os comandos são chamados mensagens e têm o formato:
objeto método[: parâmetros].

Onde os parâmetros são outros objetos passados ao método do objeto que recebe a mensagem.

O objeto Transcript é a janela principal do VisualWorks, que tem o método show (mostrar). Como parâmetro, estamos passando o objeto 'Hello World', uma string.

O método cr de Transcript insere uma mudança de linha.

Chamadas a diversos métodos de um mesmo objeto podem ser concatenadas com ;:
Transcript show: 'Hello World'; cr.


Na verdade não é obrigatório usar o ponto como terminador de mensagem. Ele é apenas um separador de mensagens.

Podemos «picar» a string:
Transcript show: ('Hello World' copyFrom: 2 to: 4).
Transcript cr.


Vai exibir ell: assim como Pascal e Lua, os índices em Smalltalk começam em 1.

Para exibir um número:
Transcript show: (((3 + 5) negated) printString).
Transcript cr.


Vamos agora criar um coleção:
| ord |
ord := SortedCollection new.
ord add: 'Forca de Expressao'.
ord add: 'Monte Gasppa'.
ord add: 'Walter Cruz - devlog'.
Transcript show: (ord at: 1).
Transcript cr.


Ou ainda:
| ord |
ord := SortedCollection new.
ord add: 'Forca de Expressao'.
ord add: 'Monte Gasppa'.
ord add: 'Walter Cruz - devlog'.
ord do: [ :each | Transcript show: each; cr ].


Para exibir todos os número de 1 a 10:
(1 to: 10) do: [ :index |
Transcript show: (index printString); cr
].


Vamos ficar por aqui por enquanto… quando eu estiver mais desenferrujado, escreverei mais alguma coisa.

Apropósito, mais informações podem ser obtidas aqui.

[]'s
Cacilhas
blog comments powered by Disqus