introdução à programação em ruby

Post on 19-Jul-2015

101 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

“Ruby”?

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

Um pouco de história...

● Criador: Yukihiro Matsumoto - “Matz”

● Primeira versão estável: 1996

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

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

...mais uma linguagem?

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

“Por que aprender Ruby?”

codeeval.com - 2014

“Mas Ruby é lento...”

Fonte: programmingzen.com/?s=benchmark

Fonte: bjpelc.wordpress.com

Está melhorando muito!

“Quero saber quem é que usa isso aí”

Esse são só alguns...

Então...

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

Além disso...

Interactive Ruby Shell

RubyGems

#gem install sqlite3

Só mais uma coisa...

Ruby is evil

“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

“Sim, tá falando demais”

Ok, chega. Vamos programar!

“Mas espera, como instala isso aí?”

No Windows

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

● Instale

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

“O que vamos usar para programar em Ruby?”

Ferramentas

● IRB

● Terminal

● Um editor de texto

“Como abro o IRB?”

Fácil!

● Abra o Terminal(ctrl+alt+t)

● Digite irb

Tradições...

No IRB...

puts “Hello, World!”

print “Hello, World!”

p “Hello, World!”

Comentários

Variáveis

Não precisa declará-las

O Ruby é dinâmico!

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

Vamos entender na a prática então

No IRB...

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

Simples, é só interpolar

Exemplo

numero = 42

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

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”

“nil?”

Convenções

● CONSTANTE

● variavelComMaisDeUmNome

Vamos para algo um pouco mais interessante...

Strings

Strings

● Array de sequência de bytes

● “String” é diferente de 'String'

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

Lidando com Strings

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

Sim, parênteses são opcionais!

Voltando...

Transformando Strings

Strings são mutáveis

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

Jeito “comum”

nome=nome.capitalize

Jeito Ruby

nome.capitalize!

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

“Como leio dados do teclado?”

Fácil!

● gets

● gets.chomp

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

“Como crio arquivos executáveis em Ruby?”

Criando, Editando e Executando

● Arquivo de texto com extensão .rb

● ruby seuarquivo.rb

Para fixar o conhecimento...

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

Fluxo de Controle

Comparando com C e Java...

● else if = elsif

● Sem chaves obrigatórias

● O bloco é finalizado com a palavra end

Operadores lógicos

● || ou or = ou

● and ou && = e

● not = negação

Exemplo

Escrito de outro jeito...

Compactando

Exercício para fixar a sintaxe :)

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

Alguma sugestão de como fazer?

Vamos tentar de novo...

gsub(“a”, “b”)

include?()

Agora sim!

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

Loops e Iteradores

While

x++? não

x+=1

For

1..5? Intervalos!

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

● Também funciona com letras!

“Jeito Ruby de fazer as coisas...”

Until

.times

.upto

.downto

Antes de falarmos sobre Iteradores...

Arrays

Instanciando

● array = []

● array = Array.new

● array=Array.new(tamanho)

● array=Array.new(tamanho, elemento)

Acessando os elementos

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

Adicionando elementos

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

Removendo elementos

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

Soma e Subtração

“E lista?”

Lista == Array

Agora sim, Iterando em Arrays

Each

array.each{|variavel| comandos}

array.each do |variavel|

comandos

end

Ou..

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

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

Selecionando itens do Array

O problema

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

como faço?

Alguma ideia?

A solução

string.select

array.include?

Definindo suas funções

Corpo de uma função em Ruby

Detalhes...

Em Ruby, toda função retorna um valor

Voltando um pouco...

“Sim, mas o que é esse nil?”

Qual o retorno desse método?

Retorno explícito

Retorno implícito

Convenções

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

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

Exemplos

● e_par?● e_impar?● mais_uma_funcao

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

yield

Qual a saída desse código?

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?

Perguntas?

Próximos tópicos

● POO com Ruby

● Metaprogramação

● Rails

Iniciando com o básico...

Definindo uma classe

Instanciando uma Classe

Observações

● Nome de classe inicia sempre com letra maíuscula

● ClasseComMaisDeUmNome

Antes de continuar vamos ver algumas coisas...

Tudo é objeto

Até as classes são objetos!

As classes são abertas

“Classes abertas???”

Vamos mostrar isso na prática :)

Redefinindo a Classe Class

Live Coding

Isso é chamado de Metaprogramação

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

x= 2+ 2

x= 2+ 2

Chamada de método 1

Chamada de método 2

x= 2+ 2

Parâmetro do método 1

Parâmetro do método 2

Lembra? Parênteses são opcionais!

Rearranjando...

x=(2+(2))

x=(4)

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

Syntax Sugar

Poetry Mode

Fonte: courses.edx.org

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

ruby-doc.org

.methods

.respond_to?(:nomeDoMetodo)

Níveis de acesso das variáveis

● $var -> Variável global

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

● @@var -> Variável de classe

Todos os atributos são privados

Métodos

● São públicos por padrão

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

● Ruby não suporta sobrecarga de métodos

Parâmetros opcionais

Chamada sem parâmetro

Chamada com parâmetro

Métodos de Classe

Definindo

Acessando

Convenções sobre métodos

● metodo_com_mais_de_um_nome

● Atribuicao=

● retorno_booleano?

Construindo uma classe simples

Atribuição Condicional

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

“Jeito Ruby”

Código gerado na classe

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

Equivale a

Exercício para fixar a sintaxe

● 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

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

Observações sobre Herança

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

● Simula herança múltipla por mixins

Antes do mixin propriamente dito...

Modules

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

Include vs Require

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

“Como importo classes em outros arquivos .rb?”

require_relative “caminho/para/arquivo”

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.

Mais metaprogramação!

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?

Primeiro passo: Classe Aluno

Segundo passo: Classe Professor

Terceiro passo: Classe Aula

Fonte do Exercício: Caelum

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.

Desvantagens do Ruby

● Ainda é considerado lento

● Pouco material disponível comercialmente

● Codificação única

Com Ruby, evite:

● Aplicações com processamento tempo real

● Aplicações que exigem muito processamento

Perguntas?

Onde encontrar mais:

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

Isso é tudo, Obrigado :)

top related