Introdução à programação em Ruby

  • Published on
    19-Jul-2015

  • View
    97

  • Download
    3

Embed Size (px)

Transcript

<ul><li><p>Quem sou eu?</p><p>Daniel Coelho de Andrade</p><p>Graduando em Engenharia de Computao - UEFS</p><p>Membro da Empresa Jnior de Engenharia de Computao da UEFS</p></li><li><p>Ruby?</p><p> Linguagem dinmica Foco na simplicidade e produtividade Leitura natural Multiparadigma e propsito geral Scripts Interpretada</p></li><li><p>Um pouco de histria...</p><p> Criador: Yukihiro Matsumoto - Matz</p><p> Primeira verso estvel: 1996</p><p> Verso atual (estvel): 2.2.0</p></li><li><p>Ruby is simple in appearance, but is very complex inside, just like the human body Matz</p></li><li><p>...mais uma linguagem?</p><p> Matz queria uma linguagem que... Fosse mais poderosa que o Pearl Mais orientada a objetos que Python Simples como o Lisp</p></li><li><p>Por que aprender Ruby?</p></li><li><p> codeeval.com - 2014</p></li><li><p>Mas Ruby lento...</p></li><li><p> Fonte: programmingzen.com/?s=benchmark</p></li><li><p> Fonte: bjpelc.wordpress.com</p></li><li><p>Est melhorando muito!</p></li><li><p>Quero saber quem que usa isso a</p></li><li><p>Esse so s alguns...</p></li><li><p>Ento...</p></li><li><p>Porque programar em Ruby? Fcil leitura Foco na simplicidade e produtividade Comunidade Desenvolvimento gil (Framework Rails) Sempre tem mais de um jeito de fazer a </p><p>mesma coisa divertido :)</p></li><li><p>Alm disso...</p></li><li><p>Interactive Ruby Shell</p></li><li><p>RubyGems</p></li><li><p>#gem install sqlite3</p></li><li><p>S mais uma coisa...</p></li><li><p>Ruby is evil</p></li><li><p>O Ruby mal. Muito mal. Mas por que to mal? Porque to bonito. A sintaxe to elegante, tudo objeto, tudo faz sentido. O jeito Ruby de fazer as coisas to atraente...</p><p>Simon Eskildsen</p><p>Responsvel pela infraestrutura do Shopify</p></li><li><p>Sim, t falando demais</p></li><li><p>Ok, chega. Vamos programar!</p></li><li><p>Mas espera, como instala isso a?</p></li><li><p>No Windows</p><p> Faa o download do executvel em http://rubyinstaller.org/</p><p> Instale</p></li><li><p>No Linux</p><p> Distribuies baseadas no Red Hat sudo yum install ruby irb rubygems</p><p> Distribuies baseadas no Debian sudo apt-get install ruby irb rubygems</p></li><li><p>O que vamos usar para programar em Ruby?</p></li><li><p>Ferramentas</p><p> IRB</p><p> Terminal</p><p> Um editor de texto</p></li><li><p>Como abro o IRB?</p></li><li><p>Fcil!</p><p> Abra o Terminal(ctrl+alt+t)</p><p> Digite irb</p></li><li><p>Tradies...</p></li><li><p>No IRB...</p><p>puts Hello, World!print Hello, World!p Hello, World!</p></li><li><p>Comentrios</p></li><li><p>Variveis</p></li><li><p>No precisa declar-las</p></li><li><p>O Ruby dinmico!</p></li><li><p>No entendi o 'dinmico'...</p></li><li><p>Vamos entender na a prtica ento</p></li><li><p>No IRB...</p></li><li><p>E se eu quiser imprimir uma varivel junto a um texto?</p></li><li><p>Simples, s interpolar</p></li><li><p>Exemplo</p><p>numero = 42puts Eu escolhi o nmero #{numero}</p></li><li><p>Sua vez</p><p>Escolha um nmero qualquer, atribua ele a uma varivel e imprima a mensagem O </p><p>nmero (seu nmero) foi escolhido por mim</p></li><li><p>nil?</p></li><li><p>Convenes</p><p> CONSTANTE</p><p> variavelComMaisDeUmNome</p></li><li><p>Vamos para algo um pouco mais interessante...</p></li><li><p> Strings</p></li><li><p>Strings</p><p> Array de sequncia de bytes</p><p> String diferente de 'String'</p><p> a uma String No existem caracteres</p></li><li><p>Lidando com Strings</p><p> nome.upcase nome.downcase nome.capitalize nome.swapcase nome.reverse Vrios outros...</p></li><li><p>Sim, parnteses so opcionais!</p></li><li><p>Voltando...</p></li><li><p>Transformando Strings</p></li><li><p>Strings so mutveis</p></li><li><p>Sempre existe mais de um jeito de fazer a mesma coisa</p></li><li><p>Jeito comum</p><p>nome=nome.capitalize</p></li><li><p>Jeito Ruby</p><p>nome.capitalize!</p></li><li><p>O ! funciona pra qualquer mtodo?</p></li><li><p>Como leio dados do teclado?</p></li><li><p>Fcil!</p><p> gets</p><p> gets.chomp</p></li><li><p>T ficando chato fazer isso no Shell...</p></li><li><p>Como crio arquivos executveis em Ruby?</p></li><li><p>Criando, Editando e Executando</p><p> Arquivo de texto com extenso .rb</p><p> ruby seuarquivo.rb</p></li><li><p>Para fixar o conhecimento...</p><p>Faa um programa que leia uma string e imprima essa string ao contrrio.</p></li><li><p>Fluxo de Controle</p></li><li><p>Comparando com C e Java...</p><p> else if = elsif</p><p> Sem chaves obrigatrias</p><p> O bloco finalizado com a palavra end</p></li><li><p>Operadores lgicos</p><p> || ou or = ou</p><p> and ou &amp;&amp; = e</p><p> not = negao</p></li><li><p>Exemplo</p></li><li><p>Escrito de outro jeito...</p></li><li><p>Compactando</p></li><li><p>Exerccio para fixar a sintaxe :)</p></li><li><p>Um programa que l uma string digitada pelo usurio e substitui todas letras a por um -</p><p>Alguma sugesto de como fazer?</p></li><li><p>Vamos tentar de novo...</p></li><li><p>gsub(a, b)include?()</p></li><li><p>Agora sim!</p><p>Um programa que l uma string digitada pelo usurio e substitui todas letras a por um -</p></li><li><p>Loops e Iteradores</p></li><li><p>While</p></li><li><p>x++? no</p></li><li><p>x+=1</p></li><li><p>For</p></li><li><p>1..5? Intervalos! 1..5 = 1,2,3,4,5 1...5 = 1,2,3,4</p><p> Tambm funciona com letras!</p></li><li><p>Jeito Ruby de fazer as coisas...</p></li><li><p>Until</p></li><li><p>.times</p></li><li><p>.upto</p></li><li><p>.downto</p></li><li><p>Antes de falarmos sobre Iteradores...</p></li><li><p>Arrays</p></li><li><p>Instanciando</p><p> array = []</p><p> array = Array.new</p><p> array=Array.new(tamanho)</p><p> array=Array.new(tamanho, elemento)</p></li><li><p>Acessando os elementos</p><p> Index [x] Intervalos [x..y] ou [x...y] array.first array.last array.take(n) array.length array.include?</p></li><li><p>Adicionando elementos</p><p> array.push(dado) array </p></li><li><p>Removendo elementos</p><p> array.delete array.delete_at(posicao) array.pop</p></li><li><p>Soma e Subtrao</p></li><li><p>E lista?</p></li><li><p>Lista == Array</p></li><li><p>Agora sim, Iterando em Arrays</p></li><li><p>Each</p><p>array.each{|variavel| comandos}</p><p>array.each do |variavel|comandos</p><p>end</p></li><li><p>Ou..</p></li><li><p>Quer dizer que Ruby aceita blocos de comando como parmetro?</p></li><li><p>Qual a diferena entre o uso das chaves e do 'do...end'?</p></li><li><p> Selecionando itens do Array</p></li><li><p>O problema</p><p>Eu tenho um array de strings e quero imprimir somente as strings que comeam com vogais, </p><p>como fao?</p></li><li><p>Alguma ideia?</p></li><li><p>A soluo</p><p>string.selectarray.include?</p></li><li><p>Definindo suas funes</p></li><li><p>Corpo de uma funo em Ruby</p></li><li><p>Detalhes...</p></li><li><p>Em Ruby, toda funo retorna um valor</p></li><li><p>Voltando um pouco...</p></li><li><p>Sim, mas o que esse nil?</p></li><li><p>Qual o retorno desse mtodo?</p></li><li><p>Retorno explcito</p></li><li><p>Retorno implcito</p></li><li><p>Convenes</p><p> Se a funo retorna true/false, termina em ?</p><p> Se o a funo tiver nome composto, separa-os por _</p></li><li><p>Exemplos</p><p> e_par? e_impar? mais_uma_funcao</p></li><li><p>Como aquela coisa de passar blocos como parmetro?</p></li><li><p>yield</p></li><li><p>Qual a sada desse cdigo?</p></li><li><p>Pra fixar o conhecimento...</p><p> Faa uma funo que aceite um array como parmetro e, quando dado um bloco, imprima cada um dos elementos do array.</p><p>Dicas: Para passar um array como parmetro usa um * antes do nome da varivel. Para verificar se foi </p><p>passado um bloco como parmetro, use a funo block_given?</p></li><li><p>Perguntas?</p></li><li><p>Prximos tpicos</p><p> POO com Ruby</p><p> Metaprogramao</p><p> Rails</p></li><li><p>Iniciando com o bsico...</p></li><li><p>Definindo uma classe</p></li><li><p>Instanciando uma Classe</p></li><li><p>Observaes Nome de classe inicia sempre com letra </p><p>mauscula</p><p> ClasseComMaisDeUmNome</p></li><li><p>Antes de continuar vamos ver algumas coisas...</p></li><li><p>Tudo objeto</p></li><li><p>At as classes so objetos!</p></li><li><p>As classes so abertas</p></li><li><p>Classes abertas???</p></li><li><p>Vamos mostrar isso na prtica :)</p></li><li><p>Redefinindo a Classe Class</p><p>Live Coding</p></li><li><p>Isso chamado de Metaprogramao</p></li><li><p>Se tudo objeto, o que acontece numa expresso do tipo x = 2+2?</p></li><li><p>x= 2+ 2</p></li><li><p>x= 2+ 2</p><p>Chamada de mtodo 1</p><p>Chamada de mtodo 2</p></li><li><p>x= 2+ 2</p><p>Parmetro do mtodo 1</p><p>Parmetro do mtodo 2</p></li><li><p>Lembra? Parnteses so opcionais!</p></li><li><p>Rearranjando...</p></li><li><p>x=(2+(2))</p></li><li><p>x=(4)</p></li><li><p>Mas como assim '+' e '=' so mtodos?</p></li><li><p>Syntax Sugar</p></li><li><p>Poetry Mode</p><p>Fonte: courses.edx.org</p></li><li><p>Como posso ver todos os mtodos dessas classes?</p></li><li><p>ruby-doc.org</p></li><li><p>.methods</p></li><li><p>.respond_to?(:nomeDoMetodo)</p></li><li><p>Nveis de acesso das variveis</p></li><li><p> $var -&gt; Varivel global</p><p> @var -&gt; Varivel de instncia (atributo)</p><p> @@var -&gt; Varivel de classe</p></li><li><p>Todos os atributos so privados</p></li><li><p>Mtodos</p></li><li><p> So pblicos por padro</p><p> So divididos em sees de visibilidade</p><p> Ruby no suporta sobrecarga de mtodos</p></li><li><p>Parmetros opcionais</p></li><li><p>Chamada sem parmetro</p><p>Chamada com parmetro</p></li><li><p>Mtodos de Classe</p><p>Definindo</p><p>Acessando</p></li><li><p>Convenes sobre mtodos</p><p> metodo_com_mais_de_um_nome</p><p> Atribuicao=</p><p> retorno_booleano?</p></li><li><p>Construindo uma classe simples</p></li><li><p>Atribuio Condicional</p></li><li><p>Como voc faria os mtodos para alterar o endereco de uma pessoa?</p></li><li><p>Jeito Ruby</p></li><li><p>Cdigo gerado na classe</p></li><li><p>E se eu quiser s ler ou alterar o atributo?</p></li><li><p>Equivale a</p></li><li><p>Exerccio para fixar a sintaxe</p></li><li><p> Classe Telefone(numero:String, crdito:inteiro) Mtodos</p><p> Ligar(nmero:String) [Desconta 5 crditos por ligao)</p><p> Adicionar crditos Total de Telefones [Retorna o total de telefones]</p><p> Obs: Se no for passado um valor, os crditos iniciam em quantidade igual a 50.</p><p> Obs: A ligao s pode ser feita se os crditos forem suficientes</p></li><li><p>Ok. Como fao uma classe herdar de outra?</p></li><li><p>Observaes sobre Herana</p><p> Ruby no suporta herana mltipla</p><p> Simula herana mltipla por mixins</p></li><li><p>Antes do mixin propriamente dito...</p></li><li><p>Modules</p><p>Maneira de agrupar mtodos, variveis e constantes</p></li><li><p>Include vs Require</p></li><li><p>Mixin o resultado da incluso de um module em uma classe.</p></li><li><p>Como importo classes em outros arquivos .rb?</p></li><li><p>require_relative caminho/para/arquivo</p></li><li><p>Outro exerccio</p><p> Crie um Module chamado Motor e uma classe chamada Veculo. Em module, defina os mtodos Ligar e Desligar, que devem imprimir Motor ligado e Motor ligado, respectivamente. Faa um mixin com a classe Veiculo e o Module Motor.</p></li><li><p>Mais metaprogramao!</p></li><li><p>Criando mtodos que criam mtodos</p><p>Temos uma classe professor e temos uma classe aluno. Como fazemos para o professor </p><p>ensinar ao aluno a escrever?</p></li><li><p>Primeiro passo: Classe Aluno</p></li><li><p>Segundo passo: Classe Professor</p></li><li><p>Terceiro passo: Classe Aula</p></li><li><p>Fonte do Exerccio: Caelum</p></li><li><p>Exerccio</p><p>Crie uma classe Superman e uma classe Pessoa. Faa com que Superman ensina uma </p><p>pessoa a voar numa Aula. Superman, Pessoa e Aula devem estar em arquivos separados.</p></li><li><p>Desvantagens do Ruby</p></li><li><p> Ainda considerado lento</p><p> Pouco material disponvel comercialmente</p><p> Codificao nica</p></li><li><p>Com Ruby, evite:</p><p> Aplicaes com processamento tempo real</p><p> Aplicaes que exigem muito processamento</p></li><li><p>Perguntas?</p></li><li><p>Onde encontrar mais:</p><p> Ruby-lang.org Manual Ruby TAC Sirupsen.com Simon Eskildsen Akita On Rails Fbio Akita Caelum</p></li><li><p>Isso tudo, Obrigado :)</p></li><li><p>Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57Slide 58Slide 59Slide 60Slide 61Slide 62Slide 63Slide 64Slide 65Slide 66Slide 67Slide 68Slide 69Slide 70Slide 71Slide 72Slide 73Slide 74Slide 75Slide 76Slide 77Slide 78Slide 79Slide 80Slide 81Slide 82Slide 83Slide 84Slide 85Slide 86Slide 87Slide 88Slide 89Slide 90Slide 91Slide 92Slide 93Slide 94Slide 95Slide 96Slide 97Slide 98Slide 99Slide 100Slide 101Slide 102Slide 103Slide 104Slide 105Slide 106Slide 107Slide 108Slide 109Slide 110Slide 111Slide 112Slide 113Slide 114Slide 115Slide 116Slide 117Slide 118Slide 119Slide 120Slide 121Slide 122Slide 123Slide 124Slide 125Slide 126Slide 127Slide 128Slide 129Slide 130Slide 131Slide 132Slide 133Slide 134Slide 135Slide 136Slide 137Slide 138Slide 139Slide 140Slide 141Slide 142Slide 143Slide 144Slide 145Slide 146Slide 147Slide 148Slide 149Slide 150Slide 151Slide 152Slide 153Slide 154Slide 155Slide 156Slide 159Slide 160Slide 161Slide 162Slide 163Slide 164Slide 165Slide 166Slide 167Slide 168Slide 169Slide 170Slide 171Slide 172Slide 173Slide 174Slide 175Slide 176Slide 177Slide 178Slide 179Slide 180Slide 181Slide 182Slide 183Slide 184Slide 185Slide 187Slide 188Slide 189Slide 190Slide 191Slide 192Slide 193Slide 194Slide 195Slide 196Slide 197Slide 198Slide 199Slide 200Slide 201Slide 202Slide 203Slide 207Slide 208Slide 209Slide 210Slide 211Slide 212Slide 213Slide 214Slide 215Slide 216Slide 217Slide 218Slide 219Slide 220Slide 221</p></li></ul>