Your SlideShare is downloading. ×
0
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Ruby - praticamente falando
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Ruby - praticamente falando

2,394

Published on

Apresentação realizada no #safaDojo, dia 7 de Julho de 2011, na FabSoft do Cesupa - Belém - Pará.

Apresentação realizada no #safaDojo, dia 7 de Julho de 2011, na FabSoft do Cesupa - Belém - Pará.

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,394
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
47
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Ruby – praticamente falando http://www.flickr.com/photos/afternoon_sunlight/135751440
  • 2. Quem eu soufarol = { :nome => Luiz Sanches, :email => luizgrsanches@gmail.com, :blog => luizsanches.wordpress.com, :twitter => @luizgrsanches}puts Apenas mais um #tasafoemacao http://www.flickr.com/photos/brunodaher/4491575723
  • 3. Rubi: Ambiguidades
  • 4. Novela http://portaldatvaudiencia.files.wordpress.com/2010/01/rubis.jpg
  • 5. Aparelhagem de som http://s0.flogao.com.br/s60/15/05/07/155/103805997.jpg
  • 6. Pedra preciosa vermelha http://www.gemsoul.com/images/articles/madagascar-ruby.jpg
  • 7. LinguagemÉ qualquer e todo sistema de signos que serve de meio decomunicação de ideias ou sentimentos. Fonte: http://pt.wikipedia.org http://www.flickr.com/photos/shawnecono/149172094
  • 8. http://www.flickr.com/photos/grafayiti/4767764752Usamos a linguagem para
  • 9. http://www.flickr.com/photos/edwardjohnphotography/2522734815Comunicar
  • 10. Sentir http://www.flickr.com/photos/ahmadhakym/2459867386
  • 11. Envolver http://www.flickr.com/photos/nunoduarte/2801870408
  • 12. Criar http://www.flickr.com/photos/ochblog/379675238
  • 13. Conectar http://www.flickr.com/photos/theboywholaughs/3219937865
  • 14. Expressar http://www.flickr.com/photos/cubagallery/4361297705
  • 15. Enfim, viver! http://www.flickr.com/photos/thinkoutsidethebox2008/5113401458
  • 16. A linguagem Rubyfoi_inspirada_em = [ Python, Perl, Smalltalk, Eiffel, Ada, Lisp] http://www.ubuntu-sp.org/wp-content/uploads/2011/04/ruby.png
  • 17. Quando? Onde? Quem? Por quê?Em 1995, no Japão, Yukihiro"Matz" Matsumoto queriauma linguagem de scriptpoderosa, totalmenteorientada a objetos e apessoas.Ruby era a pedra zodiacalde um amigo de Matz. http://www.hephesto.com/agrega/wp-content/uploads/2008/11/yukihiro_matsumoto.jpg
  • 18. Bem depois, um framework web a colocou nos trilhoshttp://www.flickr.com/photos/shahrashoob/2036409933
  • 19. Seus tipos de dados são:1.class # Fixnum10000000000.class # Bignum1.0.class # Float"palavra".class # String:nome.class # Symbol(1..10).class # Range[1, dois].class # Arraytraduz = {um => one, dois => two}.class # Hash/expressao/.class # Regexptrue.class # TrueClassfalse.class # FalseClassnil.class # NilClass http://www.flickr.com/photos/shockcr/3753474120
  • 20. Mas no final, TUDO éself.class # Object1.class # Fixnum1.class.superclass # Integer1.class.superclass.superclass # Numeric1.class.superclass.superclass.superclass # Object http://www.flickr.com/photos/58782395@N03/5518992555
  • 21. Variáveissou_local = meu escopo é local@sou_de_instancia = sirvo ao objeto instanciado@@tenho_classe = sirvo a minha classeConstante = devo ser constante, mas aviso se mudar$sou_global = sou globalizada e indesejada http://www.flickr.com/photos/beijos/2556560841
  • 22. Numericssou_inteiro = 101tambem_sou_inteiro = -453sou_big_inteiro = 2000000000tambem_sou_um_big_inteiro = 2_000_000_000sou_float = 1.25continuo_sendo_float = 2_000_000_000.45 http://www.flickr.com/photos/dazbergman/4934851809
  • 23. StringsQuero saber quem fez essa bagunça?suspeito = ApolônioSerá que foi o + suspeito + ?Mas o << suspeito << não é disso.“Tudo indica ter sido mesmo o #{suspeito}.”culpado! * 3<<CONDENACAOSe o #{suspeito} for condenado, sofrerá as consequênciase passará um ano sem hamburguer e batata frita.CONDENACAO http://www.flickr.com/photos/claddaghofrome/175351981
  • 24. Symbolssimbolo_nao_e = [string, CONSTANTE=0, variavel=nil]:simbolo_e_um_identificador_que_representa_ele_mesmoNome = “nome” # constantenome = “nome” # variável:nome # símbolo# strings são mutáveis, assim como floats. Exemplo:nome.object_id # -606174638nome.object_id # -606183698# symbols são únicos, assim como inteiros. Exemplo::nome.object_id # 166898:nome.object_id # 166898 http://www.flickr.com/photos/catandkitty/2644303771
  • 25. Coleçõesarray = [1, dois, 3, quatro] hash = {1=>um, 2=>dois}array[1] hash[1]# adiciono elementos cidades = {feira = [] Belém=>PA,feira.push arroz Recife=>PEfeira.push feijão }feira << morango cidades[Belém]feira# retiro o último elemento info = {feira.pop :nome=>Manoel Carlos,feira :email=>manoel@gmail.com# retiro o primeiro elemento }feira.shift info[:email]feira info.keys, info.values http://www.flickr.com/photos/jamessharpe/5158660756
  • 26. Regexp# (=~) corresponde e (!~) não-correspondeer = /^[0-9]/123 =~ er # 0123 !~ er # falseabc =~ er # nilabc !~ er # trueme acha.index(/me/) # 0gato.gsub(/g/,p) # patocomida = %w(açaí vatapá maniçoba feijoada tacacá)comida.grep(/a$/) # maniçoba feijoada http://www.flickr.com/photos/otrojubilo/2226079728
  • 27. Sen1, n2 = 5, 10 unless n1 > n2 # senão puts "#{n2} é maior que #{n1}"if n1 > n2 end puts "#{n1} é maior que #{n2}"elsif n2 > n1 puts "#{n1} é " + (n1 % 2 == 0 ? puts "#{n2} é maior que #{n1}" par : ímpar)else puts Os números são iguais puts “só imprimo se a condição for verdadeira” if n1 > n2end http://www.flickr.com/photos/golbenge/5400710724
  • 28. Casomenu = :saldo opcao = 15case menu faixa =when :promocoes case opcao puts nossas promoções when 0..10when :creditos "de 0 a 10" puts inserir créditoswhen :saldo when 11..20 puts consultar saldo "de 11 a 20"else else puts ouça mais música "não encontrada"end end puts "Faixa #{faixa}" http://www.flickr.com/photos/golbenge/5400710724
  • 29. Forfor r in (1..5) 1.upto(5) do |u| puts r puts uend endfor r in (1...5) 5.downto(1) {|d| puts d} puts rend 3.times {puts Tá safo!}for a in (a..f) puts aend http://www.flickr.com/photos/pelegrino/3957449915
  • 30. Façaw=1while w < 5 # enquanto puts w w += 1 # em Ruby não tem ++ nem --endu=1until u == 5 # até que puts u u += 1end http://www.flickr.com/photos/pelegrino/3957449915
  • 31. Blocos e Procsfala = Proc.new {puts oi}fala.callchama = Proc.new do puts ei puts vem aqui!endchama.calldespede = proc {puts tchau}despede.callsauda = lambda {|nome| puts "Olá #{nome}"}sauda.call Fábio http://www.flickr.com/photos/lassochist/4013140613
  • 32. Blocos e Iteradorescompras = [arroz, feijão, açúcar]compras.each do |item| puts itemendcompras.each {|item| puts item}documentos = {:rg=>86474837, :cpf=>3653364645}documentos.each {|chave, valor| puts "#{chave} = #{valor}"} http://www.flickr.com/photos/lassochist/4013140613
  • 33. Métodosdef grita def executo_bloco(n) puts TO GRITANDO! yield(n)end endgrita executo_bloco(4) {|i| i * i} executo_bloco(4) {|i| i + i}def soma(n1, n2) nome = Marta n1 + n2end # (?) predicadossoma(5, 6) nome.include? Msoma 7, 3 nome.include? f # (!) destrutivos nome.upcase, nome nome.upcase!, nome http://www.flickr.com/photos/olhardefotografas/3006021111
  • 34. Classes e herançaclass Pessoa class Homem < Pessoa def initialize(nome) # construtor def initialize(nome) @nome = nome # de instância super(nome) end end def nome # get end @nome end # instanciando um objeto def nome=(novo_nome) # set fulano = Homem.new(Ambrósio) @nome = novo_nome fulano.nome end fulano.nome = Vanderlucioend fulano.nome http://www.flickr.com/photos/doobious/51242759
  • 35. Metaprogramação e variáveis de classeclass Pessoa class Homem < Pessoa attr_accessor :nome end @@pessoas = 0 # de classe def initialize(nome) # instanciando objetos @nome = nome fulano = Homem.new(Ambrósio) @@pessoas += 1 sicrano = Homem.new(Mariano) end fulano.nome def Pessoa.qtde_pessoas sicrano.nome @@pessoas Pessoa::qtde_pessoas endend http://www.flickr.com/photos/goda/2440513646
  • 36. Tipagem dinâmica e forte# posso ser o que eu quiservariavel = sou uma stringvariavel = 10# mas não posso abusarvalor1 = 100valor2 = 200# soma = valor1 + valor2 # erro na certa!soma = valor1 + valor2.to_i # agora funfa!junta = valor1.to_s + valor2 # também funfa! http://www.flickr.com/photos/mermaid/78134957
  • 37. Tipagem dinâmica e fortedef calcular(a, b, c) (a + b) * cendcalcular(1, 2, 3)calcular(mangas , e uvas, , 2)calcular([1,2,3], [4,5,6], 2) http://www.flickr.com/photos/mermaid/78134957
  • 38. Açúcar Sintático (Legibilidade)# quando você faz # Ruby está fazendocalculo = 2 + 3 calculo = 2.+(3)apelido = Farol apelido = String.new(Farol)class Mulher class Mulher attr_writer :nome def nome=(nome)end @nome=nome end endfulana = Mulher.new fulana = Mulher.newfulana.nome = Ana fulana.nome=(Ana) http://www.flickr.com/photos/ronaldpeixoto/5203811885
  • 39. Módulosclass Ave class AveSelvagem < Ave def voar include Mamifero bate as asas end end pato = AveSelvagem.newend pato.voarsabia = Ave.new pato.mergulharsabia.voar # Mais um pouco de módulosmodule Mamifero Math::PI def mergulhar Math.sqrt(9) prende a respiração Math.class # Module end module_function :mergulhar public :mergulharendMamifero.mergulhar http://www.flickr.com/photos/glitchpunk/5320924205
  • 40. Exceçõesvalor1 = 1valor2 = 2begin puts valor1 + valor2rescue TypeError => motivo puts "Deu bronca! TyperError: #{motivo}"ensure puts "De qualquer forma, tô por aqui"end http://www.flickr.com/photos/32627348@N06/3633209399
  • 41. Testes unitários# calculadora.rb # teste_calculadora.rb require test/unitclass Calculadora require calculadora def soma(a, b) class TesteCalculadora < Test::Unit::TestCase a+b def setup end @calc = Calculadora.new def subtrai(a, b) end def test_soma a-b assert_equal(4, @calc.soma(1, 3), "1 + 3 = 4") end end def test_subtraiend assert_equal(2, @calc.subtrai(5, 2), "5 - 2 = 3") end def teardown @calc = nil end end http://www.flickr.com/photos/grantbw/2943151784
  • 42. irb (Ruby interativo)irb(main):001:0> numero = 10=> 10irb(main):002:0> if numero % 2 == 0irb(main):003:1> puts parirb(main):004:1> elseirb(main):005:1* puts imparirb(main):006:1> endpar=> nil http://www.flickr.com/photos/webloes/468463423
  • 43. Gemologia=beginÉ a especialidade da Geologia que estuda o caráter físico equímico dos materiais de valores gemológicos. Fonte: http://pt.wikipedia.org=endmaterial_gemologico_deve_ter = [ Beleza, Raridade, Durabilidade] http://www.flickr.com/photos/rogerbarker/4942857592
  • 44. Gema: Ambiguidades
  • 45. Botão ou gomo http://www.flickr.com/photos/eduardo_cabral/4541045230
  • 46. Parte de um ovo http://www.flickr.com/photos/chrismferreira/3010064235
  • 47. Município da Espanha http://www.panoramio.com/photo/39548016
  • 48. Mineral utilizado em joalheria http://www.flickr.com/photos/raymond_li/3844312974
  • 49. RubyGems- Gerenciador de pacotes (programas e bibliotecas) do Ruby- Pacote = Gema- Gerencia dependências (similar ao apt-get do Debian)- Fonte padrão das gemas: http://rubygems.orgExemplos:gem install railsgem install mongoidgem listgem uninstall dbi http://marcgrabanski.com/img/rubygems.png
  • 50. Referências > Aprenda a programar (Chris Pine) aprendaaprogramar.rubyonrails.pro.br > Tutorial de Ruby (Eustáquio "TaQ" Rangel) eustaquiorangel.com/downloads > O (comovente) guia de Ruby do Why why.nomedojogo.com > The Book Of Ruby (Huw Collingbourne) sapphiresteel.com/The-Book-Of-Rubyhttp://www.flickr.com/photos/estopa/176637167
  • 51. Visite> Site oficial com versão em português (de Portugal)ruby-lang.org/pt> Ruby Brasilruby-br.org> Ruby Inside Brasilrubyinside.com.br> GURU-PAgroups.google.com/group/guru-pa http://www.flickr.com/photos/a7design1/3961877456
  • 52. Mas afinal, a quem puts pertence?Kernel.puts(Ele é um método do módulo Kernel do Ruby,assim como gets.)Kernel.puts(Só confirmando que tudo em Ruby é)Kernel.class # ModuleKernel.class.superclass # Object http://www.flickr.com/photos/58782395@N03/5518992555
  • 53. Obrigado!puts A felicidade está na simplicidade.puts #tasafoemacao http://www.flickr.com/photos/bu7amd/3444535642

×