O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Introdução à programação em Ruby

608 visualizações

Publicada em

Introdução à programação em Ruby: Minicurso ministrado na XIV SIECOMP - UEFS

Publicada em: Software
  • Seja o primeiro a comentar

Introdução à programação em Ruby

  1. 1. Quem sou eu? Daniel Coelho de Andrade Graduando em Engenharia de Computação - UEFS Membro da Empresa Júnior de Engenharia de Computação da UEFS
  2. 2. “Ruby”? ● Linguagem dinâmica ● Foco na simplicidade e produtividade ● Leitura natural ● Multiparadigma e propósito geral ● Scripts ● Interpretada
  3. 3. Um pouco de história... ● Criador: Yukihiro Matsumoto - “Matz” ● Primeira versão estável: 1996 ● Versão atual (estável): 2.2.0
  4. 4. “Ruby is simple in appearance, but is very complex inside, just like the human body” – Matz
  5. 5. ...mais uma linguagem? ● Matz queria uma linguagem que... – Fosse mais poderosa que o Pearl – Mais orientada a objetos que Python – Simples como o Lisp
  6. 6. “Por que aprender Ruby?”
  7. 7. codeeval.com - 2014
  8. 8. “Mas Ruby é lento...”
  9. 9. Fonte: programmingzen.com/?s=benchmark
  10. 10. Fonte: bjpelc.wordpress.com
  11. 11. Está melhorando muito!
  12. 12. “Quero saber quem é que usa isso aí”
  13. 13. Esse são só alguns...
  14. 14. Então...
  15. 15. Porque programar em Ruby? ● Fácil leitura ● Foco na simplicidade e produtividade ● Comunidade ● Desenvolvimento Ágil (Framework Rails) ● Sempre tem mais de um jeito de fazer a mesma coisa ● É divertido :)
  16. 16. Além disso...
  17. 17. Interactive Ruby Shell
  18. 18. RubyGems
  19. 19. #gem install sqlite3
  20. 20. Só mais uma coisa...
  21. 21. Ruby is evil
  22. 22. “O Ruby é mal. Muito mal. Mas por que é tão mal? Porque é tão bonito. A sintaxe é tão elegante, tudo é objeto, tudo faz sentido. O jeito Ruby de fazer as coisas é tão atraente...” Simon Eskildsen Responsável pela infraestrutura do Shopify
  23. 23. “Sim, tá falando demais”
  24. 24. Ok, chega. Vamos programar!
  25. 25. “Mas espera, como instala isso aí?”
  26. 26. No Windows ● Faça o download do executável em http://rubyinstaller.org/ ● Instale
  27. 27. No Linux ● Distribuições baseadas no Red Hat – sudo yum install ruby irb rubygems ● Distribuições baseadas no Debian – sudo apt-get install ruby irb rubygems
  28. 28. “O que vamos usar para programar em Ruby?”
  29. 29. Ferramentas ● IRB ● Terminal ● Um editor de texto
  30. 30. “Como abro o IRB?”
  31. 31. Fácil! ● Abra o Terminal(ctrl+alt+t) ● Digite irb
  32. 32. Tradições...
  33. 33. No IRB... puts “Hello, World!” print “Hello, World!” p “Hello, World!”
  34. 34. Comentários
  35. 35. Variáveis
  36. 36. Não precisa declará-las
  37. 37. O Ruby é dinâmico!
  38. 38. “Não entendi o 'dinâmico'...”
  39. 39. Vamos entender na a prática então
  40. 40. No IRB...
  41. 41. “E se eu quiser imprimir uma variável junto a um texto?”
  42. 42. Simples, é só interpolar
  43. 43. Exemplo numero = 42 puts “Eu escolhi o número #{numero}”
  44. 44. Sua vez Escolha um número qualquer, atribua ele a uma variável e imprima a mensagem “O número (seu número) foi escolhido por mim”
  45. 45. “nil?”
  46. 46. Convenções ● CONSTANTE ● variavelComMaisDeUmNome
  47. 47. Vamos para algo um pouco mais interessante...
  48. 48. Strings
  49. 49. Strings ● Array de sequência de bytes ● “String” é diferente de 'String' ● “a” é uma String – Não existem caracteres
  50. 50. Lidando com Strings ● nome.upcase ● nome.downcase ● nome.capitalize ● nome.swapcase ● nome.reverse ● Vários outros...
  51. 51. Sim, parênteses são opcionais!
  52. 52. Voltando...
  53. 53. Transformando Strings
  54. 54. Strings são mutáveis
  55. 55. “Sempre existe mais de um jeito de fazer a mesma coisa”
  56. 56. Jeito “comum” nome=nome.capitalize
  57. 57. Jeito Ruby nome.capitalize!
  58. 58. “O “!” funciona pra qualquer método?”
  59. 59. “Como leio dados do teclado?”
  60. 60. Fácil! ● gets ● gets.chomp
  61. 61. “Tá ficando chato fazer isso no Shell...”
  62. 62. “Como crio arquivos executáveis em Ruby?”
  63. 63. Criando, Editando e Executando ● Arquivo de texto com extensão .rb ● ruby seuarquivo.rb
  64. 64. Para fixar o conhecimento... Faça um programa que leia uma string e imprima essa string ao contrário.
  65. 65. Fluxo de Controle
  66. 66. Comparando com C e Java... ● else if = elsif ● Sem chaves obrigatórias ● O bloco é finalizado com a palavra end
  67. 67. Operadores lógicos ● || ou or = ou ● and ou && = e ● not = negação
  68. 68. Exemplo
  69. 69. Escrito de outro jeito...
  70. 70. Compactando
  71. 71. Exercício para fixar a sintaxe :)
  72. 72. Um programa que lê uma string digitada pelo usuário e substitui todas letras “a” por um “-” Alguma sugestão de como fazer?
  73. 73. Vamos tentar de novo...
  74. 74. gsub(“a”, “b”) include?()
  75. 75. Agora sim! Um programa que lê uma string digitada pelo usuário e substitui todas letras “a” por um “-”
  76. 76. Loops e Iteradores
  77. 77. While
  78. 78. x++? não
  79. 79. x+=1
  80. 80. For
  81. 81. 1..5? Intervalos! ● 1..5 = 1,2,3,4,5 ● 1...5 = 1,2,3,4 ● Também funciona com letras!
  82. 82. “Jeito Ruby de fazer as coisas...”
  83. 83. Until
  84. 84. .times
  85. 85. .upto
  86. 86. .downto
  87. 87. Antes de falarmos sobre Iteradores...
  88. 88. Arrays
  89. 89. Instanciando ● array = [] ● array = Array.new ● array=Array.new(tamanho) ● array=Array.new(tamanho, elemento)
  90. 90. Acessando os elementos ● Index [x] ● Intervalos [x..y] ou [x...y] ● array.first ● array.last ● array.take(n) ● array.length ● array.include?
  91. 91. Adicionando elementos ● array.push(dado) ● array << dado ● array.insert(posição, dado)
  92. 92. Removendo elementos ● array.delete ● array.delete_at(posicao) ● array.pop
  93. 93. Soma e Subtração
  94. 94. “E lista?”
  95. 95. Lista == Array
  96. 96. Agora sim, Iterando em Arrays
  97. 97. Each array.each{|variavel| comandos} array.each do |variavel| comandos end
  98. 98. Ou..
  99. 99. “Quer dizer que Ruby aceita blocos de comando como parâmetro?”
  100. 100. “Qual a diferença entre o uso das chaves e do 'do...end'?”
  101. 101. Selecionando itens do Array
  102. 102. O problema Eu tenho um array de strings e quero imprimir somente as strings que começam com vogais, como faço?
  103. 103. Alguma ideia?
  104. 104. A solução string.select array.include?
  105. 105. Definindo suas funções
  106. 106. Corpo de uma função em Ruby
  107. 107. Detalhes...
  108. 108. Em Ruby, toda função retorna um valor
  109. 109. Voltando um pouco...
  110. 110. “Sim, mas o que é esse nil?”
  111. 111. Qual o retorno desse método?
  112. 112. Retorno explícito
  113. 113. Retorno implícito
  114. 114. Convenções ● Se a função retorna true/false, termina em ? ● Se o a função tiver nome composto, separa-os por _
  115. 115. Exemplos ● e_par? ● e_impar? ● mais_uma_funcao
  116. 116. “Como é aquela coisa de passar blocos como parâmetro?”
  117. 117. yield
  118. 118. Qual a saída desse código?
  119. 119. Pra fixar o conhecimento... ● Faça uma função que aceite um array como parâmetro e, quando dado um bloco, imprima cada um dos elementos do array. Dicas: Para passar um array como parâmetro usa um * antes do nome da variável. Para verificar se foi passado um bloco como parâmetro, use a função block_given?
  120. 120. Perguntas?
  121. 121. Próximos tópicos ● POO com Ruby ● Metaprogramação ● Rails
  122. 122. Iniciando com o básico...
  123. 123. Definindo uma classe
  124. 124. Instanciando uma Classe
  125. 125. Observações ● Nome de classe inicia sempre com letra maíuscula ● ClasseComMaisDeUmNome
  126. 126. Antes de continuar vamos ver algumas coisas...
  127. 127. Tudo é objeto
  128. 128. Até as classes são objetos!
  129. 129. As classes são abertas
  130. 130. “Classes abertas???”
  131. 131. Vamos mostrar isso na prática :)
  132. 132. Redefinindo a Classe Class Live Coding
  133. 133. Isso é chamado de Metaprogramação
  134. 134. “Se tudo é objeto, o que acontece numa expressão do tipo x = 2+2?”
  135. 135. x= 2+ 2
  136. 136. x= 2+ 2 Chamada de método 1 Chamada de método 2
  137. 137. x= 2+ 2 Parâmetro do método 1 Parâmetro do método 2
  138. 138. Lembra? Parênteses são opcionais!
  139. 139. Rearranjando...
  140. 140. x=(2+(2))
  141. 141. x=(4)
  142. 142. “Mas como assim '+' e '=' são métodos?”
  143. 143. Syntax Sugar
  144. 144. Poetry Mode Fonte: courses.edx.org
  145. 145. “Como posso ver todos os métodos dessas classes?”
  146. 146. ruby-doc.org
  147. 147. .methods
  148. 148. .respond_to?(:nomeDoMetodo)
  149. 149. Níveis de acesso das variáveis
  150. 150. ● $var -> Variável global ● @var -> Variável de instância (atributo) ● @@var -> Variável de classe
  151. 151. Todos os atributos são privados
  152. 152. Métodos
  153. 153. ● São públicos por padrão ● São divididos em seções de visibilidade ● Ruby não suporta sobrecarga de métodos
  154. 154. Parâmetros opcionais
  155. 155. Chamada sem parâmetro Chamada com parâmetro
  156. 156. Métodos de Classe Definindo Acessando
  157. 157. Convenções sobre métodos ● metodo_com_mais_de_um_nome ● Atribuicao= ● retorno_booleano?
  158. 158. Construindo uma classe simples
  159. 159. Atribuição Condicional
  160. 160. Como você faria os métodos para alterar o endereco de uma pessoa?
  161. 161. “Jeito Ruby”
  162. 162. Código gerado na classe
  163. 163. “E se eu quiser só ler ou alterar o atributo?”
  164. 164. Equivale a
  165. 165. Exercício para fixar a sintaxe
  166. 166. ● Classe Telefone(numero:String, crédito:inteiro) ● Métodos – Ligar(número:String) [Desconta 5 créditos por ligação) – Adicionar créditos – Total de Telefones [Retorna o total de telefones] ● Obs: Se não for passado um valor, os créditos iniciam em quantidade igual a 50. ● Obs²: A ligação só pode ser feita se os créditos forem suficientes
  167. 167. “Ok. Como faço uma classe herdar de outra?”
  168. 168. Observações sobre Herança ● Ruby não suporta herança múltipla ● Simula herança múltipla por mixins
  169. 169. Antes do mixin propriamente dito...
  170. 170. Modules Maneira de agrupar métodos, variáveis e constantes
  171. 171. Include vs Require
  172. 172. Mixin é o resultado da inclusão de um module em uma classe.
  173. 173. “Como importo classes em outros arquivos .rb?”
  174. 174. require_relative “caminho/para/arquivo”
  175. 175. Outro exercício ● Crie um Module chamado Motor e uma classe chamada Veículo. Em module, defina os métodos “Ligar” e “Desligar”, que devem imprimir “Motor ligado” e “Motor ligado”, respectivamente. Faça um mixin com a classe Veiculo e o Module Motor.
  176. 176. Mais metaprogramação!
  177. 177. Criando métodos que criam métodos Temos uma classe professor e temos uma classe aluno. Como fazemos para o professor ensinar ao aluno a escrever?
  178. 178. Primeiro passo: Classe Aluno
  179. 179. Segundo passo: Classe Professor
  180. 180. Terceiro passo: Classe Aula
  181. 181. Fonte do Exercício: Caelum
  182. 182. Exercício Crie uma classe Superman e uma classe Pessoa. Faça com que Superman ensina uma pessoa a voar numa Aula. Superman, Pessoa e Aula devem estar em arquivos separados.
  183. 183. Desvantagens do Ruby
  184. 184. ● Ainda é considerado lento ● Pouco material disponível comercialmente ● Codificação única
  185. 185. Com Ruby, evite: ● Aplicações com processamento tempo real ● Aplicações que exigem muito processamento
  186. 186. Perguntas?
  187. 187. Onde encontrar mais: ● Ruby-lang.org ● Manual Ruby TAC ● Sirupsen.com – Simon Eskildsen ● Akita On Rails – Fábio Akita ● Caelum
  188. 188. Isso é tudo, Obrigado :)

×