Arquivo da tag: Ruby

Do que não gostei em ruby …

  • Constantes em ruby permitem atribuições posteriores, lançando avisos … (Contantes não eram p/ ser constantes?)
  • Variáveis globais …
  • Sem suporte à sobrecarga de métodos de forma direta
  • Green Threads : As threads não são nativas, são “emuladas” pelo interpretador …
  • Não tem operador de auto-incremento 😦
  • Variáveis locais definidas no corpo dos loops until, for e while são “largados” tornando-se disponíveis no escopo global … Por isso não uso o laço for em ruby diretamente, ao invés, prefiro iterators.
i=true
while(i)
   i=false
   a=2
end
puts defined?(a) // retorna true
  • Pessoalmente, ñ uma crítica, não confio em escrever um bloco de código cujo valor seja denotado pela última expressão
  • Catch e throw me parece uma horrível prática. Me recordam intruções JMP em assembly.
  • Fazer referência (através da intruções require ou include) à outros scripts (módulos ou classes) dentro de testes unitários que não estão na mesma pasta do artefato em teste é uma brincadeira de mau gosto.
  • Variáveis de instância para classes (além das variáveis de instância para instâncias e variáveis de classe para classes). Isso é realmente necessário?
  • Redefinição de visibilidade dentro de uma herança … aff Meu Deus!!!!

Conclusões : Ruby é uma linguagem poderosa e bastante flexível. Mas é preciso ter bom senso, porque você tem o poder de escrever códigos extrememante simples e funcionais, mas também possui a capacidade de criar coisas horríveis, como gatos que voam ou qualquer outra coisa bizarra …

[sourcecode language='cpp']

Deixe um comentário

Arquivado em Ruby

Do que gostei em ruby …

  • Metaprogramação
  • Redefinição de operadores
  • Cláusula else para tratamento de erros
  • Closures\Proc objects
  • Modificadores de expressões
  • Mixins
  • Ranges em expressões condicionais
  • O bloco case é interessante pelas cláusulas WHEN suportarem expressões não constantes
  • Em loops achei muito interessante as keywords retry e redo.
  • O nome de métodos podem ser acompanhados de ?, ! e =. Oferece mais readability. Ex:
    class ContaAPagar
    def quitada?
         return true
    end
    end
    
  • Alias
  • A palavra chave super atuando de forma contextual (isso é problemático às vezes)
  • Declarações de atributos (que não são palavras chaves e sim métodos da classe Module)
  • Duck Typing: O Tipo do objeto é determinado pelo o que ele pode fazer, não pela sua classe. Isso é legal, coerente. Mas exige bom senso e maturidade combinado com boas práticas, tipo testes unitários. Eu vejo que é muito improvável escrever um código com um estilo tão livre (laissez faire programming), em algum momento vc acaba usando o operador ===ou enviando a mensagem respond_to? à algun objeto.
  • O conceito de classes abertas
  • Definições de classe são blocos de código executável em runtime. Isso parece C\C++ com as diretivas #ifndef e #endif. A grande diferença é que essa análise em C\C++ em feita em tempo de compilação, em ruby é em runtime
  • Objetos congelados
  • Níveis de segurança e o conceito de Tainted Objects
Metaprogramação

Deixe um comentário

Arquivado em Ruby