ter uma Orientação a Objeto genuína, eu procurei linguagens com esse intuito no mercado e não encontrei nenhuma. Eu queria minimizar minha frustração enquanto programava. A programming language for human beings - Matz
e faz barulho como um pato, então deve ser um pato. "Hello" + 42 // Hello42 10 + true // 11 "10" + 2.5 // "102.5" "Hello" + 42 # TypeError: no implicit conversion of Fixnum into String 10 + true # TypeError: true can't be coerced into Fixnum "10" + 2.5 # TypeError: no implicit conversion of Float into String Ruby Javascript
e não se usa chaves "{ }" para delimitar os métodos. def say_hello(nome) puts("Olá #{nome}"); end say_hello("Matheus"); def feevale() puts("Olá Feevale"); end feevale();
e não se usa chaves "{ }" para delimitar os métodos. def say_hello(nome) puts("Olá #{nome}"); end say_hello("Matheus"); def feevale() puts("Olá Feevale"); end feevale(); def say_hello nome puts "Olá #{nome}" end say_hello "Matheus" def feevale puts "Olá Feevale" end feevale
controle de fluxo. if condicao faz_algo elsif outra_condicao outra_acao else chuta_o_balde end sign_in(user) if user.valid? if user.valid? sign_in user end if condicao faca_algo end faca_algo if condicao
controle de fluxo. if condicao faz_algo elsif outra_condicao outra_acao else chuta_o_balde end sign_in(user) if user.valid? if user.valid? sign_in user end if condicao faca_algo end faca_algo if condicao unless condicao executa_algo end executa_algo unless condicao unless user.logged? redirect end redirect unless user.logged?
1 end # Ou puts i += 1 while i <= 10 until i > 10 do puts i i += 1 end # Ou puts i += 1 until i > 10 [0,1,2,3].each do |i| puts i end # Ou [0,1,2,3].each { |i| puts i } 3.times do puts "Hello" end # Ou 10.times { |i| puts i }
vai retornar o último item do bloco. Na verdade só será feito algo diferente disso caso você defina um return. Retorno Implícito return Em Ruby, mesmo que você não defina um ele sempre vai retornar o último item do bloco. Na verdade só será feito algo diferente disso caso você defina um return. def retorno return "Ruby" end puts retorno def retorno "Ruby" end puts retorno def multiplicar(height, width) return height * width end puts multiplicar(3, 4) def multiplicar(height, width) height * width end puts multiplicar(3, 4) def aluno(user) if aluno.matriculado? return user.name end end def aluno(user) user.name if aluno.matriculado? end
vai retornar o último item do bloco. Na verdade só será feito algo diferente disso caso você defina um return. Retorno Implícito return def numeros(a, b, c) soma = a + b + c if soma > 10 "#{soma} é MAIOR que 10" else "#{soma} é MENOR que 10" end end puts numeros(1, 2, 3) # 6 é MENOR que 10 puts numeros(5, 4, 8) # 17 é MAIOR que 10 idade = 30 puts estagio = case idade when 0..13 then "Criança" when 14..25 then "Jovem" when 26..55 then "Adulto" else "Idoso" end # "Adulto"
linguagens, um número é apenas um tipo primitivo. No Ruby ele é uma instância da classe Fixnum e possui seus próprios métodos como o laço de repetição que vimos antes, 3.times
muitas linguagens, um número é apenas um tipo primitivo. No Ruby ele é uma instância da classe Fixnum e possui seus próprios métodos como o laço de repetição que vimos antes, 3.times 5.class # Fixnum 5.5.class # Float 5555555555.class # Bignum "Feevale".class # String [].class # Array {}.class # Hash (1..10).class # Range nil.class # NilClass false.class # FalseClass true.class # TrueClass :feevale.class # Symbol Class.class # Class Module.class # Class
muitas linguagens, um número é apenas um tipo primitivo. No Ruby ele é uma instância da classe Fixnum e possui seus próprios métodos como o laço de repetição que vimos antes, 3.times "Matheus".class # String "Matheus".class.superclass # Object "Matheus".class.superclass.superclass # BasicObject [].class # Array [].class.superclass # Object [].class.superclass.superclass # BasicObject 5.class # Fixnum 5.class.superclass # Integer 5.class.superclass.superclass # Numeric 5.class.superclass.superclass.superclass # Object 5.class.superclass.superclass.superclass.superclass # BasicObject
word = self.downcase word == word.reverse end end "Vou executar esse método".gauches # Bah, Vou executar esse método tchê class String def gauches "Bah, #{self} tchê" end end Classes Abertas
word = self.downcase word == word.reverse end end class Fixnum def dobra self * 2 end end "Vou executar esse método".gauches # Bah, Vou executar esse método tchê class String def gauches "Bah, #{self} tchê" end end Classes Abertas
word = self.downcase word == word.reverse end end 5.dobra # 10 class Fixnum def dobra self * 2 end end "Vou executar esse método".gauches # Bah, Vou executar esse método tchê class String def gauches "Bah, #{self} tchê" end end Classes Abertas
word = self.downcase word == word.reverse end end 5.dobra # 10 class Fixnum def dobra self * 2 end end "Vou executar esse método".gauches # Bah, Vou executar esse método tchê class String def gauches "Bah, #{self} tchê" end end class Time def weekend? self.saturday? || self.sunday? end end Classes Abertas
word = self.downcase word == word.reverse end end 5.dobra # 10 class Fixnum def dobra self * 2 end end "Vou executar esse método".gauches # Bah, Vou executar esse método tchê class String def gauches "Bah, #{self} tchê" end end class Time def weekend? self.saturday? || self.sunday? end end Classes Abertas Time.now.weekend? # true
# Cria só o método Set attr_accessor :name # Cria os métodos Get e Set Classes class Person attr_reader :name, :gender attr_writer :age attr_accessor :country def initialize(name, gender, age, country) @name = name @gender = gender @age = age @country = country end end p = Person.new "John", :male, 18, "Brasil"
# Cria só o método Set attr_accessor :name # Cria os métodos Get e Set Classes class MyClass def one "One" end def self.two "Two" end protected def three "Three" end private def four "Four" end end Método público Método de Classe Método protegido Método privado
digerir end end module Adotavel def adotar end end Módulos animal.digerir Animal.adotar Include: Expõe como métodos de instância Extend: Expõe como métodos de classe tigre.digerir Mamifero.adotar