terça-feira, 3 de dezembro de 2013

Ruby 2

Ruby



Sintaxe do Ruby


  • A sintaxe de Ruby é muito semelhante ao de Perl e Python. 
  • As definições de classe e método são sinalizadas por palavras-chave. Em contraste com Perl, variáveis ​​não são obrigatoriamente prefixada com um sigil ($, etc). Quando utilizado, o sigil muda a semântica do escopo da variável.
  • Uma diferença de C e Perl é que as palavras-chave são normalmente usados ​​para definir blocos de código lógicas, sem chaves (ou seja , um par de { e } ).
  • Para fins práticos, não há distinção entre as expressões e declarações.
  • As quebras de linha são significativas e tomado como o fim de uma instrução; um ponto e vírgula podem ser usados ​​de forma equivalente.
  • Ao contrário de Python , o recuo não é significativo.
  • Uma das diferenças do Ruby em comparação com Python e Perl é que o Ruby mantém todas as suas variáveis ​​de instância completamente privadas para a classe e só as expõe através de métodos de acesso ( attr_writer, attr_reader , etc.).
  • Ao contrário dos " getter " e " setter " métodos de outras linguagens como C++ ou Java, métodos de acesso em Ruby pode ser criado com uma única linha de código via metaprogramação, no entanto, métodos de acesso também pode ser criada na forma tradicional de C++ e Java.
  • Como invocação desses métodos não requer o uso de parênteses, é trivial para mudar uma variável de instância em uma função cheia, sem modificar uma única linha de código ou ter que fazer qualquer refatoração para alcançar as funcionalidade semelhante aos membros de propriedade do C# e VB.NET. 
  • Descritores de propriedade do Python são semelhantes, mas vêm com uma trade-off(perde-ganha) no processo de desenvolvimento.
  • Se alguém começa em Python usando uma variável de instância exposto publicamente, e mais tarde muda a implementação para usar uma variável de instância privada exposta através de um descritor de propriedade, o código interno para a classe poderá ter de ser ajustado para usar a variável privada ao invés da propriedade pública.
  • Projeto de Ruby obriga todas as variáveis ​​de instância a serem privadas, mas também fornece uma maneira simples de declarar métodos set e get. Isto está de acordo com a ideia de que em Ruby, nunca se acessa diretamente os membros internos de uma classe de fora dela, mas sim, passa uma mensagem para a classe e recebe uma resposta .

