Introdução à programação em Ruby

  • View
    98

  • Download
    3

Embed Size (px)

Text of Introdução à programação em Ruby

  • Quem sou eu?

    Daniel Coelho de Andrade

    Graduando em Engenharia de Computao - UEFS

    Membro da Empresa Jnior de Engenharia de Computao da UEFS

  • Ruby?

    Linguagem dinmica Foco na simplicidade e produtividade Leitura natural Multiparadigma e propsito geral Scripts Interpretada

  • Um pouco de histria...

    Criador: Yukihiro Matsumoto - Matz

    Primeira verso estvel: 1996

    Verso atual (estvel): 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 so s alguns...

  • Ento...

  • 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

    mesma coisa divertido :)

  • Alm disso...

  • Interactive Ruby Shell

  • RubyGems

  • #gem install sqlite3

  • S mais uma coisa...

  • Ruby is evil

  • 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...

    Simon Eskildsen

    Responsvel pela infraestrutura do Shopify

  • Sim, t falando demais

  • Ok, chega. Vamos programar!

  • Mas espera, como instala isso a?

  • No Windows

    Faa o download do executvel em http://rubyinstaller.org/

    Instale

  • No Linux

    Distribuies baseadas no Red Hat sudo yum install ruby irb rubygems

    Distribuies 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?

  • Fcil!

    Abra o Terminal(ctrl+alt+t)

    Digite irb

  • Tradies...

  • No IRB...

    puts Hello, World!print Hello, World!p Hello, World!

  • Comentrios

  • Variveis

  • No precisa declar-las

  • O Ruby dinmico!

  • No entendi o 'dinmico'...

  • Vamos entender na a prtica ento

  • No IRB...

  • E se eu quiser imprimir uma varivel junto a um texto?

  • Simples, s interpolar

  • Exemplo

    numero = 42puts Eu escolhi o nmero #{numero}

  • Sua vez

    Escolha um nmero qualquer, atribua ele a uma varivel e imprima a mensagem O

    nmero (seu nmero) foi escolhido por mim

  • nil?

  • Convenes

    CONSTANTE

    variavelComMaisDeUmNome

  • Vamos para algo um pouco mais interessante...

  • Strings

  • Strings

    Array de sequncia de bytes

    String diferente de 'String'

    a uma String No existem caracteres

  • Lidando com Strings

    nome.upcase nome.downcase nome.capitalize nome.swapcase nome.reverse Vrios outros...

  • Sim, parnteses so opcionais!

  • Voltando...

  • Transformando Strings

  • Strings so mutveis

  • Sempre existe mais de um jeito de fazer a mesma coisa

  • Jeito comum

    nome=nome.capitalize

  • Jeito Ruby

    nome.capitalize!

  • O ! funciona pra qualquer mtodo?

  • Como leio dados do teclado?

  • Fcil!

    gets

    gets.chomp

  • T ficando chato fazer isso no Shell...

  • Como crio arquivos executveis em Ruby?

  • Criando, Editando e Executando

    Arquivo de texto com extenso .rb

    ruby seuarquivo.rb

  • Para fixar o conhecimento...

    Faa um programa que leia uma string e imprima essa string ao contrrio.

  • Fluxo de Controle

  • Comparando com C e Java...

    else if = elsif

    Sem chaves obrigatrias

    O bloco finalizado com a palavra end

  • Operadores lgicos

    || ou or = ou

    and ou && = e

    not = negao

  • Exemplo

  • Escrito de outro jeito...

  • Compactando

  • Exerccio para fixar a sintaxe :)

  • Um programa que l uma string digitada pelo usurio e substitui todas letras a por um -

    Alguma sugesto de como fazer?

  • Vamos tentar de novo...

  • gsub(a, b)include?()

  • Agora sim!

    Um programa que l uma string digitada pelo usurio e substitui todas letras a por um -

  • Loops e Iteradores

  • While

  • x++? no

  • x+=1

  • For

  • 1..5? Intervalos! 1..5 = 1,2,3,4,5 1...5 = 1,2,3,4

    Tambm 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

  • Removendo elementos

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

  • Soma e Subtrao

  • 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 parmetro?

  • Qual a diferena 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 comeam com vogais,

    como fao?

  • Alguma ideia?

  • A soluo

    string.selectarray.include?

  • Definindo suas funes

  • Corpo de uma funo em Ruby

  • Detalhes...

  • Em Ruby, toda funo retorna um valor

  • Voltando um pouco...

  • Sim, mas o que esse nil?

  • Qual o retorno desse mtodo?

  • Retorno explcito

  • Retorno implcito

  • Convenes

    Se a funo retorna true/false, termina em ?

    Se o a funo tiver nome composto, separa-os por _

  • Exemplos

    e_par? e_impar? mais_uma_funcao

  • Como aquela coisa de passar blocos como parmetro?

  • yield

  • Qual a sada desse cdigo?

  • Pra fixar o conhecimento...

    Faa uma funo que aceite um array como parmetro e, quando dado um bloco, imprima cada um dos elementos do array.

    Dicas: Para passar um array como parmetro usa um * antes do nome da varivel. Para verificar se foi

    passado um bloco como parmetro, use a funo block_given?

  • Perguntas?

  • Prximos tpicos

    POO com Ruby

    Metaprogramao

    Rails

  • Iniciando com o bsico...

  • Definindo uma classe

  • Instanciando uma Classe

  • Observaes Nome de classe inicia sempre com letra

    mauscula

    ClasseComMaisDeUmNome

  • Antes de continuar vamos ver algumas coisas...

  • Tudo objeto

  • At as classes so objetos!

  • As classes so abertas

  • Classes abertas???

  • Vamos mostrar isso na prtica :)

  • Redefinindo a Classe Class

    Live Coding

  • Isso chamado de Metaprogramao

  • Se tudo objeto, o que acontece numa expresso do tipo x = 2+2?

  • x= 2+ 2

  • x= 2+ 2

    Chamada de mtodo 1

    Chamada de mtodo 2

  • x= 2+ 2

    Parmetro do mtodo 1

    Parmetro do mtodo 2

  • Lembra? Parnteses so opcionais!

  • Rearranjando...

  • x=(2+(2))

  • x=(4)

  • Mas como assim '+' e '=' so mtodos?

  • Syntax Sugar

  • Poetry Mode

    Fonte: courses.edx.org

  • Como posso ver todos os mtodos dessas classes?

  • ruby-doc.org

  • .methods

  • .respond_to?(:nomeDoMetodo)

  • Nveis de acesso das variveis

  • $var -> Varivel global

    @var -> Varivel de instncia (atributo)

    @@var -> Varivel de classe

  • Todos os atributos so privados

  • Mtodos

  • So pblicos por padro

    So divididos em sees de visibilidade

    Ruby no suporta sobrecarga de mtodos

  • Parmetros opcionais

  • Chamada sem parmetro

    Chamada com parmetro

  • Mtodos de Classe

    Definindo

    Acessando

  • Convenes sobre mtodos

    metodo_com_mais_de_um_nome

    Atribuicao=

    retorno_booleano?

  • Construindo uma classe simples

  • Atribuio Condicional

  • Como voc faria os mtodos para alterar o endereco de uma pessoa?

  • Jeito Ruby

  • Cdigo gerado na classe

  • E se eu quiser s ler ou alterar o atributo?

  • Equivale a

  • Exerccio para fixar a sintaxe

  • Classe Telefone(numero:String, crdito:in