Conhecendo alguns objetos básicos
Doggie DaddySmalltalk é uma linguagem orientada a objetos. Na verdade é a precursora. Quase tudo em Smalltalk é um objeto. Os objetos respondem a mensagens. Respondem retornando um objeto e podem manifestar um efeito colateral ao mesmo tempo. Como cada mensagem sempre retorna um objeto elas podem ser encadeadas.
Números
1, 2, 100, 2/3 são números. Os números são objetos. Podem responder a mensagens.
Experimente executar as expressões mostradas abaixo usando Print it
para ver o que retornam de forma textual ou Inspect it
para examinar o objeto em suas "entranhas".
Caracteres
Os caracteres são outro tipo básico. $A
é o literal que representa o caractere A
maiúsculo. São objetos também.
Experimente com as expressões abaixo envolvendo caracteres.
Strings
As strings são concatenações de caracteres. 'Sou uma string'
é um literal que representa uma string. A string é ladeada por '
(apóstrofos).
Experimente com os exemplos de strings abaixo.
Símbolos
Os símbolos (Symbol) são parecidos com as strings. Seus literais são precedidos do caractere #
. #ProfStef
é um símbolo. Só há um símbolo #ProfStef
no ambiente, caso ele seja criado. No entanto você pode ter mais de uma string equivalente à string literal 'ProfStef'
.
Experimente com os exemplos abaixo.
A mensagem==
compara duas referências a objetos. Se são os mesmos objetos (estão no mesmo endereço de memória) retornatrue
. Caso contrário retornafalse
.
Arrays
Os arrays são conjuntos de objetos ordenados que podem ser manipulados de uma só vez ou através de acesso aos seus componentes.
#(1 2 3)
é a forma literal para o array. A forma literal é precedida de um #
com uma lista de também literais, separados por espaços, entre parênteses.
Experimente com os exemplos abaixo.
Note que a mensagemcopy
em#('hello' 'world') copy at: 2 put: 'Pharo'; yourself.
. Os arrays literais no Pharo 9 são imutáveis e por isso só podemos alterar cópias deles.
Array dinâmico
Os arrays dinâmicos são ladeados por {
e }
e seus elementos não precisam ser literais e são separados por .
. Os elementos podem ser literais, objetos ou expressões (na verdade os objetos retornados pela avaliação das expressões). { Date today. 5 factorial. 'ProfStef'. #ProfStef. 42 }
é um exemplo de array dinâmico.
Nota: Array dinâmico não faz parte da especificação ANSI para o Smalltalk e por isso nem todo Smalltalk suporta arrays dinâmicos.
Nota adicional: O array dinâmico é um "açucar sintático"(Syntactic sugar) assim como o array literal da seção anterior. Ao inspecioná-los (Inspect it
) tanto#(1 2 3)
quanto{1. 2. 3}
são mostrados como iguais.
Experimente com os exemplos abaixo.
Encerrando
Encerre a lição salvando a imagem.