Os Diferentes Comportamentos Comparado a Outras Linguagens



  • A sintaxe da linguagem é case sensitive em todos os casos que tratam variáveis ​​maiúsculas como constantes.
  • Nomes de classe e módulos são constantes e se referem a objetos derivados destes.
  • Sigil $ e @ não indicam o tipo de variáveis de dados como em Perl, mas funcionam como operadores de resolução de escopo.
  • Pontos flutuantes literais devem ter dígitos em ambos os lados do ponto decimal: nem .5 nem 2. são  pontos flutuantes literais de válidos, mas  deve ser usado 0.5 e 2.0 (Em Ruby, literais inteiros são objetos que podem ter métodos aplicam-se a eles, de modo que requer um dígito após um ponto decimal para ajudar a esclarecer se 1.e5 deve ser analisado de forma análoga à 1.to_f ou como o formato exponencial flutuante 1.0e5 literal. A razão para a necessidade de um dígito antes do ponto decimal é menos clara, que poderia dizer respeito a invocação de método novo, ou talvez para o .. e ... os operadores , por exemplo, no fragmento de 0,1 ... 3 . )
  • Tipos de dados  booleanos não-booleanos são permitidos em contextos booleanos (ao contrário por exemplo, Java), mas seu mapeamento para valores booleanos difere marcadamente de alguns outras linguagem: 0 e "vazio" (por exemplo, lista vazia , string ou array associativo ), todos avaliados como verdade, alterando assim o significado de algumas expressões idiomáticas comuns em línguas relacionadas ou similares, tais como Lisp , Perl e Python.
  • Uma consequência desta regra é que os métodos de Ruby por convenção - por exemplo, de buscas por expressão regular - retorna números, strings, listas ou outros valores não- falsos em caso de sucesso, mas nil em caso de falha.
  • A indicação da notação até a expressão não executar a instrução se a expressão já é verdade. ( O comportamento é como Perl, mas ao contrário de declarações equivalentes de outras línguas, por exemplo, fazer declaração { } while ( (expressão) ); 
  • Devido ser as constantes referências a objetos, mudar a referência de uma constante gera um aviso, mas alterar o objeto em si não gera. Por exemplo, Saudação << " mundo! " se saudação == " Olá " não gera um erro ou aviso.
  • Isto é semelhante às variáveis ​​finais em Java ou a um ponteiro constante para um objeto não-constante em C++, mas o Ruby fornece a funcionalidade para "congelar" um objeto, ao contrário de Java.
  • Os operadores usuais de expressões condicionais, and e or, não seguem as regras normais de precedência: and não tem liga mais firme do que or. Rubi também tem operadores de expressão ||&& que funcionam como o esperado.

Interação


A distribuição oficial Rubi inclui um intérprete de linha de comando interativa, irb que pode ser usado para testar rapidamente o código. O seguinte fragmento de código representa uma sessão de amostra usando irb:

$ irb
irb(main):001:0> puts "Hello, World"
Hello, World
 => nil
irb(main):002:0> 1+2
 => 3 


Ruby Interative Shell (irb) é a interação da linguagem de script objeto orientado Ruby.

O IRB sigla vem do fato de que a extensão do arquivo para Ruby é ". Rb".
O programa é iniciado a partir de uma linha de comando e permite a execução de comandos de Ruby com resposta imediata, executado em tempo real.
Possui histórico de comandos, capacidades de edição de linha e controle de trabalho, e é capaz de se comunicar diretamente como um script shell através da Internet e interagir com um servidor ao vivo. 
Sintaxe de uso do programa:
irb [ options ] [ programfile ] [ argument... ]
Exemplo de sintaxe:
irb(main):001:0> n = 5
=> 5
irb(main):002:0> def fact(n)
irb(main):003:1>   if n <= 1
irb(main):004:2>     1
irb(main):005:2>   else
irb(main):006:2*     n * fact(n - 1)
irb(main):007:2>   end
irb(main):008:1> end
=> nil
irb(main):009:0> fact(n)
=> 120

Exemplos

Estes exemplos podem ser executados em um Ruby shell como irb, ou salvo em um arquivo e executado em uma linha de comando digitando ruby<filename>. Clássico Hello world : 
puts "Hello World!"
Código Básico Ruby:
# Everything, including a literal, is an object, so this works:
-199.abs                                             # => 199
"ice is nice".length                                 # => 11
"ruby is cool.".index("u")                           # => 1
"Nice Day Isn't It?".downcase.split("").uniq.sort.join    
                                           # => " '?acdeinsty"
Conversões:
puts "Give me a number"
number = gets.chomp
puts number.to_i
output_number = number.to_i + 1
puts output_number.to_s + ' is a bigger number.'

String

Há várias maneiras de definir strings em Ruby.
As seguintes atribuições são equivalentes e suportam interpolação de variáveis: 
variable interpolation (também a substituição de variáveis ​​ou a expansão de variáveis​​) é o processo de avaliação de uma expressão ou string literal contendo uma ou mais variáveis​​, gerando um resultado em que as variáveis ​​são substituídas por seus valores correspondentes na memória. É uma instância especializada de concatenação.
a = "\nThis is a double-quoted string\n"
a = %Q{\nThis is a double-quoted string\n}
a = %{\nThis is a double-quoted string\n}
a = %/\nThis is a double-quoted string\n/
a = <<-BLOCK
 
This is a double-quoted string
BLOCK
Raw strings (strings brutas) - Algumas linguagens fornecem um método de especificar que um literal é para ser processado sem qualquer interpretação específica da linguagem. Isto evita a necessidade de escape, e produz strings mais legíveis.
Strings brutas são particularmente úteis quando um caractere comum precisa usar escape, especialmente em expressões regulares, onde barra invertida \ é amplamente utilizado, e em caminhos de DOS/Windows, onde barra invertida é usada como separador de caminho. 
A profusão do invertidas é conhecida como síndrome de inclinar-se palito, e pode ser reduzido pelo uso de strings brutas. Compare escapes e caminho bruto:
 "The Windows path is C:\\Foo\\Bar\\Baz\\"
 r"The Windows path is C:\Foo\Bar\Baz\"
Os seguintes atributos são equivalentes e produz raw strings:
a = 'This is a single-quoted string'
a = %q{This is a single-quoted string}

Collections

Construindo e usando um array:
a = [1, 'hi', 3.14, 1, 2, [4, 5]]
 
a[2]                    # => 3.14
a.[](2)                 # => 3.14
a.reverse               # => [[4, 5], 2, 1, 3.14, 'hi', 1]
a.flatten.uniq          # => [1, 'hi', 3.14, 2, 4, 5]
Construindo e usando um  associative array (em Ruby, chamado de hash):
Array associativa, mapa, tabela de símbolos, ou dicionário é um tipo abstrato de dados composto por uma coleção de (chave, valor) pares, de modo que cada chave possível aparecer no máximo uma vez na coleção.
hash = Hash.new     # equivalent to hash = {}

# makes the previous line redundant as we are now
hash = { :water => 'wet', :fire => 'hot' }

# assigning hash to a new, separate hash object
puts hash[:fire] # prints "hot"
 
# or: hash.each do |key, value|
hash.each_pair do |key, value| puts "#{key} is #{value}" end # returns {:water=>"wet", :fire=>"hot"} and prints: # water is wet # fire is hot  
# deletes the pair :water => 'wet' and returns "wet"
hash.delete :water  

# deletes the pair :fire => 'hot' and returns {}
hash.delete_if {|key,value| value == 'hot'}


Nenhum comentário:

Postar um comentário