Palestra Ruby

81
palestra = { :assunto => "Ruby", :autor => "Cássio Marques" }

description

Palestra sobre a linguagem de programação Ruby

Transcript of Palestra Ruby

Page 1: Palestra Ruby

palestra = { :assunto => "Ruby", :autor => "Cássio Marques"}

Page 2: Palestra Ruby

Cássio Marques➔ Programador➔ Ruby, C, C++, Java, Perl e Javascript➔ Computação Científica - Universidade de Taubaté 2007–

http://cassiomarques.wordpress.com

Page 3: Palestra Ruby

Antes de mais nada...

Page 4: Palestra Ruby

Esta não é uma palestra sobre Rails!

Page 5: Palestra Ruby

O que é Ruby?

Page 6: Palestra Ruby

Uma Linguagem de Programação...

Interpretada

Open-source

Multi-paradigma

Dinâmica

Page 7: Palestra Ruby

Interpretada

Não é necessário compilar o código!

Page 8: Palestra Ruby
Page 9: Palestra Ruby

DinâmicaEm tempo de execução, é possível:

Adicionar novo código

Extender objetos

Extender classes

Alterar o sistema de tipos

Page 10: Palestra Ruby

Multi-paradigmaOrientada a objetos

Funcional

Permite programação imperativa

Page 11: Palestra Ruby

Open-source

Olhar o código

Alterar o códigoEstudar o código

Você pode...

Melhorar o código

Page 12: Palestra Ruby

E ainda mais importante que isso tudo...

Page 13: Palestra Ruby

Não precisa de ponto e vírgula !“ ”

Page 14: Palestra Ruby

Origens

Page 15: Palestra Ruby

Criada no Japão por Yukihiro Matsumoto (Matz)

Page 16: Palestra Ruby

➔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

Page 17: Palestra Ruby

Mas...Porque esse cara inventou uma nova

linguagem quando já existiam tantas outras?

Page 18: Palestra Ruby

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

Page 19: Palestra Ruby

E que fosse...

Page 20: Palestra Ruby
Page 21: Palestra Ruby

Aspectos centrais do Ruby

Page 22: Palestra Ruby

ExpressividadeDiga muito

Seja claro

Escreva menos código

Page 23: Palestra Ruby

Imprimir somente pares entre 1 e um número

qualquer

Page 24: Palestra Ruby

C

Page 25: Palestra Ruby

#include <stdio.h>

void imprime_pares(int limite){ int i; for(i = 1; i < = limite; i++) if(i%2 == 0) printf("%d\n", i);}

Page 26: Palestra Ruby

Java

Page 27: Palestra Ruby

public void imprime_pares(int limite) { for(int i = 1; i <= limite; i++) if(i%2 == 0) System.out.println(i);}

Page 28: Palestra Ruby

Ruby

Page 29: Palestra Ruby

def imprime_pares(limite) 1.upto(limite) {|i| puts i if i%2 == 0}end

Page 30: Palestra Ruby

TUDO é um objeto

Page 31: Palestra Ruby

3.times { puts "Olá!" }

# Olá!# Olá!# Olá!

Page 32: Palestra Ruby

puts "Ruby eh supimpa!".split.reverse

# ==> ["supimpa!", "eh", "Ruby"]

Page 33: Palestra Ruby

true.class # <= TrueClassfalse.class # <= FalseClassnil.class # <= NilClass0.123.class # <= Float

Page 34: Palestra Ruby

Característicasinteressantes

Page 35: Palestra Ruby

Métodos

Page 36: Palestra Ruby

SEMPRE retornam algo, nem que seja nil. Em geral, o valor retornado é o resultado da última expressão do método.

Page 37: Palestra Ruby

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]

Page 38: Palestra Ruby

Múltiplos retornos por método

Page 39: Palestra Ruby

def um_metodo return 1, 2, 3end

a, b, c = um_metodo

puts a, b, c# 1# 2# 3

Page 40: Palestra Ruby

Duck typing

Page 41: Palestra Ruby
Page 42: Palestra Ruby

Classes não são tipos!

Tipos são definidos com base no que um objeto pode fazer.

Page 43: Palestra Ruby

Duck typing

“Se anda como um pato e fala como um pato, então é um pato!”

Page 44: Palestra Ruby

class Logger def initialize(file) @messages_file = file end def add_message(msg) @messages_file << msg + "\n" end end

Page 45: Palestra Ruby

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

Page 46: Palestra Ruby

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

Page 47: Palestra Ruby

Metaprogramação

Page 48: Palestra Ruby

class Fooend

Foo.class_eval do define_method("blabla") do |arg|

puts arg end

end

f = Foo.newf.blabla("123")# 123

Page 49: Palestra Ruby

class Blergh def call_private_method private_method end private def private_method puts "Sou um método privado..." endend

Page 50: Palestra Ruby

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...

Page 51: Palestra Ruby

class Foo def method_missing(name) puts "Nao sei responder a #{name.to_s} :-(" endend

f = Foo.newf.blabla# Nao sei responder a blabla :-(

Page 52: Palestra Ruby
Page 53: Palestra Ruby

DSLs

DomainSpecific

Languages

Page 54: Palestra Ruby

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

Page 55: Palestra Ruby

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

Page 56: Palestra Ruby

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

Page 57: Palestra Ruby
Page 58: Palestra Ruby

Gems

Formato de empacotamento de código padronizado

Pacotes com bibliotecas ou aplicações em Ruby

Page 59: Palestra 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

Page 60: Palestra Ruby
Page 61: Palestra Ruby

#include "ruby.h"

void Init_hello(){ /* blablabla */}

Page 62: Palestra Ruby

require 'mkmf'

dir_config("hello")

create_makefile("hello")

extconf.rb

Page 63: Palestra Ruby

$ 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

Page 64: Palestra Ruby

Para usar...

Page 65: Palestra Ruby

require 'hello'

Page 66: Palestra Ruby

Implementações do interpretador Ruby

Page 67: Palestra Ruby

MRI

Matz Ruby Interpreter

Page 68: Palestra Ruby

JRubyImplementação em Java do

interpretador Ruby

Permite utilizar bibliotecas Java dentro do código Ruby

Page 69: Palestra Ruby

RubiniusImplementação em C++ e Ruby do

interpretador Ruby

Page 70: Palestra Ruby

Implementação em .NET do interpretador Ruby

IronRuby

Page 71: Palestra Ruby
Page 72: Palestra Ruby

Desktop

Web

Computação Científica

Bioinformática

Inteligência Artificial

Scripting

Testes Automatizados

Etc, etc, etc...

Page 73: Palestra Ruby

Plataformas Suportadas

Page 74: Palestra Ruby

• 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)

Page 75: Palestra Ruby

Mercado de Trabalho

Page 76: Palestra Ruby

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

Page 77: Palestra Ruby

Como aprender?

Page 78: Palestra Ruby

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

Page 79: Palestra Ruby

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

Page 80: Palestra Ruby

?Perguntas

Page 81: Palestra Ruby

OBRIGADO!