Palestra Ruby

2,656 views
2,579 views

Published on

Palestra sobre a linguagem de programação Ruby

Published in: Technology, Education
1 Comment
7 Likes
Statistics
Notes
No Downloads
Views
Total views
2,656
On SlideShare
0
From Embeds
0
Number of Embeds
74
Actions
Shares
0
Downloads
134
Comments
1
Likes
7
Embeds 0
No embeds

No notes for slide

Palestra Ruby

  1. 1. palestra = { :assunto => quot;Rubyquot;, :autor => quot;Cássio Marquesquot; }
  2. 2. Cássio Marques ➔ Programador ➔ Ruby, C, C++, Java, Perl e Javascript ➔ Computação Científica - Universidade de Taubaté – 2007 http://cassiomarques.wordpress.com
  3. 3. Antes de mais nada...
  4. 4. Esta não é uma palestra sobre Rails!
  5. 5. O que é Ruby?
  6. 6. Uma Linguagem de Programação... Interpretada Dinâmica Multi-paradigma Open-source
  7. 7. Interpretada Não é necessário compilar o código!
  8. 8. Dinâmica Em tempo de execução, é possível: Adicionar novo código Extender classes Extender objetos Alterar o sistema de tipos
  9. 9. Multi-paradigma Orientada a objetos Funcional Permite programação imperativa
  10. 10. Open-source Você pode... Olhar o código Estudar o código Alterar o código Melhorar o código
  11. 11. E ainda mais importante que isso tudo...
  12. 12. Não precisa de “ponto e vírgula”!
  13. 13. Origens
  14. 14. Criada no Japão por Yukihiro Matsumoto (Matz)
  15. 15. Fevereiro/1993 - idéias iniciais ➔ Versão 0.95 lançada no Japão em dezembro/1995. ➔ Versão 1.0 lançada oficialmente em dezembro/1996. ➔ Versão atual (stable) - Ruby 1.8.7 ➔
  16. 16. Mas... Porque esse cara inventou uma nova linguagem quando já existiam tantas outras?
  17. 17. Matz queria uma linguagem de script... Mais poderosa que Perl Mais orientada a objetos que Python Funcional como Lisp, Haskell e Scheme Que tivesse tudo o que ele sempre amou em Lisp, Eiffel e Smalltalk
  18. 18. E que fosse...
  19. 19. Aspectos centrais do Ruby
  20. 20. Expressividade Diga muito Seja claro Escreva menos código
  21. 21. Imprimir somente pares entre 1 e um número qualquer
  22. 22. C
  23. 23. #include <stdio.h> void imprime_pares(int limite) { int i; for(i = 1; i < = limite; i++) if(i%2 == 0) printf(quot;%dnquot;, i); }
  24. 24. Java
  25. 25. public void imprime_pares(int limite) { for(int i = 1; i <= limite; i++) if(i%2 == 0) System.out.println(i); }
  26. 26. Ruby
  27. 27. def imprime_pares(limite) 1.upto(limite) {|i| puts i if i%2 == 0} end
  28. 28. TUDO é um objeto
  29. 29. 3.times { puts quot;Olá!quot; } # Olá! # Olá! # Olá!
  30. 30. puts quot;Ruby eh supimpa!quot;.split.reverse # ==> [quot;supimpa!quot;, quot;ehquot;, quot;Rubyquot;]
  31. 31. true.class # <= TrueClass false.class # <= FalseClass nil.class # <= NilClass 0.123.class # <= Float
  32. 32. Características interessantes
  33. 33. Métodos
  34. 34. SEMPRE retornam algo, nem que seja nil. Em geral, o valor retornado é o resultado da última expressão do método.
  35. 35. def um_metodo def um_metodo end quot;Opa!quot; end um_metodo # nil um_metodo # quot;Opa!quot; def um_metodo 1 == 2 - 1 def um_metodo end (1..10).to_a end um_metodo # true um_metodo # [1,2,3,4,5,6,7,8,9,10]
  36. 36. Múltiplos retornos por método
  37. 37. def um_metodo return 1, 2, 3 end a, b, c = um_metodo puts a, b, c # 1 # 2 # 3
  38. 38. Duck typing
  39. 39. Classes não são tipos! Tipos são definidos com base no que um objeto pode fazer.
  40. 40. Duck typing “Se anda como um pato e fala como um pato, então é um pato!”
  41. 41. class Logger def initialize(file) @messages_file = file end def add_message(msg) @messages_file << msg + quot;nquot; end end
  42. 42. puts quot;com um arquivo...quot; log_file = File.new('logfile.txt', 'r+') logger = Logger.new(log_file) logger.add_message(quot;uma mensagemquot;) logger.add_message(quot;outra mensagemquot;) log_file.rewind puts log_file.readlines.join # uma mensagem # outra mensagem
  43. 43. puts quot;com uma stringquot; log_string = String.new logger = Logger.new(log_string) logger.add_message(quot;uma mensagemquot;) logger.add_message(quot;outra mensagemquot;) puts log_string # uma mensagem # outra mensagem
  44. 44. Metaprogramação
  45. 45. class Foo end Foo.class_eval do define_method(quot;blablaquot;) do |arg| puts arg end end f = Foo.new f.blabla(quot;123quot;) # 123
  46. 46. class Blergh def call_private_method private_method end private def private_method puts quot;Sou um método privado...quot; end end
  47. 47. b = Blergh.new b.call_private_method # Sou um método privado... b.private_method # meta.rb:15: private method `private_method' # called for #<Blergh:0xb7c3e940> (NoMethodError) b.send(:private_method) # Sou um método privado...
  48. 48. class Foo def method_missing(name) puts quot;Nao sei responder a #{name.to_s} :-(quot; end end f = Foo.new f.blabla # Nao sei responder a blabla :-(
  49. 49. DSLs Domain Specific Languages
  50. 50. describe quot;A Good Programmerquot; do it quot;should learn at least one new programming language per yearquot; do @programmer = Programmer.new('Bob') @programmer.should_receive(:learn_language).and_return(true) @programmer.known_languages << Language.new(quot;Rubyquot;) @programmer.known_languages.should have(3).items @programmer.status.should be_happy end it quot;should create automated tests for all code he writesquot; do @programmer.should_receive(:write_code).and_return(true) lambda { @programmer.write_code }.should change(@programmer.tests, :length).by(1) end end
  51. 51. Sanduíche de Margarina ingredientes: - Duas fatias de pão - Um pouco de margarina instruções - Espalhe margarina em um dos lados da fatia de pão - Coloque o pedaço com margarina junto com o pedaço sem margarina - Sirva Rende: Uma porção Tempo de preparo: 1 minuto
  52. 52. receita quot;Sanduiche de Margarinaquot; ingredientes quot;duas fatias de paoquot;, quot;um pouco de margarinaquot; instrucoes quot;Espalhe margarina em um dos...quot;, quot;coloque o pedaço com margarina...quot;, quot;Sirvaquot; rende 1.porcao tempo 1.minuto
  53. 53. Gems Pacotes com bibliotecas ou aplicações em Ruby Formato de empacotamento de código padronizado
  54. 54. RubyGems Instalação e remoção de gems e de suas dependências. Gerência de dependência de pacotes. Pesquisa e listagem de pacotes locais ou remotos. Suporte a múltiplas versões instaladas de um mesmo pacote. Interface simples para criação de novas gems. Servidores para distribuição de suas próprias gems.
  55. 55. #include quot;ruby.hquot; void Init_hello() { /* blablabla */ }
  56. 56. extconf.rb require 'mkmf' dir_config(quot;helloquot;) create_makefile(quot;helloquot;)
  57. 57. $ ruby extconf.rb creating Makefile $ make gcc -fPIC -Wall -g -O2 -fPIC -I. -I/usr/lib/ruby/1.8/i486-linux -I/usr/lib/ruby/1.8/i486-linux -I. -c hello.c gcc -shared -Lquot;/usr/libquot; -o hello.so hello.o -lruby1.8 -lpthread -ldl -lcrypt -lm -lc $ ls extconf.rb hello.c hello.o hello.so Makefile
  58. 58. Para usar...
  59. 59. require 'hello'
  60. 60. Implementações do interpretador Ruby
  61. 61. MRI Matz Ruby Interpreter
  62. 62. JRuby Implementação em Java do interpretador Ruby Permite utilizar bibliotecas Java dentro do código Ruby
  63. 63. Rubinius Implementação em C++ e Ruby do interpretador Ruby
  64. 64. IronRuby Implementação em .NET do interpretador Ruby
  65. 65. Testes Automatizados Web Desktop Scripting Computação Científica Inteligência Artificial Bioinformática Etc, etc, etc...
  66. 66. Plataformas Suportadas
  67. 67. • Mac OS X (all varieties) • Linux (all varieties) • MS-DOS • BSDs (including FreeBSD and OpenBSD) • Acorn RISC OS • Microsoft Windows 95, 98, XP and Vista (all varieties) , • OS/2 • Amiga • Celulares Symbian Series 60 • Qualquer plataforma para a qual exista uma Máquina Virtual Java (Usando JRuby ao invés do interpretador Ruby oficial)
  68. 68. Mercado de Trabalho
  69. 69. Ainda não é tão grande quanto o mercado de trabalho para Java, .NET, etc No Brasil, ainda cresce mais lentamente do que nos EUA e na Europa. O Brasil demora a aceitar novas tecnologias. O maior uso do Ruby no Brasil e no mundo é através do framework Web Ruby on Rails. Tem sido uma das linguagens mais utilizadas por start-ups de tecnologia
  70. 70. Como aprender?
  71. 71. Dezenas de livros (alguns existem em Português, a grande maioria somente em Inglês) Comunidade ativa, com inúmeros blogs, fóruns e listas de discussão
  72. 72. Alguns endereços na internet http://rubycorner.com/ - Lista de blogs sobre Ruby http://www.rubyinside.com/ - site de notícias sobre Ruby http://rubyonbr.org/ - site brasileiro com notícias sobre Ruby http://groups.google.com/group/rails-br - lista de discussão brasileira sobre Ruby e Rails http://ruby-br.org/ - site brasileiro com notícias sobre Ruby
  73. 73. ? Perguntas
  74. 74. OBRIGADO!

×