Ruby Uma Linguagem Atraente

Marcello Moura Diego Roriz Centro de Recursos Computacionais Katon Agenciaˆ Digital Universidade Federal de Goias´ (UFG) Avenida -104, Quadra 317, Lote 02, Loja 04 Caixa Postal 131 – 74.001-970 Jardim America´ – 74.290-030 Goianiaˆ – GO – Brazil Goianiaˆ – GO – Brazil [email protected] [email protected]

Goiania,ˆ 20 de Novembro 2014

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 1 / 24 Sumario´

1 Introduc¸ao˜

2 Informac¸ao˜

3 Documentac¸ao˜

4 Projetos

5 Conclusao˜

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 2 / 24 Sumario´

1 Introduc¸ao˜

2 Informac¸ao˜

3 Documentac¸ao˜

4 Projetos

5 Conclusao˜

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 3 / 24 Introduc¸ao˜

Ruby 1 e´ uma linguagem de programac¸ao˜ dinamicaˆ e livre com foco em simplicidade e produtividade. Ela tem uma elegante sintaxe que e´ natural para se ler e facil´ de escrever.

1David Flanagan and . The Ruby Programming Language. O’Reilly Media, Incorporated, 2008. Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 4 / 24 Summary

1 Introduc¸ao˜

2 Informac¸ao˜

3 Documentac¸ao˜

4 Projetos

5 Conclusao˜

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 5 / 24 Informac¸ao˜

Ja´ esteve entre as 10 linguagem mais utilizadas no ranking Tiobe. Atualmente na posic¸ao˜ 14 (Nov. 2014). Matz disse, “I wanted a scripting language that was more powerful than , and more object-oriented than Python.” 2. Ruby uma linguagem cuidadosamente balanceada. Matz afirma que ela mescla partes de sua linguagem favorita (Perl, Smalltalk, Eiffel, Ada, e Lisp) para formar uma nova linguagem que balanceia programac¸ao˜ funcional com imperativa. Alem´ disso: altamente leg´ıvel, extremamente portavel,´ e facilmente extens´ıvel.

2An Interview with the Creator of Ruby, (29-Nov. 2001). Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 6 / 24 Extensao˜

E´ poss´ıvel instalar bibliotecas para estender as funcionalidades da linguagem. Existe na biblioteca padrao˜ mais 100 bibliotecas inclu´ıdas na distribuic¸ao˜ da versao˜ 1.9.x. Atualmente v2.1.5. Existem repositorios´ de bibliotecas externas, as mais conhecidas sao:˜ RubyGems, Githube RubyForge. Uso e´ muito simples: gem search gem install gem help

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 7 / 24 Ruby e outras linguagem

Ruby e´ duas partes Perl, uma parte Python, e uma parte de Smalltalk, disse Colin Steele 3. O que esperar: Linguagem X para Ruby 4: Ruby a partir de C and C++ Ruby a partir de Java Ruby a partir de Perl Ruby a partir de PHP Ruby a partir de Python

3Arquivos O’Reilly. 4Ruby-lang.org – Documentation. Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 8 / 24 Minha comparac¸ao˜

Java class HelloWorldApp { public static void main(String[] args){ System.out.println("Hello World!"); } } Lisp (DEFUN HELLO () "Hello World!" ) Perl print "Hello World!\n"; Ruby puts "Hello World!"

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 9 / 24 Minha comparac¸ao˜

Java class HelloWorldApp { public static void main(String[] args){ System.out.println("Hello World!"); } } Lisp (DEFUN HELLO () "Hello World!" ) Perl print "Hello World!\n"; Ruby puts "Hello World!"

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 9 / 24 Minha comparac¸ao˜

Java class HelloWorldApp { public static void main(String[] args){ System.out.println("Hello World!"); } } Lisp (DEFUN HELLO () "Hello World!" ) Perl print "Hello World!\n"; Ruby puts "Hello World!"

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 9 / 24 Minha comparac¸ao˜

Java class HelloWorldApp { public static void main(String[] args){ System.out.println("Hello World!"); } } Lisp (DEFUN HELLO () "Hello World!" ) Perl print "Hello World!\n"; Ruby puts "Hello World!"

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 9 / 24 Destaque

Metaprogramac¸ao˜ “Metaprogramming is writting code that writes code” 5. Biblioteca padrao˜ inclui modulos´ para: YAML, JSON, XML, CGI, OpenSSL, HTTP, FTP, RSS, curses, zlib, Tk, etc 6. Dispon´ıvel nas maiores plataformas de SO , Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, etc. Outras implementac¸oes˜ de Ruby - MRI (Matz’s Ruby Interpreter) JRuby, MacRuby, , , IronRuby, etc.

5Perrota, Paolo (2010). Metaprogramming Ruby: Program Like the Ruby Pros. The Pragmatic Programmers, LLC. 6Britt, James. “Ruby 2.0.0 Standard Documentation”. Retrieved 2013-12-09. Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 10 / 24 Summary

