"Pensa como pensam os sábios, mas fala como falam as pessoas simples"
Ruby on Rails é escrito em Ruby, e embora seja possível fazer aplicações inteiras sem ter um conhecimento razoável sobre Ruby, com o tempo surge a necessidade de entender mais profundamente determinado comportamento da linguagem e qual sua influência na maneira como o Rails trata determinada parte das nossas aplicações.
Conhecer bem a linguagem determinará a diferença entre usar o Rails econhecer o Rails.
O IRB é um dos principais recursos disponíveis aos programadores Ruby. Funciona como um console/terminal, e os comandos vão sendo interpretados ao mesmo tempo em que vão sendo inseridos, de forma interativa. O irb avalia cada linha inserida e já mostra o resultado imediatamente.
Todos os comandos apresentados neste capítulo podem ser executados dentro doirb, ou em arquivos .rb. Por exemplo, poderíamos criar um arquivo chamadoteste.rb e executá-lo com o seguinte comando:
ruby teste.rb
A Alura oferece dezenas de cursos online em sua plataforma exclusiva de ensino que favorece o aprendizado com aqualidade reconhecida da Caelum. Você pode escolher um curso nas áreas de Java, Ruby, Web, Mobile, .NET e outros, ou fazer a assinatura semestral que dá acesso a todos os cursos.
Conheça os cursos online da Caelum.
Ao aprender uma nova linguagem de programação sempre nos deparamos com o famoso "Olá Mundo". Podemos imprimir uma mensagem com ruby utilizando pelo menos 3 opções: puts, print e p.
puts "Olá Mundo" print "Olá Mundo" p "Olá Mundo"
Mas qual a diferença entre eles? O puts imprime o conteúdo e pula uma linha, oprint imprime, mas não pula linha, já o p chama o método inspect do elemento.
Comentários em Ruby podem ser de uma linha apenas:
# Imprime uma mensagem puts "Oi mundo"
Ou comentários de blocos:
=begin Imprime uma mensagem =end puts "Oi mundo"
Nos comentários de bloco, tanto o "=begin" quanto o "=end" devem ficar no início da linha, na coluna 0 do arquivo. Os comentários de blocos não costumam ser muito usados Ruby, a própria documentação do Rails usa apenas comentários de linha.
Atenção para o modo de saída utilizado pelo Ruby e como poderemos identificar uma saída correta em nosso código:
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
Um dos mais conceitos básicos em linguagens de programação é a declaração de variáveis, que é apenas uma associação entre um nome e um valor. Em Ruby, basta definirmos o nome da variável e atribuir um valor usando o sinal =:
ano = 1950
Mas qual o tipo dessa variável? A variável ano é do tipo Fixnum, um tipo do Ruby que representa números inteiros. Mas não informamos isso na declaração da variável ano, isso porque na linguagem Ruby não é necessária esse tipo de informação, já que o interpretador da linguagem infere o tipo da variável automaticamente durante a execução do código. Esta característica é conhecida como inferência de tipos.
O Ruby nos permite atribuir numa variável um valor digitado no console através do teclado, isso é feito através do método %gets%, mas com ele só poderemos atribuir Strings%%, veremos como atribuir outros tipos adiante. Exemplo:
irb(main):001:0> nome = gets José => "José\n"
O \n representa um caracter de nova linha. Esse é um caracter que seu teclado manda quando é pressionada a tecla Enter.
Por não ser necessária a declaração do tipo, muitos pensam que a linguagem Ruby é fracamente tipada e com isso o tipo não importaria para o interpretador. No Ruby os tipos são importantes sim para a linguagem, tornando-a fortemente tipada, além disso, o Ruby também é implicitamente e dinamicamente tipada, implicitamente tipada pois os tipos são inferidos pelo interpretador, não precisam ser declarados e dinamicamente tipada porque o Ruby permite que o tipo da variável possa ser alterado durante a execução do programa, exemplo:
idade = 27 idade = "27"
irb(main):001:0> num = 87 => 87 irb(main):002:0> puts num.class Fixnum => nil
Você chegou aqui porque a Caelum é referência nacional em cursos de Java, Ruby, Agile, Mobile, Web e .NET.
Faça curso com quem escreveu essa apostila.
Consulte as vantagens do curso Desenv. Ágil para Web com Ruby on Rails.
Vamos fazer alguns testes com o Ruby, escrevendo o código e executando no terminal. O arquivo utilizado se chamará restaurante_basico.rb, pois nossa futura aplicação web será um sistema de qualificação de restaurantes.
Ao final de cada exercício você pode rodar o arquivo no terminal com o comandoruby restaurante_basico.rb.
Vamos imprimir uma mensagem pedindo para o usuário digitar o nome do restaurante.
puts "Digite o nome do restaurante: "
Agora iremos guardar o nome do nosso restaurante em uma variável nome. Para isso usaremos o método gets para capturar o valor digitado no console.
puts "Digite o nome do restaurante" nome = gets
Por fim vamos imprimir o nome do nosso restaurante.
puts "Digite o nome do restaurante" nome = gets print "Nome do restaurante: " puts nome
Um tipo muito importante nos programas Ruby são os objetos do tipo String. As Strings literais em Ruby podem ser delimitadas por aspas simples ou aspas duplas além de outras formas especiais que veremos mais adiante.
irb(main):001:0> mensagem = "Olá Mundo" => "Olá Mundo" irb(main):002:0> mensagem = 'Olá Mundo' => "Olá Mundo"
irb(main):001:0> mensagem = "Bom dia, " => "Bom dia," irb(main):002:0> mensagem << " tudo bem?" => "Bom dia, tudo bem?" irb(main):003:0> puts mensagem Bom dia, tudo bem? => nil
O operador << é utilizado para a operação append de Strings, ou seja, para a concatenação de Strings em uma mesma instância. Já o operador + também concatena Strings mas não na mesma instância, isso quer dizer que o + gera novas Strings.
#Declaração da variável %%nome%% print "Nome do restaurante: " puts nome
Nós podemos simplificá-la, uma alternativa mais interessante para criar Strings com valor dinâmico é a interpolação:
#Declaração da variável %%nome%% print "Nome do restaurante: #{nome}"
Basta colocar dentro da String a variável entre as chaves, em #{}. Mas fique atento, com Strings definidas com aspas simples não é possível fazer uso da interpolação, por isso prefira sempre o uso de String com aspas duplas.
Prefira sempre a interpolação ao invés da concatenação (+) ou do append (<<). É mais elegante e mais rápido.
irb(main):001:0> nome = "fasano" => "fasano" irb(main):002:0> puts nome.capitalize Fasano => nil
A chamada do método capitalize ao invés de alterar a variável para guardar o valor “Fasano”, retorna uma nova String com o valor com a primeira letra em caixa alta. Você pode confirmar este comportamento imprimindo novamente onome, logo após a chamada do método capitalize, repare que foi impresso exatamente o mesmo valor que definimos na declaração da variável.
nome = "fasano" puts nome.capitalize #Fasano puts nome #fasano
O método capitalize é uma função pura, porque não importa quantas vezes seja invocado, retornará sempre o mesmo valor e também não causa efeitos colaterais, ou seja, não altera um valor já calculado anteriormente.
nome = "fasano" puts nome.capitalize! #Fasano puts nome #Fasano
O caracter ! é chamado de bang e deve ser usado com moderação, já mudar definitivamente o valor onde foi utilizado.
Primeiramente, vamos alterar o modo como o nome do nosso restaurante é impresso. Abra o arquivo restaurante_basico.rb e passe a utilizar a concatenação.
print "Nome do restaurante: " + nome
Já deu uma melhorada, só que aprendemos uma maneira mais elegante de fazer concatenação, que é a interpolação, vamos passar a utilizá-la.
print "Nome do restaurante: #{nome}"
A partir de sua versão 1.9 o Ruby tem a capacidade de tratar de modo separado o encoding de arquivo (external encoding), encoding de conteúdo de arquivo (internal encoding), além do encoding aceito no IRB.
O encoding padrão é o US-ASCII ou ISO-8859-1, dependendo da plataforma, e nenhum dos dois tem suporte a caracteres acentuados e outros símbolos úteis. Outro encoding aceito é o UTF-8 (Unicode) que aceita os caracteres acentuados que necessitamos para nossas mensagens em português.
Para configurar o internal encoding de nossos arquivos, sempre devemos adicionar uma linha de comentário especial na primeira linha dos arquivos.rb:
#coding:utf-8 puts "Olá, mundo!"
Para o IRB podemos configurar o encoding no comando irb com a opção de encoding. O comando completo é irb -E UTF-8:UTF-8. Em algumas plataformas é possível utilizar a forma abreviada irb -U.
Conheça a Casa do Código, uma nova editora, com autores de destaque no mercado, foco em ebooks (PDF, epub, mobi), preçosimbatíveis e assuntos atuais.
Com a curadoria da Caelum e excelentes autores, é uma abordagem diferente para livros de tecnologia no Brasil. Conheça os títulos e a nova proposta, você vai gostar.
Casa do Código, livros para o programador.
Ruby permite avaliar expressões aritméticas tradicionais:
irb(main):001:0> 3*(2+5)/8 => 2
Em Ruby existem 3 tipos numéricos básicos: Fixnum, Bignum e Float Fixnum é o tipo principal para números inteiros.
Podemos verificar isso usando .class
irb(main):001:0> 99.class => Fixnum
Números inteiros muito grandes são convertidos automaticamente para Bignum, de forma a não sofrerem perda de precisão
irb(main):002:0> 9999999999999999999.class => Bignum
Qualquer número com casas decimais é do tipo Float
irb(main):003:0> 15.0.class => Float
Quando trabalhamos com números, provavelmente faremos operações matemáticas também Para isso, devemos usar os operadores apropriados. Os principais operadores aritméticos em Ruby são:
irb(main):001:0> 2 + 2 => 4 irb(main):002:0> 5 - 3 => 2 irb(main):003:0> 10 / 2 => 5 irb(main):004:0> 15 * 2 => 30 irb(main):005:0> 3 ** 2 => 9
Agora temos um problema: Se terntarmos fazer uma divisão cujo resultado não seja um número inteiro, este será arredondado para baixo!
irb(main):001:0> 15/2 => 7
Pare resolver esse problema, podemos usar um Float no lugar de Fixnum, em qualquer lado da operação:
irb(main):002:0> 15.0 / 2 => 7.5
Ruby fornece uma maneira de trabalharmos com sequências de uma forma bem simples: (1..3) # range representando números de 1 a 3. ('a'..'z') # range representando letras minúsculas do alfabeto (0...5) # range representando números de 0 a 4.
Símbolos também são texto, como as Strings. Só que devem ser precedidos do carácter ':', ao invés de aspas e pertencem à classe Symbol:
>> puts :simbolo simbolo => nil >> :simbolo.class => Symbol
As principais diferenças são:
Por causa destas características, símbolos são análogos às Strings do Java. As Strings do Ruby estão mais para o StringBuilder do Java. Por serem imutáveis e compartilhados, objetos Symbol geralmente são usados como identificadores e para nomenclatura (labels). Durante o curso usaremos muito este recurso.
Em Ruby tudo é objeto. Vamos fazer alguns testes curiosos e descobrir os tipos:
# Tipos 3.times{ puts "O 3 é um objeto!" } puts 3.class puts 33333333333333333333333.class
Podemos fazer as operações básicas em ruby de forma simples:
# imprime conta puts 3*(2+5)/8
Para utilizar estruturas de controle em ruby, precisamos antes conhecer os operadores booleanos, true e false. Os operadores booleanos aceitam quaisquer expressões aritméticas:
>> 3 > 2 => true >> 3+4-2 <= 3*2/4 => false
Os operadores booleanos são: ==, >, <, >= e <=. Expressões booleanas podem ainda ser combinadas com os operadores && (and) e || (or).
O if do ruby aceita qualquer expressão booleana, no entanto, cada objeto em Ruby possui um "valor booleano". Os únicos objetos de valor booleano false são o próprio false e o nil. Portanto, qualquer valor pode ser usado como argumento do if:
>> variavel = nil => nil >> if(variavel) >> puts("so iria imprimir se variavel != null") >> end => nil >> if(3 == 3) >> puts("3 é 3") >> end 3 é 3 => nil
Teste também o switch:
def procura_sede_copa_do_mundo( ano ) case ano when 1895..1993 "Não lembro... :)" when 1994 "Estados Unidos" when 1998 "França" end end puts procura_sede_copa_do_mundo(1994)
O código acima funciona como uma série de if/elsif :
if 1994 == ano "Estados Unidos" elsif 1998 == ano "França" elsif 1895..1993 == ano "Não lembro... :)" end
Utilizar um laço de repetições pode poupar muito trabalho. Em ruby o código é bem direto:
for i in (1..3) x = i end
Ruby possui bom suporte a expressões regulares, fortemente influenciado pelo Perl. Expressões regulares literais são delimitadas por / (barra).
>> /rio/ =~ "são paulo" => nil >> /paulo/ =~ "são paulo" => 4
O operador =~ faz a função de match e retorna a posição da String onde o padrão foi encontrado, ou nil caso a String não bata com a expressão regular. Expressões regulares aparecem com uma frequência maior em linguagens dinâmicas, e, também por sua sintaxe facilitada no Ruby, utilizaremos bastante.
Um site muito interessante para testar Expressões Regulares é ohttp://rubular.com/
Há também o método match, que retorna um objeto do tipo MatchData, ao invés da posição do match. O objeto retornado pelo método match contém diversas informações úteis sobre o resultado da expressão regular, como o valor de agrupamentos (captures) e posições (offset) em que a expressão regular bateu.
O operador ||= atribui um valor apenas a variável esteja vazia. é muito utilizado para carregar valores de maneira "lazy".
nome ||= "anonimo"
Nesse caso, se nome é nulo, ele será preenchido com "anonimo".
Se você gosta de estudar essa apostila aberta da Caelum, certamente vai gostar dos novos cursos online que lançamos na plataforma Alura. Você estuda a qualquer momento com aqualidade Caelum.
Conheça a assinatura semestral.
Nosso restaurante pode ter notas boas se a mesma for superior a 7, ou ruim caso contrário.
# estruturas de controle: if nota = 10 if nota > 7 puts "Boa nota!" else puts "Nota ruim!" end
Teste com notas diferentes e verifique as saídas no terminal.
Implemente um for em ruby:
# estruturas de controle: for for i in (1..3) x = i end puts x
Teste o operado de expressões regulares ""
puts /rio/ =~ "são paulo" # nil puts /paulo/ =~ "são paulo" # 4
Abra o site http://rubular.com/ e teste outras expressões regulares!
O operador "||=" é considerado uma forma elegante de fazer um if. Verifique se uma variável já foi preenchida, caso não estiver, vamos atribuir um valor a ela.
restaurante ||= "Fogo de Chao" puts restaurante
Sem tentar executar o código abaixo, responda: Ele funciona? Por que?
resultado = 10 + 4 texto = "O valor é " + resultado puts(texto)
E o código abaixo, deveria funcionar? Por que?
puts(1+2)
Baseado na sua resposta da primeira questão, por que o código abaixo funciona?
resultado = 10 + 3 texto = "O valor é: #{resultado}"
Qual a saída deste código?
resultado = 10 ** 2 puts('o resultado é: #{resultado}')
(Para Casa) Pesquise sobre outras maneiras de criar Strings literais em Ruby.
Por que a comparação entre símbolos é muito mais rápida que entre Strings?
simbolo1 = :abc simbolo2 = :abc simbolo1 == simbolo2 # => true texto1 = "abc" texto2 = "abc" texto1 == texto2 # => true
Xo สล็อตออนไลน์ โปรสล็อต XO เกมออนไลน์ทำเงินยอดฮิตเกมสล็อต xopg.net คือเกมทำเงิน reeffutures2018 ผ่านทางออนไลน์อย่างหนึ่ง ที่เล่นง่าย และได้เงินไว แถมยังลงทุนด้วยเงินน้อย mavoixtavoie ทำเงินได้ตลอดเวลา ซึ่งหลายคนอาจได้เคยเห็นรีวิวเรื่องของ สล็อต xo สล็อตออนไลน์ ไว้มากมาย เทคนิคสล็อต ทั้งเรื่องการเล่นแล้วได้เงิน herbalpertpresents และเล่น สล็อต แล้วไม่ได้เงิน นั่นเองค่ะ ซึ่งการที่คุณจะเล่นได้เงินหรือไม่ได้เงินนั้น essentialsforasoul ส่วนหนึ่งก็เป็นในเรื่องของดวงเข้ามาเกี่ยวด้วย northbristol เพราะสล็อตเป็นเกมออนไลน์เสี่ยงโชค ทดลองเล่น xo เกมหนึ่งซึ่งจะมีสูตร หรือเทคนิคเข้ามาช่วย gclub เพื่อโกงดวงอยู่เสมอซึ่งในเว็บของเรา สมัคร xo ก็มีมาแนะนำไว้ให้เห็นกันมากมายหลายสูตร
The most interesting text on this interesting topic that can be found on the net ... 사설토토
For many people this is the best solution here see how to do it. 안전놀이터
Beaver says I also have such interest, you can read my profile here: 벳삼
Beaver says I also have such interest, you can read my profile here: 꽁머니사이트
It is especially decent, though look into the tips during this home address. 링크찾기
Do you have a spam issue on this site; I also am a blogger, and I was wondering your situation; we have developed some nice methods and we are looking to swap methods with others, why not shoot me an email if interested. 먹튀검증
Just before you decide to create your own checklist to add an idea associated with what camping checklist ought to. 토토커뮤니티
I am often to blogging and i also genuinely appreciate your website content continuously. The content has really peaks my interest. My goal is to bookmark your web site and keep checking for brand new info. 꽁머니
There are various agencies which deals with evidences located at a crime scene. Police use it for investigation, prosecuting attorney presents it before court of law as well as a forensic science technician analyzes evidences thoroughly to help other agencies in criminal procedure. A forensic science technician conducts comprehensive chemical and physical study of evidence submitted by a law enforcement agency puffer case brown
Appreciate it for this post, I am a big fan of this internet site would like to keep updated. Asotra soft
definitely an interesting read. i usually dont comment. signed Mark Cuban 먹튀검증
I’m agitated all these article directories. It sure would be nice to have every article directory that instantly accepts articles. Paint Protection Film Services
I’m not that much of a internet reader to be honest but your blogs really nice, keep it up! I’ll go ahead and bookmark your site to come back down the road. Cheers Leak Repair in Katy
Well written articles like yours renews my faith in today’s writers. You’ve written information I can finally agree on and use. Thank you for sharing. cas9 ELISA kit
Some truly nice stuff on this site, I love it. Cheap Oair
I like this site very much so much excellent information. Window repair Palm Beach County FL
Daystar Payment Systems aim to become the world’s go-to partner for electronic payment processing, for all business types, sizes, and industries. Our solutions are borderless, and we promise any business, in any market, of any size, the technology, connections and confidence to participate and flourish in the new global economy.. industry payment solutions
Daystar Payment Systems aim to become the world’s go-to partner for electronic payment processing, for all business types, sizes, and industries. Our solutions are borderless, and we promise any business, in any market, of any size, the technology, connections and confidence to participate and flourish in the new global economy.. industry payment solutions
Great post, I’m looking forward to hear more from you!! [dragonfin angelfish]