Ruby André Braga Patrícia Lustosa Yukihiro Matsumoto (“Matz”), 1993 Perl Smalltalk Eiffel Ada Lisp Simplicidade e Produtividade Para pessoas – Sintaxe elegante e fácil – Fácil de ler e escrever – Poderosa Interpretada Tipagem dinâmica OO : TUDO é objeto – Sem tipos primitivos. Convenções • Classes e Módulos MinhaClasse • Métodos meu_metodo_legal • Variáveis locais minha_variavel • Variáveis de instância @var_de_instancia Programando • IRB (Interactive Ruby) • SciTE (editor) – F5 para executar 1) Tudo é objeto Orientação a Objetos • Como em Smalltalk, tudo é objeto • C++ e Java: híbridas – Objetos e tipos primitivos Mais eficiente para algumas aplicações, mas… OO puro é mais consistente e fácil de usar Orientação a Objetos • • • • Tipos primitivos: -1.abs Nil: nil.methods Classes: Song.new Blocos: podem até ser passados como parâmetros 2) Variáveis Variáveis • Podem ser – locais – globais – de instância – ou estáticas localVar = 2 $globalVar = “3” @instaceVar = 4.3 @@staticVar = [2,3] • E podem ser constantes Pi = 3.1416 Name = “Ruby” Escopo Constantes 3) Tipos String Number Symbol Array Hash • Aspas simples ou duplas Permitem interpolação #{expressão}: def metodo_qualquer(nome) puts “O nome é: #{nome}” end String Number Symbol Array Hash Caracteres de escape \” \\ \a bell/alert \b backspace \r carriage return \n \s \t String Number Symbol Array Hash Alguns métodos concat, <<, + <=>, ==, eql? include? length, size to_f, to_i float/int to_s de outros tipos String Number Symbol Array Hash >> puts “hello,\nworld” hello, World >>%w(a b c) (separa nos espaços em branco) => [“a”, “b”, “c”] String Number Symbol Array Hash • Fixnum – Inteiros entre -230 and 230-1 • Bignum – Fora do intervalo de Fixnum, “infinitos”. Limite 18 2 aproximado: 2 • Float • Conversão automática String Number Symbol Array Hash • Como tudo é objeto… operadores são açucares sintáticos! 4 + 7 4.+(7) >> >> >> >> var_a = 300 var_a.class var_a += 40832000000 var_a.class => => => => 300 Fixnum 40832000300 Bignum String Number Symbol Array Hash • Representação interna de um nome • Atômico, imutável e único – Todas as referências para um único objeto >> :my_value.equal?(:my_value) => true >> “my_value”.equal?(“my_value”) => false String Number Symbol Array Hash • Economia de memória! • Fáceis de usar, fica mais bonito… • Uso: – Hash keys (:name=> ‘Brian’, :hobby=> ‘golf’) – Parâmetros (:name, :title) – Nomes de métodos (:post_comment) String Number Symbol Array Hash • Arrays – [“a”, “b”, 3, 5.6] • Hash – Chaves apotando para valores – Cada chave é única – Hash.new ou meu_hash={“a” => 1, “b”=>2} 4) Palavras Reservadas Reserved Keywords =begin =end alias and begin BEGIN break case class def defined? do else elsif END end ensure false for if in module next nil not or redo rescue retry return self super then true undef unless until when while yield 5) Estruturas de Controle Condicionais Condicionais Loop Loop Loop 6) Classes Definindo Classes Instanciação • Uma instância é criada a partir de uma classe usando o método new (de Class) anObject = MyClass.new(parameters) • Essa função constrói um objeto na memória e passa a execução para a função initialize da classe, se houver. Exemplo Variáveis de Instância >ruby rocketShip.rb rocketShip.rb:13: undefined method `destination' for #<RocketShip:0x27f5510 @destination="Netptune"> (NoMethodError) >Exit code: 1 Writers and Readers Accessors Herança • Suporte à herança simples • Todos os atributos e métodos não-privados de super-classe são herdados pela sub-classe. Herança Módulos • Módulos são coleções de métodos • Classes podem ´mixin´ um módulo e receber todos os métodos do módulo diretamente • Simulam herança múltipla Comparable < Módulo > <= >= Classe <=> == between Comparable pessoa.rb:19: undefined method `<' for #<Pessoa:0x27f4688 @nome="Paty", @idade=21> (NoMethodError) Incluindo Comparable 7) Expressões Regulares /regex/ • Casamento de padrões Abreviação Significado Oposto \d [0-9] \D \s Espaço em branco \S \w [A-Za-z0-9_] \W . Qualquer caracter /(c|C)omp\w+.*s/ retorna a posição retorna o que casou