Ruby Uma Linguagem Atraente - UFG · Ruby e outras linguagem Ruby e duas partes Perl, uma parte...

27
Ruby Uma Linguagem Atraente Marcello Moura Diego Roriz Centro de Recursos Computacionais Katon Ag ˆ encia Digital Universidade Federal de Goi´ as (UFG) Avenida C-104, Quadra 317, Lote 02, Loja 04 Caixa Postal 131 – 74.001-970 Jardim Am´ erica – 74.290-030 Goi ˆ ania – GO – Brazil Goi ˆ ania – GO – Brazil [email protected] [email protected] Goi ˆ ania, 20 de Novembro 2014 Marcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 1 / 24

Transcript of Ruby Uma Linguagem Atraente - UFG · Ruby e outras linguagem Ruby e duas partes Perl, uma parte...

Page 1: Ruby Uma Linguagem Atraente - UFG · 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

RubyUma Linguagem Atraente

Marcello Moura Diego RorizCentro de Recursos Computacionais Katon Agencia DigitalUniversidade Federal de Goias (UFG) Avenida C-104, Quadra 317, Lote 02, Loja 04

Caixa Postal 131 – 74.001-970 Jardim America – 74.290-030Goiania – GO – Brazil Goiania – GO – Brazil

[email protected] [email protected]

Goiania, 20 de Novembro 2014

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

Page 2: Ruby Uma Linguagem Atraente - UFG · 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

Sumario

1 Introducao

2 Informacao

3 Documentacao

4 Projetos

5 Conclusao

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

Page 3: Ruby Uma Linguagem Atraente - UFG · 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

Sumario

1 Introducao

2 Informacao

3 Documentacao

4 Projetos

5 Conclusao

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

Page 4: Ruby Uma Linguagem Atraente - UFG · 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

Introducao

Ruby 1 e uma linguagem de programacao dinamica e livre comfoco em simplicidade e produtividade. Ela tem uma elegantesintaxe que e natural para se ler e facil de escrever.

1David Flanagan and Yukihiro Matsumoto. The Ruby ProgrammingLanguage. O’Reilly Media, Incorporated, 2008.

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

Page 5: Ruby Uma Linguagem Atraente - UFG · 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

Summary

1 Introducao

2 Informacao

3 Documentacao

4 Projetos

5 Conclusao

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

Page 6: Ruby Uma Linguagem Atraente - UFG · 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

Informacao

Ja esteve entre as 10 linguagem mais utilizadas no rankingTiobe. Atualmente na posicao 14 (Nov. 2014).

Matz disse, “I wanted a scripting language that was morepowerful than Perl, and more object-oriented thanPython.” 2.

Ruby uma linguagem cuidadosamente balanceada. Matzafirma que ela mescla partes de sua linguagem favorita(Perl, Smalltalk, Eiffel, Ada, e Lisp) para formar uma novalinguagem que balanceia programacao funcional comimperativa.

Alem disso: altamente legıvel, extremamente portavel, efacilmente extensıvel.

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

Page 7: Ruby Uma Linguagem Atraente - UFG · 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

Extensao

E possıvel instalar bibliotecas para estender as funcionalidadesda linguagem.

Existe na biblioteca padrao mais 100 bibliotecas incluıdasna distribuicao da versao 1.9.x. Atualmente v2.1.5.

Existem repositorios de bibliotecas externas, as maisconhecidas sao: RubyGems, Github e RubyForge.Uso e muito simples:

gem search <palavra-chave>gem install <biblioteca>gem help

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

Page 8: Ruby Uma Linguagem Atraente - UFG · 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

Ruby e outras linguagem

Ruby e duas partes Perl, uma parte Python, e uma parte deSmalltalk, 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

Page 9: Ruby Uma Linguagem Atraente - UFG · 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

Minha comparacao

Javaclass HelloWorldApp {public static void main(String[] args) {System.out.println("Hello World!");

}}

Lisp(DEFUN HELLO ()

"Hello World!")

Perlprint "Hello World!\n";

Rubyputs "Hello World!"

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

Page 10: Ruby Uma Linguagem Atraente - UFG · 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

Minha comparacao

Javaclass HelloWorldApp {public static void main(String[] args) {System.out.println("Hello World!");

}}

Lisp(DEFUN HELLO ()

"Hello World!")

Perlprint "Hello World!\n";

Rubyputs "Hello World!"

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

Page 11: Ruby Uma Linguagem Atraente - UFG · 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

Minha comparacao

Javaclass HelloWorldApp {public static void main(String[] args) {System.out.println("Hello World!");

}}

Lisp(DEFUN HELLO ()

"Hello World!")

Perlprint "Hello World!\n";

Rubyputs "Hello World!"

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

Page 12: Ruby Uma Linguagem Atraente - UFG · 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

Minha comparacao

Javaclass HelloWorldApp {public static void main(String[] args) {System.out.println("Hello World!");

}}

