'From Pharo6.0 of 13 May 2016 [Latest update: #60520] on 17 November 2017 at 5:56:17.650488 pm'! AbstractTutorial subclass: #PharoSyntaxTutorialBR instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'ProfStef-Core'! !PharoSyntaxTutorialBR commentStamp: 'FranciscoAryMartins 6/5/2017 19:58' prior: 0! Tutorial em português para aprender a sintaxe do Pharo .! !PharoSyntaxTutorialBR methodsFor: 'tutorial' stamp: 'FranciscoAryMartins 6/5/2017 19:21'! tutorial ^ #( welcome doingVSPrinting printing inspecting basicTypesNumbers basicTypesCharacters basicTypesString basicTypesSymbol basicTypesArray basicTypesDynamicArray messageSyntaxUnary messageSyntaxBinary messageSyntaxKeyword messageSyntaxExecutionOrder messageSyntaxExecutionOrderParentheses mathematicalPrecedence messageSyntaxCascade messageSyntaxCascadeShouldNotBeHere blocks blocksAssignation conditionals loops iterators instantiation reflection reflectionContinued pharoEnvironment debugger theEnd )! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 17:55'! blocksAssignation ^ Lesson title: 'Atribuição de blocos' lesson: '"Blocos podem ser atribuidos a uma variável e então executados mais tarde. Note que |b| é uma declaração de uma variável de nome ''b'' e que '':='' atribui um valor à variável. Selecione (highlight) as três linhas e então Print It:" |b| b := [:x | x+2]. b value: 12. ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/9/2017 06:12'! messageSyntaxUnary ^ Lesson title: 'Sintaxe da mensagem: mensagens unárias (Unary messages)' lesson: '"Mensagens são enviadas ao objetos. Há três tipos de mensagen: Unária, Binária e com Palavras Chaves (Unary, Binary e Keyword). Mensagens do tipo Unary têm a seguinte forma: anObject aMessage Você já enviou mensagens do tipo unária (unary). Por exemplo:" 1 class. false not. Time now. Date today. Float pi. "E, é claro: " ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:52'! basicTypesString ^ Lesson title: 'Tipos básicos: Strings' lesson: '"Uma String é uma coleção de caracteres. Use plica (single quotes) para criar um objeto String. Imprima estas expressões:" ''ProfStef''. ''ProfStef'' size. ''abc'' asUppercase. ''Hello World'' reverse. "Você pode ter acesso a cada caractere usando a mensagem at:" ''ProfStef'' at: 1. "Concatenação de String usa o operador vírgula (the comma operator):" ''ProfStef'', '' is cool''. ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:57'! messageSyntaxKeyword ^ Lesson title: 'Sintaxe da mensagem: mensagens com palavras chaves (Keyword messages)' lesson: '"Mensagens com palavras chave (Keyword Messages) são mensagens com argumentos. Elas têm a seguinte forma: anObject akey: anotherObject akey2: anotherObject2" 4 between: 0 and: 10. "A mensagem é between:and: enviada ao Number 4" 1 max: 3. Color r:1 g:0 b:0. "A mensagem é r:g:b: implementada na classe Color. Note que você também pode escrever" Color r:1 g:1 b:0. ProfStef perform: #next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/20/2017 07:11'! inspecting ^ Lesson title: 'Inspecionando' lesson: '"Agora você é um mestre do Do It e Print It !! Vamos falar sobre inspecionar. É um Do It que abre um Inspector para o resultado da avaliação de uma expressão que você selecionou. O Inspector é uma ferramenta que permite que você olhe dentro de um objeto. Por exemplo, selecione o texto abaixo, abra o menu e clique em ''inspect it (i)'':" 1 / 2. "Você viu a letra ''i'' entre parênteses logo após ''inspect it'' ? Ela indica o atalho ALT- (ou CMD- ou CTRL-) para executar este comando. Tente ALT-i (ou CMD-i ou CTRL-i) nas seguintes expressões:" DateAndTime today. Float pi. SystemVersion current. ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 11/17/2017 17:48'! reflectionContinued ^ Lesson title: 'Continuando reflexão' lesson: '"Então, legal, não é? Antes de ir mais longe, vamos remover esse método:" ProfStef respondsTo: #goToNextLesson. ProfStef class removeSelector: #goToNextLesson. ProfStef respondsTo: #goToNextLesson. "Então, avance:" ProfStef default executeMethod: (ProfStef lookupSelector:#next).'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:15'! theEnd ^ Lesson title: 'Tutorial feito!!' lesson: '"Este tutorial está terminado. Desfrute da programação com o Pharo. Não se esqueça de ler ''Pharo By Example'' encontrado aqui: http://pharobyexample.org/ Você pode executar este tutorial novamente avaliando: " ProfStef goOn: PharoSyntaxTutorialBR. "Você quer criar seu próprio tutorial interativo com ProfStef? Isso é muito fácil!! Como? Existe um tutorial interativo ProfStef para isso :D Apenas avalie o seguinte código: " ProfStef goOn: HowToMakeYourOwnTutorial. "Vejo você em breve !!" '! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 11/17/2017 17:43'! iterators ^ Lesson title: 'Iteradores' lesson: '"A mensagem do: é enviada a uma coleção de objetos (Array, Set, OrderedCollection), avaliando o bloco para cada elemento. Aqui nós queremos imprimir todos os números no Transcript (um console)" #(11 38 3 -2 10) do: [:each | Transcript show: each printString; cr]. "Alguns outros iteradores muito bons" #(11 38 3 -2 10) collect: [:each | each abs]. #(11 38 3 -2 10) collect: [:each | each odd]. #(11 38 3 -2 10) select: [:each | each odd]. #(11 38 3 -2 10) select: [:each | each > 10]. #(11 38 3 -2 10) reject: [:each | each > 10]. #(11 38 3 -2 10) do: [:each | Transcript show: each printString] separatedBy: [Transcript show: ''.'']. ProfStef allInstances do: [:aPharoTutorial | aPharoTutorial next].'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:56'! messageSyntaxCascade ^ Lesson title: 'Sintaxe da mensagem: Cascata' lesson: '"; é o operador de cascata (cascade operator). Isto é útil para enviar mensagem ao MESMO receptor Abra um Transcript (console):" Transcript open. "Então" Transcript show: ''hello''. Transcript show: ''Pharo''. Transcript cr. "é equivalente a:" Transcript show: ''hello''; show: ''Pharo'' ; cr. "Tente ir para a próxima lição com uma cascata de duas mensagens ''next'':" ProfStef'.! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:57'! messageSyntaxExecutionOrder ^ Lesson title: 'Sintaxe da mensagem: ordem de execução' lesson: '"Mensagens unárias (Unary messages) são executadas primeiro, então mensagens binárias (binary messages) e finalmente mensagens com palavras chave (keyword messages): Unary > Binary > Keywords" 2 + 3 squared. 2 raisedTo: 3 + 2. (0@0) class. 0@0 corner: 100@200. (0@0 corner: 100@200) class. "Entre mensagens com precedência similar, as expressões são executadas da esquerda para a direita" -3 abs negated reciprocal. ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:53'! basicTypesSymbol ^ Lesson title: 'Tipos básicos: Symbols' lesson: '"Um Symbol é uma String que é globalmente única. Há um e somente um Symbol #ProfStef. Pode haver vários objetos String ''ProfStef''. (A mensagem == retorna true se dois objetos são o MESMO)" ''ProfStef'' asSymbol. #ProfStef asString. (2 asString) == (2 asString). (2 asString) asSymbol == (2 asString) asSymbol. (Smalltalk globals at: #ProfStef) next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/20/2017 07:12'! messageSyntaxExecutionOrderParentheses ^ Lesson title: 'Sintaxe da mensagem: Parênteses' lesson: '"Use parênteses para mudar a ordem de avaliação" (2 + 3) squared. (2 raisedTo: 3) + 2. (0@0 extent: 100@200) bottomRight. ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 17:21'! blocks ^ Lesson title: 'Blocos' lesson: '"Cascata é maneira !! Vamos falar sobre blocos. Blocos são métodos anônimos que podem ser armazenados em variáveis e executados sob demanda (on demand). Blocos são delimitados por colchetes (square brackets): []" [Workspace open]. "não abre um Browser porque o bloco não é executado. Aqui está um bloco que adiciona 2 ao seu argumento (o seu argumento é nomeado como x):" [:x | x+2]. "Nós podemos executar um bloco enviando a ele mensagens value (value messages)." [:x | x+2] value: 5. [Workspace open] value. [:x | x+2] value: 10. [:x :y| x + y] value:3 value:5. [ProfStef next] value.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:55'! messageSyntaxBinary ^ Lesson title: 'Sintaxe da mensagem: mensagens binárias' lesson: '"Mensagens binárias (binary messages) têm a seguinte forma: anObject + anotherObject" 3 * 2. Date today + 3 weeks. false | false. true & true. true & false. 10 @ 100. 10 <= 12. ''ab'', ''cd''. Date today < Date yesterday. ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 11/17/2017 17:34'! conditionals ^ Lesson title: 'Condicionais' lesson: '"Condicionais nada mais são que mensagens enviadas a objetos Boolean" 1 < 2 ifTrue: [100] ifFalse: [42]. "Aqui a mensagem é ifTrue:ifFalse Tente isto:" Transcript open. 3 > 10 ifTrue: [Transcript show: ''Tavez haja um bug ...''] ifFalse: [Transcript show: ''Não: 3 é menor que 10'']. 3 = 3 ifTrue: [ProfStef next].'.! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 11/17/2017 17:41'! instantiation ^ Lesson title: 'Instanciação' lesson: '"Objetos são instâncias de suas classe. Geralmente, enviamos a mensagem #new para uma classe para criar uma instância desta classe. A mensagem #allInstances enviada para uma classe responde com um Array com todas as instâncias desta classe. Por exemplo, vamos ver quantas instâncias de SimpleButtonMorph existem: " SimpleButtonMorph allInstances size. "Agora crie uma nova instância dele:" SimpleButtonMorph new label: ''Um botão simpático''; openCenteredInWorld. "Vê o botão no centro da janela? A lista de todas as instâncias deve conter mais uma instância:" SimpleButtonMorph allInstances size. "Vamos nos divertir com ele:" SimpleButtonMorph allInstances last label: ''ProfStef é legaaal !!''; color: Color cyan. "Vamos excluí-lo e pedir ao sistema para limpar a memória:" SimpleButtonMorph allInstances last delete. Smalltalk garbageCollect. SimpleButtonMorph allInstances size. "Clique no botão para ir para a próxima lição (Selecione e Do it):" SimpleButtonMorph new label: ''Vá para a próxima lição''; target: [ProfStef next. SimpleButtonMorph allInstances last delete]; actionSelector: #value; openCenteredInWorld.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:54'! mathematicalPrecedence ^ Lesson title: 'Precedência matemática' lesson: '"As regras de precedência tradicionais da matemática não se aplicam em Pharo." 2 * 10 + 2. "Aqui a mensagem * é enviada ao 2, cuja resposta é 20, então 20 recebe a mensagem + Lembre-se que todas as mensagens sempre seguem uma regra de precedência simples da esquerda para a diretita, sem exceções." 2 + 2 * 10. 2 + (2 * 10). 8 - 5 / 2. (8 - 5) / 2. 8 - (5 / 2). ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 19:16'! reflection ^ Lesson title: 'Reflexão' lesson: '"Você pode inspecionar e alterar o sistema em tempo de execução. Dê uma olhada no método #ifFalse: ifTrue: código fonte da classe True (Print it):" (True>>#ifFalse:ifTrue:) definition. "Ou apenas o comentário:" (True>>#ifFalse:ifTrue:) comment. "Aqui estão todos os métodos que implemento:" ProfStef selectors. "Vamos criar um novo método para ir para a próxima lição:" ProfStef class compile:''goToNextLesson self next''. "Uau!! Não posso esperar para usar meu novo método!!" ProfStef goToNextLesson.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 16:55'! welcome ^ Lesson title: 'Bem-vindo' lesson: '"Olá!! Eu sou o Professor Stef. Você deve querer que eu o ajude a aprender Pharo. Então vamos à primeira lição. Selecione o texto abaixo, clique com o botão direito e selecione ''do it (d)''" ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:50'! basicTypesArray ^ Lesson title: 'Tipos básicos: Array' lesson: '"Arrays literais são criados em tempo de compilação (parse time):" #(1 2 3). #( 1 2 3 #(4 5 6)) size. #(1 2 4) isEmpty. #(1 2 3) first. #(''hello'' ''World'') at: 2 put: ''Pharo''; yourself. ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 19:37'! pharoEnvironment ^ Lesson title: 'Ambiente do Pharo' lesson: '"Pharo está repleto de objetos. Existem janelas, texto, números, datas, cores, pontos e muito mais. Você pode interagir com objetos de uma maneira muito mais direta do que é possível com outras linguagens de programação. Todo objeto entende a mensagem ''explore''. Como resultado, você obtém uma janela do Explorer que mostra detalhes sobre o objeto." Date today explore. "Isso mostra que o objeto da data (date object) consiste em um ponto no tempo (start) e uma duration (um dia de duração)". ProfStef explore. "Como você pode ver, a classe ProfStef tem muitos objetos. Vamos dar uma olhada no meu código:" ProfStef browse. ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 16:47'! messageSyntaxCascadeShouldNotBeHere ^ Lesson title: 'Perdido ?' lesson: '"Ei, yvocê não deveria estar aqui !!!! Volte é use uma cascata !!" ProfStef previous.'.! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:51'! basicTypesCharacters ^ Lesson title: 'Tipos básicos: Characters' lesson: '"Um Character pode ser instanciado usando o operador $:" $A. $A class. $B charCode. Character cr. Character space. "Você pode imprimir todos os 256 caracteres do conjunto estendido do ASCII:" Character allByteCharacters. ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:52'! basicTypesNumbers ^ Lesson title: 'Tipos básicos: Numbers' lesson: '"Você agora conhece como executar códigos no Pharo. Agora vamos falar sobre objetos básicos. 1, 2, 100, 2/3 ... são Numbers, e respondem a muitas mensagens avaliando expressões matemáticas. Avalie as seguintes:" 2. 20 factorial. 1000 factorial / 999 factorial. (1/3). (1/3) + (4/5). (1/3) asFloat. 1 class. 1 class maxVal class. (1 class maxVal + 1) class. ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 11/17/2017 17:52'! debugger ^ Lesson title: 'Depurador (Debugger)' lesson: '"O Debugger pode ser a ferramenta mais famosa dos ambientes Smalltalk. Ele será aberto assim que ocorrer uma Exception não gerenciada. O código a seguir irá abrir o debugger na pilha de mensagens, selecione PharoSyntaxTutorialBR>>divideTwoByZero e Print it". PharoSyntaxTutorialBR new divideTwoByZero. ProfStef next'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:53'! doingVSPrinting ^ Lesson title: 'Do it' lesson: '"Maneiro !! (Eu gosto de dizer maneeeeiro :) ). Você acaba de executar uma expressão no Pharo. Mais precisamente, você enviou a mensagem ''next'' à classe ProfStef ( sou eu !!). Note que você pode executar este tutorial outra vez avaliando: ''ProfStef goOn: PharoSyntaxTutorialBR''. ''ProfStef previous'' volta para a lição anterior. Você pode também acionar Do It usando o atalho de teclado ''ALT d'' (isto varia de acordo com o seu sistema operacional/computador: pode ser ''CMD d'' ou ''CTRL d''). Tente avaliar as seguintes expressões:" Workspace open. SmalltalkImage current aboutThisSystem. "Então vá para a próxima lição:" ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/8/2017 20:51'! basicTypesDynamicArray ^ Lesson title: 'Tipos básicos: Dynamic Array' lesson: '"Arrays dinâmicos são criados em tempo de execução (execution time):" { (2+3) . (6*6) }. { (2+3) . (6*6) . ''hello'', '' Stef''} size. { ProfStef } first next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 6/20/2017 07:13'! printing ^ Lesson title: 'Print it' lesson: '"Agora você é o mestre do Do It !! Vamos falar sobre imprimir. É um Do It que imprime o resultado logo depois da expressão que você selecionou. Por exemplo, selecione o texto abaixo, abra o menu e clique em ''print it (p)'':" 1 + 2. "Você verá a letra ''p'' entre parênteses logo após ''print it'' ? Isto indica o atalho ALT- (ou CMD- ou CTRL-) para executar este comando. Tente ALT-p (ou CMD-p ou CTRL-p) nas seguinte expressões:" Date today. Time now. "O resultado aparece selecionado, então você pode apagá-lo usando a tecla backspace. Tente !!" SmalltalkImage current datedVersion. ProfStef next.'! ! !PharoSyntaxTutorialBR methodsFor: 'lessons' stamp: 'FranciscoAryMartins 11/17/2017 17:44'! loops ^ Lesson title: 'Laços (Loops)' lesson: '"Laços (Loops) são iteradores de coleção de alto nível, implementados como métodos regulares." "Loops básicos: to:do: to:by:do" 1 to: 100 do: [:i | Transcript show: i asString; cr ]. 1 to: 100 by: 3 do: [:i | Transcript show: i asString; cr]. 100 to: 0 by: -2 do: [:i | Transcript show: i asString; cr]. 1 to: 1 do: [:i | ProfStef next].'! ! !PharoSyntaxTutorialBR methodsFor: 'interactive' stamp: 'FranciscoAryMartins 6/20/2017 11:28'! divideTwoByZero 2/0. "Oups!! 2/0 levanta uma exceção ZeroDivide. Portanto, o depurador abre para permitir que você conserte o código. - Remova a linha de código acima. - Clique com o botão direito do mouse e selecione ‘Accept’ para compilar a nova versão do método - clique no botão ‘Proceed’ para continuar a execução. ". ProfStef next.! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! PharoSyntaxTutorialBR class instanceVariableNames: ''! !PharoSyntaxTutorialBR class methodsFor: 'world menu' stamp: 'FranciscoAryMartins 6/18/2017 08:46'! menuCommandOn: aBuilder (aBuilder item: #'Tutorial de sintaxe do Pharo') parent: #Help; order: 5.0; action: [ self openPharoTutorialBR ]; icon: ((self iconNamed: #pharoIcon) scaledToSize: 16@16) ! ! !PharoSyntaxTutorialBR class methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 6/18/2017 08:43'! openPharoTutorialBR ProfStef goOn: PharoSyntaxTutorialBR! !