Transcript
Page 1: Introdução à programação em Ruby
Page 2: Introdução à programação em Ruby

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

Page 3: Introdução à programação em Ruby

“Ruby”?

● Linguagem dinâmica● Foco na simplicidade e produtividade● Leitura natural● Multiparadigma e propósito geral● Scripts● Interpretada

Page 4: Introdução à programação em Ruby

Um pouco de história...

● Criador: Yukihiro Matsumoto - “Matz”

● Primeira versão estável: 1996

● Versão atual (estável): 2.2.0

Page 5: Introdução à programação em Ruby

“Ruby is simple in appearance, but is very complex inside, just like the human body” – Matz

Page 6: Introdução à programação em Ruby

...mais uma linguagem?

● Matz queria uma linguagem que...– Fosse mais poderosa que o Pearl– Mais orientada a objetos que Python– Simples como o Lisp

Page 7: Introdução à programação em Ruby

“Por que aprender Ruby?”

Page 8: Introdução à programação em Ruby

codeeval.com - 2014

Page 9: Introdução à programação em Ruby
Page 10: Introdução à programação em Ruby

“Mas Ruby é lento...”

Page 11: Introdução à programação em Ruby

Fonte: programmingzen.com/?s=benchmark

Page 12: Introdução à programação em Ruby

Fonte: bjpelc.wordpress.com

Page 13: Introdução à programação em Ruby

Está melhorando muito!

Page 14: Introdução à programação em Ruby

“Quero saber quem é que usa isso aí”

Page 15: Introdução à programação em Ruby
Page 16: Introdução à programação em Ruby
Page 17: Introdução à programação em Ruby
Page 18: Introdução à programação em Ruby
Page 19: Introdução à programação em Ruby

Esse são só alguns...

Page 20: Introdução à programação em Ruby

Então...

Page 21: Introdução à programação em Ruby

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 :)

Page 22: Introdução à programação em Ruby

Além disso...

Page 23: Introdução à programação em Ruby

Interactive Ruby Shell

Page 24: Introdução à programação em Ruby

RubyGems

Page 25: Introdução à programação em Ruby

#gem install sqlite3

Page 26: Introdução à programação em Ruby

Só mais uma coisa...

Page 27: Introdução à programação em Ruby

Ruby is evil

Page 28: Introdução à programação em Ruby

“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

Page 29: Introdução à programação em Ruby

“Sim, tá falando demais”

Page 30: Introdução à programação em Ruby

Ok, chega. Vamos programar!

Page 31: Introdução à programação em Ruby

“Mas espera, como instala isso aí?”

Page 32: Introdução à programação em Ruby

No Windows

● Faça o download do executável em http://rubyinstaller.org/

● Instale

Page 33: Introdução à programação em Ruby

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

Page 34: Introdução à programação em Ruby

“O que vamos usar para programar em Ruby?”

Page 35: Introdução à programação em Ruby

Ferramentas

● IRB

● Terminal

● Um editor de texto

Page 36: Introdução à programação em Ruby

“Como abro o IRB?”

Page 37: Introdução à programação em Ruby

Fácil!

● Abra o Terminal(ctrl+alt+t)

● Digite irb

Page 38: Introdução à programação em Ruby

Tradições...

Page 39: Introdução à programação em Ruby

No IRB...

puts “Hello, World!”

print “Hello, World!”

p “Hello, World!”

Page 40: Introdução à programação em Ruby

Comentários

Page 41: Introdução à programação em Ruby

Variáveis

Page 42: Introdução à programação em Ruby

Não precisa declará-las

Page 43: Introdução à programação em Ruby

O Ruby é dinâmico!

Page 44: Introdução à programação em Ruby

“Não entendi o 'dinâmico'...”

Page 45: Introdução à programação em Ruby

Vamos entender na a prática então

Page 46: Introdução à programação em Ruby

No IRB...

Page 47: Introdução à programação em Ruby

“E se eu quiser imprimir uma variável junto a um texto?”

Page 48: Introdução à programação em Ruby

Simples, é só interpolar

Page 49: Introdução à programação em Ruby

Exemplo

numero = 42

puts “Eu escolhi o número #{numero}”

Page 50: Introdução à programação em Ruby

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”

Page 51: Introdução à programação em Ruby
Page 52: Introdução à programação em Ruby

“nil?”

Page 53: Introdução à programação em Ruby

Convenções

● CONSTANTE

● variavelComMaisDeUmNome

Page 54: Introdução à programação em Ruby

Vamos para algo um pouco mais interessante...

Page 55: Introdução à programação em Ruby

Strings

Page 56: Introdução à programação em Ruby

