Começando com Ruby - III SEICOM
-
Upload
kenner-kliemann -
Category
Technology
-
view
101 -
download
2
Transcript of Começando com Ruby - III SEICOM
Compilando
ruby-lang.org/en/downloads/
$ tar xfv ruby-2.1.3.tar.gz
Ruby Version Manager
RVM é uma ferramenta de linha de comando que permite instalar, gerenciar e trabalhar com múltiplas versões de ruby e diversos conjuntos de gems.
“Ruby está projetado para fazer os programadores felizes.”
Yukihiro “Matz” Matsumoto - Criador do Ruby
Ruby
● Interpretada (YARV)● Totalmente Orientada a Objetos● Dinâmica● Fortemente Tipada● Gramática complexa, mas expressiva● Uma $ RICA $ Core API● Inspirada em Smalltalk, Lisp e Perl
Types
value = 123 # => Fixnum
value = “1234” # => String
number = 1234string = “I’m a string”
# Podemos somar ?
puts number + string# => TypeError: String can't be coerced into Fixnum
Duck Typing
“Se anda como um pato e faz barulho como um pato, então de deve ser um pato. E o interpretador ficará feliz em fazer com que o objeto seja tratado como um pato. Na prática, isso significa que em vez de fazer verificações de tipo de um objeto, você deve se preocupar se este objeto é capaz de executar o método que você precisa.”
- Nando Vieira
Duck Typing
class Marmot def initialize(message) @message = message end
def quack puts “Quack: #{@message}” endend
class Duck def initialize @name = “John Doe” end
def quack puts “Quack, my name is #{@name}” endend
duck_1 = Marmot.new “Marmots”duck_2 = Duck.new
duck_1.quack # => “Quack: Marmots”duck_2.quack # => “Quack, my name is John Doe”
Strings
message = “Galera!”o_message = ‘Hey’
o_message + “, e” + “ ai ” + message
#=> “Hey, e ai Galera!”
Strings
message = “Galera!”o_message = ‘Hey’
“#{o_message}, e ai #{message}”#=> “Hey, e ai Galera!”
“Agora somando #{3 + 5}”#=> “Agora somando 8”
Arrays
items = [ 1, “String”, 1.0, [ 2, 3], nil ]# => [ 1, “String”, 1.0, [ 2, 3], nil ]
items[0] <=> items.first# => 1
items = Array.new# => [ ]
items = Array.new([ 1, 2, 3 ])# => [ 1, 2, 3 ]
words = %w[aa bb cc dd ee ff]# => [ “aa”, “bb”, “cc”, “dd”, “ee”, “ff” ]
words[1]# => “bb”
Hash
hash = { name: “John”, last_name: “Doe”, zombie: false, age: 1e10 }
# => { name: “John”, last_name: “Doe”, zombie: false, age: 1e10 }
hash[:name]# => “John”
hash[:new_value] = { b: “something”, ‘another_value’ => “wow” }
hash.inspect# => { name: “John”, last_name: “Doe”, zombie: false, age: 1e10, { b: “something”, ‘another_value’ => “wow” } }
Classesmodule Zombie class Zombie def initialize @name = "John Doe" @brains_eaten = 0 end def tweet "I want brains!" end def eat(n = 1) @brains_eaten += n end def rooting "Yeap" end def status { :status => "I just ate some delicious brains",
:zombie => @name } end endend
Herança
Obs: ‘Não existe herança múltipla em ruby’
class Walker < Zombie def walk # do something endend
Mixinsmodule SuperHero def super_powers # Do something endend
module Fly def fly #Do something endend
class Goku include SuperHero include Fly
def saiyan @@force *= :infinite endend
class Hulk include SuperHero
def say "Hulk smash!" endend
Self e SingletonClass
Métodos de classe não existem no Ruby!
Pelo menos não no sentido de métodos estáticos.O que acontece é que estes métodos pertencem a um objeto, que por acaso é uma classe.
- Nando Vieira
E o que mais?
● Condicionais (if, else, elseif, unless)● Seletor Múltiplo (Case)● Estruturas de repetição(for...in, while..until, loop)● Iteradores (Enumerator, Iterator)● Closures● Procs e Lambdas● Variáveis (Classe, instância)● Constantes● CallBacks● Monkey Patching e Refinements
github.com/gnomex@KennerKliemann
slideshare/kennerkliemannlinkedin.com/in/kennerkliemann