Palestra Ruby
-
Upload
cassio-marques -
Category
Technology
-
view
2.442 -
download
0
description
Transcript of Palestra Ruby
palestra = { :assunto => "Ruby", :autor => "Cássio Marques"}
Cássio Marques➔ Programador➔ Ruby, C, C++, Java, Perl e Javascript➔ Computação Científica - Universidade de Taubaté 2007–
http://cassiomarques.wordpress.com
Antes de mais nada...
Esta não é uma palestra sobre Rails!
O que é Ruby?
Uma Linguagem de Programação...
Interpretada
Open-source
Multi-paradigma
Dinâmica
Interpretada
Não é necessário compilar o código!
DinâmicaEm tempo de execução, é possível:
Adicionar novo código
Extender objetos
Extender classes
Alterar o sistema de tipos
Multi-paradigmaOrientada a objetos
Funcional
Permite programação imperativa
Open-source
Olhar o código
Alterar o códigoEstudar o código
Você pode...
Melhorar o código
E ainda mais importante que isso tudo...
Não precisa de ponto e vírgula !“ ”
Origens
Criada no Japão por Yukihiro Matsumoto (Matz)
➔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
Mas...Porque esse cara inventou uma nova
linguagem quando já existiam tantas outras?
Matz queria uma linguagem de script...
Mais poderosa que Perl
Mais orientada a objetos que Python
Que tivesse tudo o que ele sempre amou em Lisp, Eiffel e Smalltalk
Funcional como Lisp, Haskell e Scheme
E que fosse...
Aspectos centrais do Ruby
ExpressividadeDiga muito
Seja claro
Escreva menos código
Imprimir somente pares entre 1 e um número
qualquer
C
#include <stdio.h>
void imprime_pares(int limite){ int i; for(i = 1; i < = limite; i++) if(i%2 == 0) printf("%d\n", i);}
Java
public void imprime_pares(int limite) { for(int i = 1; i <= limite; i++) if(i%2 == 0) System.out.println(i);}
Ruby
def imprime_pares(limite) 1.upto(limite) {|i| puts i if i%2 == 0}end
TUDO é um objeto
3.times { puts "Olá!" }
# Olá!# Olá!# Olá!
puts "Ruby eh supimpa!".split.reverse
# ==> ["supimpa!", "eh", "Ruby"]
true.class # <= TrueClassfalse.class # <= FalseClassnil.class # <= NilClass0.123.class # <= Float
Característicasinteressantes
Métodos
SEMPRE retornam algo, nem que seja nil. Em geral, o valor retornado é o resultado da última expressão do método.
def um_metodo end
um_metodo# nil
def um_metodo 1 == 2 - 1end
um_metodo# true
def um_metodo "Opa!"end
um_metodo# "Opa!"
def um_metodo (1..10).to_aend
um_metodo# [1,2,3,4,5,6,7,8,9,10]
Múltiplos retornos por método
def um_metodo return 1, 2, 3end
a, b, c = um_metodo
puts a, b, c# 1# 2# 3
Duck typing
Classes não são tipos!
Tipos são definidos com base no que um objeto pode fazer.
Duck typing
“Se anda como um pato e fala como um pato, então é um pato!”
class Logger def initialize(file) @messages_file = file end def add_message(msg) @messages_file << msg + "\n" end end
puts "com um arquivo..."log_file = File.new('logfile.txt', 'r+')logger = Logger.new(log_file)logger.add_message("uma mensagem")logger.add_message("outra mensagem")log_file.rewindputs log_file.readlines.join
# uma mensagem# outra mensagem
puts "com uma string"log_string = String.newlogger = Logger.new(log_string)logger.add_message("uma mensagem")logger.add_message("outra mensagem")puts log_string
# uma mensagem# outra mensagem
Metaprogramação
class Fooend
Foo.class_eval do define_method("blabla") do |arg|
puts arg end
end
f = Foo.newf.blabla("123")# 123
class Blergh def call_private_method private_method end private def private_method puts "Sou um método privado..." endend
b = Blergh.newb.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...
class Foo def method_missing(name) puts "Nao sei responder a #{name.to_s} :-(" endend
f = Foo.newf.blabla# Nao sei responder a blabla :-(
DSLs
DomainSpecific
Languages
describe "A Good Programmer" do it "should learn at least one new programming language per year" do @programmer = Programmer.new('Bob') @programmer.should_receive(:learn_language).and_return(true) @programmer.known_languages << Language.new("Ruby") @programmer.known_languages.should have(3).items @programmer.status.should be_happy end it "should create automated tests for all code he writes" do @programmer.should_receive(:write_code).and_return(true) lambda { @programmer.write_code }.should change(@programmer.tests, :length).by(1) endend
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
receita "Sanduiche de Margarina"
ingredientes "duas fatias de pao", "um pouco de margarina"
instrucoes "Espalhe margarina em um dos...", "coloque o pedaço com margarina...", "Sirva" rende 1.porcaotempo 1.minuto
Gems
Formato de empacotamento de código padronizado
Pacotes com bibliotecas ou aplicações em Ruby
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.
RubyGems
#include "ruby.h"
void Init_hello(){ /* blablabla */}
require 'mkmf'
dir_config("hello")
create_makefile("hello")
extconf.rb
$ ruby extconf.rbcreating Makefile$ makegcc -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.cgcc -shared -L"/usr/lib" -o hello.so hello.o -lruby1.8 -lpthread -ldl -lcrypt -lm -lc
$ lsextconf.rb hello.c hello.o hello.so Makefile
Para usar...
require 'hello'
Implementações do interpretador Ruby
MRI
Matz Ruby Interpreter
JRubyImplementação em Java do
interpretador Ruby
Permite utilizar bibliotecas Java dentro do código Ruby
RubiniusImplementação em C++ e Ruby do
interpretador Ruby
Implementação em .NET do interpretador Ruby
IronRuby
Desktop
Web
Computação Científica
Bioinformática
Inteligência Artificial
Scripting
Testes Automatizados
Etc, etc, etc...
Plataformas Suportadas
• 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)
Mercado de Trabalho
Ainda não é tão grande quanto o mercado de trabalho para Java, .NET, etc
O maior uso do Ruby no Brasil e no mundo é através do framework Web Ruby on Rails.
No Brasil, ainda cresce mais lentamente do que nos EUA e na Europa. O Brasil demora a aceitar novas tecnologias.
Tem sido uma das linguagens mais utilizadas por start-ups de tecnologia
Como aprender?
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
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://ruby-br.org/ - site brasileiro com notícias sobre Ruby
http://groups.google.com/group/rails-br - lista de discussão brasileira sobre Ruby e Rails
Alguns endereços na internet
?Perguntas
OBRIGADO!