Strings

● Array de sequência de bytes

● “String” é diferente de 'String'

● “a” é uma String– Não existem caracteres

Page 57: Introdução à programação em Ruby

Lidando com Strings

● nome.upcase● nome.downcase● nome.capitalize● nome.swapcase● nome.reverse● Vários outros...

Page 58: Introdução à programação em Ruby

Sim, parênteses são opcionais!

Page 59: Introdução à programação em Ruby

Voltando...

Page 60: Introdução à programação em Ruby

Transformando Strings

Page 61: Introdução à programação em Ruby

Strings são mutáveis

Page 62: Introdução à programação em Ruby

“Sempre existe mais de um jeito de fazer a mesma coisa”

Page 63: Introdução à programação em Ruby

Jeito “comum”

nome=nome.capitalize

Page 64: Introdução à programação em Ruby

Jeito Ruby

nome.capitalize!

Page 65: Introdução à programação em Ruby
Page 66: Introdução à programação em Ruby

“O “!” funciona pra qualquer método?”

Page 67: Introdução à programação em Ruby

“Como leio dados do teclado?”

Page 68: Introdução à programação em Ruby

Fácil!

● gets

● gets.chomp

Page 69: Introdução à programação em Ruby

“Tá ficando chato fazer isso no Shell...”

Page 70: Introdução à programação em Ruby

“Como crio arquivos executáveis em Ruby?”

Page 71: Introdução à programação em Ruby

Criando, Editando e Executando

● Arquivo de texto com extensão .rb

● ruby seuarquivo.rb

Page 72: Introdução à programação em Ruby

Para fixar o conhecimento...

Faça um programa que leia uma string e imprima essa string ao contrário.

Page 73: Introdução à programação em Ruby

Fluxo de Controle

Page 74: Introdução à programação em Ruby

Comparando com C e Java...

● else if = elsif

● Sem chaves obrigatórias

● O bloco é finalizado com a palavra end

Page 75: Introdução à programação em Ruby

Operadores lógicos

● || ou or = ou

● and ou && = e

● not = negação

Page 76: Introdução à programação em Ruby

Exemplo

Page 77: Introdução à programação em Ruby

Escrito de outro jeito...

Page 78: Introdução à programação em Ruby

Compactando

Page 79: Introdução à programação em Ruby

Exercício para fixar a sintaxe :)

Page 80: Introdução à programação em Ruby

Um programa que lê uma string digitada pelo usuário e substitui todas letras “a” por um “-”

Alguma sugestão de como fazer?

Page 81: Introdução à programação em Ruby
Page 82: Introdução à programação em Ruby

Vamos tentar de novo...

Page 83: Introdução à programação em Ruby

gsub(“a”, “b”)

include?()

Page 84: Introdução à programação em Ruby

Agora sim!

Um programa que lê uma string digitada pelo usuário e substitui todas letras “a” por um “-”

Page 85: Introdução à programação em Ruby
Page 86: Introdução à programação em Ruby

Loops e Iteradores

Page 87: Introdução à programação em Ruby

While

Page 88: Introdução à programação em Ruby

x++? não

Page 89: Introdução à programação em Ruby

x+=1

Page 90: Introdução à programação em Ruby

For

Page 91: Introdução à programação em Ruby

1..5? Intervalos!

● 1..5 = 1,2,3,4,5● 1...5 = 1,2,3,4

● Também funciona com letras!

Page 92: Introdução à programação em Ruby

“Jeito Ruby de fazer as coisas...”

Page 93: Introdução à programação em Ruby

Until

Page 94: Introdução à programação em Ruby

.times

Page 95: Introdução à programação em Ruby

.upto

Page 96: Introdução à programação em Ruby

.downto

Page 97: Introdução à programação em Ruby

Antes de falarmos sobre Iteradores...

Page 98: Introdução à programação em Ruby

Arrays

Page 99: Introdução à programação em Ruby

Instanciando

● array = []

● array = Array.new

● array=Array.new(tamanho)

● array=Array.new(tamanho, elemento)

Page 100: Introdução à programação em Ruby

Acessando os elementos

● Index [x]● Intervalos [x..y] ou [x...y]● array.first● array.last● array.take(n)● array.length● array.include?

Page 101: Introdução à programação em Ruby

Adicionando elementos

● array.push(dado)● array << dado● array.insert(posição, dado)

Page 102: Introdução à programação em Ruby

Removendo elementos

● array.delete● array.delete_at(posicao)● array.pop

Page 103: Introdução à programação em Ruby

Soma e Subtração

Page 104: Introdução à programação em Ruby
Page 105: Introdução à programação em Ruby