Lisp(DEFUN HELLO ()

"Hello World!")

Perlprint "Hello World!\n";

Rubyputs "Hello World!"

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

Page 13: Ruby Uma Linguagem Atraente - UFG · 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

Destaque

Metaprogramacao“Metaprogramming is writting code that writes code” 5.

Biblioteca padraoinclui modulos para: YAML, JSON, XML, CGI, OpenSSL,HTTP, FTP, RSS, curses, zlib, Tk, etc 6.

Disponıvel nas maiores plataformas de SOUNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS,BeOS, OS/2, etc.

Outras implementacoes de Ruby - MRI (Matz’s RubyInterpreter)

JRuby, MacRuby, Rubinius, mruby, IronRuby, etc.

5Perrota, Paolo (2010). Metaprogramming Ruby: Program Like the RubyPros. The Pragmatic Programmers, LLC.

6Britt, James. “Ruby 2.0.0 Standard Library Documentation”. Retrieved2013-12-09.

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

Page 14: Ruby Uma Linguagem Atraente - UFG · 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

Summary

1 Introducao

2 Informacao

3 Documentacao

4 Projetos

5 Conclusao

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

Page 15: Ruby Uma Linguagem Atraente - UFG · 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

Documentacao

E possıvel consultar documentacoes para iniciantes, manuais,livros, lista de emails, referencias, API, bibliotecas, etc. Existemmuita informacao livre na internet. 7

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

Page 16: Ruby Uma Linguagem Atraente - UFG · 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

Summary

1 Introducao

2 Informacao

3 Documentacao

4 Projetos

5 Conclusao

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

Page 17: Ruby Uma Linguagem Atraente - UFG · 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

Projetos

Alguns projetos legais feitos em Ruby 8:

Sketchup: Aplicativo de modelagem 3D.

Metasploit Framework: Ferramenta para exploracao defalhas de seguranca.Ruby on Rais (RoR ou Rails): Meta Web Framework.

Noosfero: Plataforma de redes sociais.Redmine: 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

Page 18: Ruby Uma Linguagem Atraente - UFG · 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

Summary

1 Introducao

2 Informacao

3 Documentacao

4 Projetos

5 Conclusao

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

Page 19: Ruby Uma Linguagem Atraente - UFG · 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

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.orgMarcello Moura, Diego Roriz Ruby – Uma Linguagem Atraente 16 / 24

Page 20: Ruby Uma Linguagem Atraente - UFG · 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

Perguntas?

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

Page 21: Ruby Uma Linguagem Atraente - UFG · 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

RubyUma Linguagem Atraente

Marcello Moura Diego RorizCentro de Recursos Computacionais Katon Agencia DigitalUniversidade Federal de Goias (UFG) Avenida C-104, Quadra 317, Lote 02, Loja 04

Caixa Postal 131 – 74.001-970 Jardim America – 74.290-030Goiania – GO – Brazil Goiania – GO – Brazil

[email protected] [email protected]

Goiania, 20 de Novembro 2014

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

Page 22: Ruby Uma Linguagem Atraente - UFG · 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

DiferenciaisIteracao

Duas caracterısticas do Ruby que sao um pouco diferente doque voce pode ter visto antes, e que levam algum tempo parase acostumar, sao ”blocos” e iteradores.Em vez de um loop sobre um ındice (como com C, C++ ou Javapre-1.5), ou sobre uma lista (como Perl para (a) ..., ou Pythonpara i em aList:...), com Ruby voce vai muitas vezes ao invesver:

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

Page 23: Ruby Uma Linguagem Atraente - UFG · 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

DiferenciaisTudo tem um valor

Nao ha diferenca entre uma expressao e uma declaracao. Tudotem um valor, mesmo que o valor seja nulo. Isto e possıvel:

x = 10y = 11z = if x < y

trueelsefalse

endz # => true

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

Page 24: Ruby Uma Linguagem Atraente - UFG · 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

DiferenciaisArgumentos

Como em Python, no Ruby 2.0 metodos podem ser definidosusando 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

Page 25: Ruby Uma Linguagem Atraente - UFG · 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

DiferenciaisMetodos de nomes intuitivos

Ruby possui metodos nativos com sinais como, por exemplo,pontos de interrogacao ou de exclamacao.

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

Page 26: Ruby Uma Linguagem Atraente - UFG · 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

DiferenciaisMensagens

Uma chamada de metodo e realmente uma mensagem paraoutro 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

Page 27: Ruby Uma Linguagem Atraente - UFG · 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

DiferenciaisClasses abertas

Voce pode abrir as classes para adicionar e modificar aqualquer momento. Mesmo para classes ancestrais comoFixnum ou mesmo Object.

class Fixnum# Voce pode mas nao deveria fazer isso!def +(other)self - other

endend

=, .., ..., !, not, &&, and, ||, or, !=, !˜, ::# Esses nao podem ser redefinidos

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