1 Introduc¸ao˜

2 Informac¸ao˜

3 Documentac¸ao˜

4 Projetos

5 Conclusao˜

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 11 / 24 Documentac¸ao˜

E´ poss´ıvel consultar documentac¸oes˜ para iniciantes, manuais, livros, lista de emails, referencias, API, bibliotecas, etc. Existem muita informac¸ao˜ livre na internet. 7

7Ruby-lang.org – Documentation Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 12 / 24 Summary

1 Introduc¸ao˜

2 Informac¸ao˜

3 Documentac¸ao˜

4 Projetos

5 Conclusao˜

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 13 / 24 Projetos

Alguns projetos legais feitos em Ruby 8: Sketchup: Aplicativo de modelagem 3D. Metasploit Framework: Ferramenta para explorac¸ao˜ de falhas de seguranc¸a. Ruby on Rais (RoR ou Rails): Meta Web Framework. Noosfero: Plataforma de redes sociais. : Gerenciador de Projetos. Spree: Web commerce. Weby: Gerenciador de Conteudo´ Web. ;-)

8Ruby-lang.org – Success-stories. Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 14 / 24 Summary

1 Introduc¸ao˜

2 Informac¸ao˜

3 Documentac¸ao˜

4 Projetos

5 Conclusao˜

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 15 / 24 Conclusao˜

Grupo de Usuarios.´ Lista de email e grupo de not´ıcias. IRC (salas de discussao˜ - mensagens instantaneas).ˆ Ruby core (Sistema de acompanhamento do projeto). Blogs, sites usuario´ e grupos. Aprendizado online 9. Conferencias.ˆ Envolva e divirtam-se!

9http://tryruby.org Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 16 / 24 Perguntas?

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 17 / 24 Ruby Uma Linguagem Atraente

Marcello Moura Diego Roriz Centro de Recursos Computacionais Katon Agenciaˆ Digital Universidade Federal de Goias´ (UFG) Avenida C-104, Quadra 317, Lote 02, Loja 04 Caixa Postal 131 – 74.001-970 Jardim America´ – 74.290-030 Goianiaˆ – GO – Brazil Goianiaˆ – GO – Brazil [email protected] [email protected]

Goiania,ˆ 20 de Novembro 2014

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 18 / 24 Diferenciais Iterac¸ao˜

Duas caracter´ısticas do Ruby que sao˜ um pouco diferente do que voceˆ pode ter visto antes, e que levam algum tempo para se acostumar, sao˜ ”blocos” e iteradores. Em vez de um loop sobre um ´ındice (como com C, C++ ou Java pre-1.5),´ ou sobre uma lista (como Perl para (a) ..., ou Python para i em aList:...), com Ruby voceˆ vai muitas vezes ao inves´ ver: alguma_lista.each do |item| # Estamos dentro de um bloco. # tratamos agora com item. end

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 19 / 24 Diferenciais Tudo tem um valor

Nao˜ ha´ diferenc¸a entre uma expressao˜ e uma declarac¸ao.˜ Tudo tem um valor, mesmo que o valor seja nulo. Isto e´ poss´ıvel: x= 10 y= 11 z= if x true

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 20 / 24 Diferenciais Argumentos

Como em Python, no Ruby 2.0 metodos´ podem ser definidos usando argumentos: def entregar(de: ’A’, para: nil, via: ’mail’) "Enviando de #{from} para #{to} via #{via}." end

entregar(para: ’B’) # => "Enviando de A para B via mail." entregar(via: ’Celular’, de: ’B’, para: ’A’) # => "Enviando de B para A via Celular."

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 21 / 24 Diferenciais Metodos´ de nomes intuitivos

Ruby possui metodos´ nativos com sinais como, por exemplo, pontos de interrogac¸ao˜ ou de exclamac¸ao.˜ a=[] a.empty? # => true

a=[’a’,’b’,’c’] a.reverse # => [’c’,’b’,’a’] a # => [’a’,’b’,’c’] a.reverse! a # => [’c’,’b’,’a’]

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 22 / 24 Diferenciais Mensagens

Uma chamada de metodo´ e´ realmente uma mensagem para outro objeto: # Acucar sintatico (syntactic sugar) 1+2 # Mesmo acima agora com sal sintatico # (syntactic salt) 1.+(2) # Que eh o mesmo que: 1.send "+",2

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 23 / 24 Diferenciais Classes abertas

Voceˆ pode abrir as classes para adicionar e modificar a qualquer momento. Mesmo para classes ancestrais como Fixnum ou mesmo Object. class Fixnum # Voce pode mas nao deveria fazer isso! def +(other) self- other end end =,.., ...,!, not,&&, and, ||, or, !=, !˜,:: # Esses nao podem ser redefinidos

Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 24 / 24