“E lista?”

Page 106: Introdução à programação em Ruby

Lista == Array

Page 107: Introdução à programação em Ruby

Agora sim, Iterando em Arrays

Page 108: Introdução à programação em Ruby

Each

array.each{|variavel| comandos}

array.each do |variavel|

comandos

end

Page 109: Introdução à programação em Ruby
Page 110: Introdução à programação em Ruby

Ou..

Page 111: Introdução à programação em Ruby

“Quer dizer que Ruby aceita blocos de comando como parâmetro?”

Page 112: Introdução à programação em Ruby

“Qual a diferença entre o uso das chaves e do 'do...end'?”

Page 113: Introdução à programação em Ruby

Selecionando itens do Array

Page 114: Introdução à programação em Ruby

O problema

Eu tenho um array de strings e quero imprimir somente as strings que começam com vogais,

como faço?

Page 115: Introdução à programação em Ruby

Alguma ideia?

Page 116: Introdução à programação em Ruby

A solução

string.select

array.include?

Page 117: Introdução à programação em Ruby
Page 118: Introdução à programação em Ruby
Page 119: Introdução à programação em Ruby

Definindo suas funções

Page 120: Introdução à programação em Ruby

Corpo de uma função em Ruby

Page 121: Introdução à programação em Ruby

Detalhes...

Page 122: Introdução à programação em Ruby

Em Ruby, toda função retorna um valor

Page 123: Introdução à programação em Ruby

Voltando um pouco...

Page 124: Introdução à programação em Ruby

“Sim, mas o que é esse nil?”

Page 125: Introdução à programação em Ruby

Qual o retorno desse método?

Page 126: Introdução à programação em Ruby

Retorno explícito

Page 127: Introdução à programação em Ruby

Retorno implícito

Page 128: Introdução à programação em Ruby

Convenções

● Se a função retorna true/false, termina em ?

● Se o a função tiver nome composto, separa-os por _

Page 129: Introdução à programação em Ruby

Exemplos

● e_par?● e_impar?● mais_uma_funcao

Page 130: Introdução à programação em Ruby

“Como é aquela coisa de passar blocos como parâmetro?”

Page 131: Introdução à programação em Ruby

yield

Page 132: Introdução à programação em Ruby
Page 133: Introdução à programação em Ruby

Qual a saída desse código?

Page 134: Introdução à programação em Ruby
Page 135: Introdução à programação em Ruby

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?

Page 136: Introdução à programação em Ruby
Page 137: Introdução à programação em Ruby

Perguntas?

Page 138: Introdução à programação em Ruby

Próximos tópicos

● POO com Ruby

● Metaprogramação

● Rails

Page 139: Introdução à programação em Ruby

Iniciando com o básico...

Page 140: Introdução à programação em Ruby

Definindo uma classe

Page 141: Introdução à programação em Ruby

Instanciando uma Classe

Page 142: Introdução à programação em Ruby

Observações

● Nome de classe inicia sempre com letra maíuscula

● ClasseComMaisDeUmNome

Page 143: Introdução à programação em Ruby

Antes de continuar vamos ver algumas coisas...

Page 144: Introdução à programação em Ruby

Tudo é objeto

Page 145: Introdução à programação em Ruby

Até as classes são objetos!

Page 146: Introdução à programação em Ruby
Page 147: Introdução à programação em Ruby
Page 148: Introdução à programação em Ruby

As classes são abertas

Page 149: Introdução à programação em Ruby

“Classes abertas???”

Page 150: Introdução à programação em Ruby
Page 151: Introdução à programação em Ruby
Page 152: Introdução à programação em Ruby

Vamos mostrar isso na prática :)

Page 153: Introdução à programação em Ruby

Redefinindo a Classe Class

Live Coding

Page 154: Introdução à programação em Ruby

Isso é chamado de Metaprogramação

Page 155: Introdução à programação em Ruby

“Se tudo é objeto, o que acontece numa expressão do tipo x = 2+2?”

Page 156: Introdução à programação em Ruby

x= 2+ 2

Page 157: Introdução à programação em Ruby

x= 2+ 2

Chamada de método 1

Chamada de método 2

Page 158: Introdução à programação em Ruby

x= 2+ 2

Parâmetro do método 1

Parâmetro do método 2

Page 159: Introdução à programação em Ruby

Lembra? Parênteses são opcionais!

Page 160: Introdução à programação em Ruby

Rearranjando...

Page 161: Introdução à programação em Ruby

x=(2+(2))

Page 162: Introdução à programação em Ruby

x=(4)

Page 163: Introdução à programação em Ruby

“Mas como assim '+' e '=' são métodos?”

