Arquivo da categoria: Pharo

ProfStef: Sintaxe da mensagem: Cascata

pharo

Tutorial do Pharo.

Abra o tutorial em português do ProfStef na lição Sintaxe da mensagem: Cascata.

pharo6-pharo-tutorials-submenu

pharotut-profstef-cascading-lesson

 

Nota:

Nesta lição será usado o Transcript, uma espécie de área de saída para exibição de resultados, que pode ser aberto programaticamente com Transcript open ou através do menu World.

pharotut-world-transcript-open

Já abordamos antes o efeito da colocação de um ; (ponto e vírgula) entre duas mensagens em uma lição anterior (quando usamos a mensagem #at:put:). Vamos detalhar mais um pouco aqui.

Abra um Playground e um Transcript. Digite o que vê abaixo, selecione e Do it.

pharotut-transcript-cascading

No primeiro grupo não se usa cascata.

Na segundo se usa o operador ; de cascata e desta forma as mensagens #show: são enviadas para o Transcript sem precisar repetir o receptor.

No terceiro se usa parênteses e as mensagens #show: são enviadas ao objeto retornado. Neste último caso a segunda e terceira mensagem #show é enviada ao objeto Transcript porque ele é o retorno da expressão Transcript show: ‘cinco’ e também da expressão (Transcript show: ‘ cinco ‘) show: ‘ seis ‘.

Como veremos mais adiante no tutorial o retorno default de uma mensagem é o próprio objeto receptor a não ser que seja especificado outro retorno como acontece com a mensagem #at:put:, que retorna o segundo argumento.

Se você experimentar remover os parênteses do último grupo obterá um erro.

pharotut-show-show-show-no-understand

A mensagem com palavras chaves #show:show:show: “não é entendida” pelo objeto Transcript. Veremos mais sobre isto no futuro.

Voltar à página do tutorial.

ProfStef: Precedência matemática

pharo

Tutorial do Pharo.

Abra o tutorial em português do ProfStef na lição Precedência matemática.

pharo6-pharo-tutorials-submenu

pharotut-math-precedence-lesson

A ordem de execução das mensagens das expressões matemáticas é por default sempre da esquerda para a direita.

Nota:

A expressões matemáticas são construídas somente com mensagens binárias. Embora se pareça com uma regra estritamente sintática a ser reforçada pelo compilador esta ordem é, na verdade, uma consequência de um encadeamento de mensagens enviadas aos números, que são objetos, e aos objetos retornados da avaliação da mensagem precedente. É o que acontece no exemplo desta lição com a primeira expressão 2 * 10 + 2. A avaliação da expressão pode ser descrita da seguinte forma: 2 recebe a mensagem binária * com o argumento 10 e retorna 20 (um objeto). Agora 20 recebe a mensagem + com o argumento 2 e retorna 22.

A introdução de parênteses muda esta mecânica conforme já foi explicado antes num contexto mais amplo do que o de expressões composta exclusivamente de mensagens binárias.

Não deixe de experimentar todas as expressões e sinta se livre para alterá-las à vontade para ver os efeitos.

 

Voltar à página do tutorial.

ProfStef: Sintaxe da mensagem: Parênteses

pharo

Tutorial do Pharo.

Abra o tutorial em português do ProfStef na lição Sintaxe da mensagem: Parênteses.

pharo6-pharo-tutorials-submenu

pharotut-parentesis-lesson

A ordem de execução das mensagens é alterada com o uso de parênteses de forma similar ao que acontece em expressões matemáticas. Primeiro se avalia o que está entre parênteses.

Vamos remover os parênteses nas expressões mostradas acima para ilustrar as consequências. Deixaremos a expressão não modificada acima da qual os parênteses foram removidos.

pharotut-parentesis-removed

Os valores nas duas primeiras expressões mudam radicalmente. Isto pode causar erros no programa difíceis de perceber.

A terceira expressão lança um erro após os parênteses serem removidos. O inteiro 200, objeto da classe SmallInteger, não “entende” (understand) a mensagem bottomRight que passou a ser enviada ao mesmo após a remoção dos parênteses.

Voltar à página do tutorial.

ProfStef: Sintaxe da mensagem: ordem de execução

pharo

Tutorial do Pharo.

Abra o tutorial em português do ProfStef na lição Sintaxe da mensagem: ordem de execução.

pharo6-pharo-tutorials-submenu

Pharo 6 ProfStef BR Lição Ordem de execução

A ordem de execução das mensagens é primeiro as mensagens unárias (unary), depois as binárias (binary) e, finalmente, aquelas com palavras chaves (keywords).

Vamos colocar parênteses supérfluos nas expressões mostradas acima para ilustrar a ordem, considerando que os parênteses indicam a ordem da mesma forma que em expressões matemáticas.

pharotut-precedence-ilustrated-with-parentesis.png

Inspecione as várias expressões para apreender detalhes sobre os retornos das expressões.

Voltar à página do tutorial.

Clickable link | Pharo Smalltalk

Fiquei intrigado com o texto exibido na janela Welcome do Pharo 6.

Pharo 6 Welcome Window

Abaixo de Color theme há duas expressões: Pharo3Theme beCurrent e Pharo3DarkTheme beCurrent.

Como são expressões em Smalltalk cliquei por curiosidade. Como supostamente já estamos usando o Dark Theme cliquei na primeira expressão para ver o que acontecia. Surpresa! O tema mudou!

Pharo 6 Pharo3 Theme Again.png

Para restabelecer o Dark Theme basta um clique na segunda linha Pharo3DarkTheme beCurrent.

Um pouco de pesquisa na Internet me levou a um fórum onde o recurso é citado como um clickable coloured links.

Pharo 6 Clickable coloured links in Welcome Window cited in a forum

Resolvi então pesquisar no código fonte da imagem usando a ferramenta Finder.

Clique no fundo da janela principal para obter o World Menu.

Pharo 6 World Tools Finder menu selected

Pharo 6 Finder Tool Window

Vamos selecionar Source.

Pharo 6 Finder Tool Window Selecting Sources

E digitar Pharo3DarkTheme beCurrent ou Pharo3Theme beCurrent na caixa de edição.

Pharo 6 Finder Tool Window Edit Box with Pharo3Theme beCurrent

E clicar no botão Search.

Pharo 6 Finder Tool Window Pharo3Theme beCurrent search source result

No final do método Welcome encontrei o código procurado.

Pharo 6 Finder Tool Window welcome method

A criação dos clickable coloured links é feita com o método de classe WelcomeHelp class>>#doItFrom:.

Vamos localizar a implementação selecionando a mensagem doItFrom: e usando o menu Code Search….

Pharo 6 doItFrom Text Search for method implementation.png

Pharo 6 Implementors of doItFrom.png

Notamos que o método de classe WelcomeHelp class>>#doItFrom: retorna um Text.

Pharo 6 doItFrom returns Text

E que Text pode ser convertido em um Morph que é o retorno da mensagem asMorph.

Pharo 6 doItFrom Text return as Morph

Então construimos o código para abrir um morph e mostrar o texto Date today inspect como um clickable coloured link.

Pharo 6 Playground with clickable coloured link demo code

Usamos o botão Remote publish para compartilhar o código na Internet.

Pharo 6 Playground with clickable coloured link demo code published

Executar o script mostra um morph com o clickable coloured link e ao clicar no link a expressão Date today inspect é avaliada com Do it mostrando um Inspector para o retorno.

Pharo 6 clickable coloured link morph

Pharo 6 Date today inspect from a clickable coloured link

Bem… mistério solucionado!

Ao mesmo tempo várias ferramentas de investigação foram mostradas.

porkey

[Atualização] Descobri por acaso que inspecionar (Inspect it) a expressão, por exemplo, WelcomeHelp doItFrom: ‘Pharo3Theme beCurrent mostra no Inspector o clickable link de forma funcional.

Pharo 6 Functional Clickable Link on Inspector

Clique no link mostrado no Inspector e verá o efeito de mudar o tema.

Faça o mesmo no link do exemplo anterior com Date today inspect aparecendo como link no Inspector.

ProfStef: Sintaxe da mensagem: mensagens com palavras chaves

pharo

Tutorial do Pharo.

Abra o tutorial em português do ProfStef na lição Sintaxe da mensagem: mensagens com palavras chaves.

pharo6-pharo-tutorials-submenu

pharotut-keyword-messages-lesson

Mensagens com palavras chaves (keyboard messages) são estruturadas como <objeto receptor> <palavra-chave1>: <argumento2> <palavra-chave2>: <argumento2> … podendo ter um número arbitrário de argumentos acima de zero.

Por exemplo: Color r:1 g:0 b:0 é uma mensagem com 3 argumentos. E representa a cor vermelha.

pharotut-keyword-messages-color-rgb-inspect.png

Inspecione as várias expressões para apreender detalhes sobre os retornos das expressões.

Voltar à página do tutorial.

ProfStef: Sintaxe da mensagem: mensagens binárias

pharo

Tutorial do Pharo.

Abra o tutorial em português do ProfStef na lição Sintaxe da mensagem: mensagens binárias.

pharo6-pharo-tutorials-submenu

pharotut-binary-messages-lesson.png

Mensagens binárias (unary messages) são estruturadas como <objeto receptor> <operador> <argumento>. Por exemplo: 2 + 3. Há um único argumento. No caso podemos dizer aproximadamente que o objeto 2 recebe a mensagem + com o argumento 3.

Nota:

O operador  pode ser um ou uma combinação de mais de um dos símbolos:

+ – / \ * ~ < > = @ % | & ?

false ==> true é um exemplo válido e que está implementado. Experimente (Você sempre pode escrever num Playground ou inserir no próprio texto da lição).

pharotut-binary-messages-lesson-plus-false-implies-true-expression

A expressão Date today < Date yesterday usa uma combinação de mensagens unárias (Date today e Date yesterday) com uma mensagem binária (<). As mensagens unárias são avaliadas antes da mensagem binária, como veremos na lição sobre precedência. Considerando que o que está entre parênteses é avaliado primeiro seria como em (Date today) < (Date yesterday), uso de parênteses que também veremos na lição sobre precedência.

Inspecione as várias expressões para apreender detalhes sobre os retornos das expressões.

Voltar à página do tutorial.