46
CELTAB Centro Latino-Americano de Tecnologias Abertas

Começando com Ruby - III SEICOM

Embed Size (px)

Citation preview

CELTABCentro Latino-Americano de Tecnologias Abertas

RubyCOMEÇANDO COM RUBY: DOS CONCEITOS AO PRIMEIRO CÓDIGO

SEICOM + ruby

Por que ruby ?!

● O que é o ruby?● Onde e como nasceu?● Para que serve?

Ruby Outras LPs

Vamos instalar o ruby?

OBS: SO GNU/Linux!

Apt-get

apt-get install ruby-1.9.3

apt-get install ruby-2.1

???

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.

rvm.io

$ \curl -sSL https://get.rvm.io | bash -s stable

“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

➔ Scripts➔ Programação OO➔ Programação Funcional➔ Metaprogramação

Em ruby, tudo é objeto, sem exceções!

Variáveis não são objetos…

… elas fazem referências a eles

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”

Números

Números

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” } }

Symbols

Expressões regulares

Módulos

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

Como continuar?

Try ruby!

tryruby.org

Como continuar?

codeschool.com/paths/ruby

github.com/markets/awesome-ruby

lista de 100+ ferramentas ruby para tudo!

github.com/bbatsov/ruby-style-guide

De quem “manja” para a comunidade!

Considerações finais

[email protected]

github.com/gnomex@KennerKliemann

slideshare/kennerkliemannlinkedin.com/in/kennerkliemann