Page 164: Introdução à programação em Ruby

Syntax Sugar

Page 165: Introdução à programação em Ruby

Poetry Mode

Fonte: courses.edx.org

Page 166: Introdução à programação em Ruby

“Como posso ver todos os métodos dessas classes?”

Page 167: Introdução à programação em Ruby

ruby-doc.org

Page 168: Introdução à programação em Ruby

.methods

Page 169: Introdução à programação em Ruby

.respond_to?(:nomeDoMetodo)

Page 170: Introdução à programação em Ruby

Níveis de acesso das variáveis

Page 171: Introdução à programação em Ruby

● $var -> Variável global

● @var -> Variável de instância (atributo)

● @@var -> Variável de classe

Page 172: Introdução à programação em Ruby

Todos os atributos são privados

Page 173: Introdução à programação em Ruby

Métodos

Page 174: Introdução à programação em Ruby

● São públicos por padrão

● São divididos em seções de visibilidade

● Ruby não suporta sobrecarga de métodos

Page 175: Introdução à programação em Ruby
Page 176: Introdução à programação em Ruby

Parâmetros opcionais

Page 177: Introdução à programação em Ruby
Page 178: Introdução à programação em Ruby

Chamada sem parâmetro

Chamada com parâmetro

Page 179: Introdução à programação em Ruby

Métodos de Classe

Definindo

Acessando

Page 180: Introdução à programação em Ruby

Convenções sobre métodos

● metodo_com_mais_de_um_nome

● Atribuicao=

● retorno_booleano?

Page 181: Introdução à programação em Ruby

Construindo uma classe simples

Page 182: Introdução à programação em Ruby
Page 183: Introdução à programação em Ruby

Atribuição Condicional

Page 184: Introdução à programação em Ruby

Como você faria os métodos para alterar o endereco de uma pessoa?

Page 185: Introdução à programação em Ruby

“Jeito Ruby”

Page 186: Introdução à programação em Ruby
Page 187: Introdução à programação em Ruby

Código gerado na classe

Page 188: Introdução à programação em Ruby

“E se eu quiser só ler ou alterar o atributo?”

Page 189: Introdução à programação em Ruby

Equivale a

Page 190: Introdução à programação em Ruby

Exercício para fixar a sintaxe

Page 191: Introdução à programação em Ruby

● 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

Page 192: Introdução à programação em Ruby

“Ok. Como faço uma classe herdar de outra?”

Page 193: Introdução à programação em Ruby
Page 194: Introdução à programação em Ruby

Observações sobre Herança

● Ruby não suporta herança múltipla

● Simula herança múltipla por mixins

Page 195: Introdução à programação em Ruby

Antes do mixin propriamente dito...

Page 196: Introdução à programação em Ruby

Modules

Maneira de agrupar métodos, variáveis e constantes

Page 197: Introdução à programação em Ruby
Page 198: Introdução à programação em Ruby
Page 199: Introdução à programação em Ruby
Page 200: Introdução à programação em Ruby

Include vs Require

Page 201: Introdução à programação em Ruby

Mixin é o resultado da inclusão de um module em uma classe.

Page 202: Introdução à programação em Ruby

“Como importo classes em outros arquivos .rb?”

Page 203: Introdução à programação em Ruby

require_relative “caminho/para/arquivo”

Page 204: Introdução à programação em Ruby

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.

Page 205: Introdução à programação em Ruby

Mais metaprogramação!

Page 206: Introdução à programação em Ruby

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?

Page 207: Introdução à programação em Ruby

Primeiro passo: Classe Aluno

Page 208: Introdução à programação em Ruby

Segundo passo: Classe Professor

Page 209: Introdução à programação em Ruby

Terceiro passo: Classe Aula

Page 210: Introdução à programação em Ruby

Fonte do Exercício: Caelum

Page 211: Introdução à programação em Ruby

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.

Page 212: Introdução à programação em Ruby

Desvantagens do Ruby

Page 213: Introdução à programação em Ruby

● Ainda é considerado lento

● Pouco material disponível comercialmente

● Codificação única

Page 214: Introdução à programação em Ruby

Com Ruby, evite:

● Aplicações com processamento tempo real

● Aplicações que exigem muito processamento

Page 215: Introdução à programação em Ruby

Perguntas?

Page 216: Introdução à programação em Ruby

Onde encontrar mais:

● Ruby-lang.org● Manual Ruby TAC● Sirupsen.com – Simon Eskildsen● Akita On Rails – Fábio Akita● Caelum

Page 217: Introdução à programação em Ruby

Isso é tudo, Obrigado :)

Page 218: Introdução à programação em Ruby