Existem tarefas que exigem significativamente menos trabalho com Ruby do que o C # 4.0?

8

Acabei de ler o capítulo Ruby do livro 7 Languages ​​in 7 Weeks . Além de um pouco de açúcar sintático aqui e ali, eu realmente não consigo ver nada que não possa ser feito com C # com uma sintaxe semelhante. Entendo que as duas linguagens são inerentemente diferentes, mas minha pergunta está relacionada ao uso, e não ao design.

Perguntas relevantes me fazem acreditar que Ruby oferece pouco mais que C #:

Eu quase não trabalhei com Ruby e meu entendimento da linguagem ainda é muito limitado; talvez alguém que tenha experimentado o .NET 4.0 e o Ruby possa responder com exemplos concretos.

Quais tarefas requerem significativamente menos trabalho com Ruby que o C # 4.0?

Ps: Esta questão foi encerrada no StackOverflow por ser muito subjetiva e argumentativa, embora atraísse alguma atenção. Eu esperava que fosse mesclado aqui, mas, em vez disso, terei que repassá-lo.

Steven Jeuris
fonte
1
A compilação seria uma delas?
Andrew Grimm
Eu estaria interessado nesta questão, pois presumo que o C # seja mais rápido e tenha uma comunidade maior que o Ruby.
Andrew Grimm

Respostas:

7

Ruby possui literais para expressões regulares e vários atalhos sintáticos úteis para a criação / interpolação de strings. Portanto, quando suas tarefas estão relacionadas principalmente à mistura de bits e partes de strings correspondentes, o Ruby pode exigir menos trabalho (mas fora dos scripts auxiliares curtos, devo admitir que essa é uma situação muito rara).

Mais relevantes são as instalações de metaprogramação do Ruby. ou seja #eval, #define_methode amigos, que combinados com open classes, #includee #extendpermitem criar toneladas de código padrão em tempo de execução - você pode argumentar que os geradores / assistentes de código oferecem alguns dos mesmos benefícios, mas você tem que conviver com - quantidades possivelmente muito grandes - do código da placa da caldeira gerado, em comparação com uma quantidade relativamente pequena de código de metaprogramação que você teria que ler e entender.

Um caso de uso típico para isso é ter que fazer interface com algum tipo de provedor de dados dinâmicos fora do seu aplicativo. O Rails ActiveRecord é um bom exemplo disso.

No futuro, isso pode ser muito benéfico para o desenvolvimento de GUIs, pois você pode gerar métodos manipulando eventos a partir de elementos da interface do usuário criando métodos durante o tempo de execução com base no ID, tipo, valores de entrada dos elementos da interface do usuário etc. (como Objective-C em esteróides, talvez veremos um pouco desse poder quando o MacRuby amadurecer).

A linha entre bom uso e abuso horrível desse recurso, porém, é muito fina e tende - pela minha experiência - a ser uma das principais causas de dores de cabeça em grandes projetos Ruby (on Rails). Portanto, tenha cuidado ao decidir liberar o Djinn da sua garrafa :)

Alexander Battisti
fonte
Boa resposta! A manipulação mais fácil de strings faz sentido, o Ruby on Rails é uma estrutura da web, eu acho. Eu precisaria comparar a metaprogramação uma vez para ver se um determinado objetivo pode ser alcançado mais facilmente no Ruby do que no C #. Se você tivesse um exemplo concreto (não muito grande) interessante, seria bom. ; p
Steven Jeuris
Como dito, a biblioteca / estrutura ActiveRecord é um exemplo concreto.
Alexander Battisti