Acho que a maioria dos programadores Java, assim como eu, sempre que vão aderir a uma nova tecnologia, procuram abstrações similares às quais temos no mundo Java.
Pois bem, me vi na necessidade de parametrizar um código escrito em Ruby. A primeira coisa que me veio na cabeça: ARQUIVO PROPERTIES! Seria maravilhoso se existisse em Ruby um conceito exatamente igual, de forma que não fosse necessário gastar muito tempo com isso.
Foi aí que me deparei com o fato de que Ruby não tem um parser para arquivo properties! Pior que isso, nenhuma outra linguagem é obrigada a ter parser para arquivo properties, pois este tipo de arquivos foi criado no mundo Java! É claro que não é difícil de construir um no Ruby (mostrei uma implementação disso no post anterior 10 boas práticas em Ruby WATIR, na Boa Prática 9 - Recuperar mensagens de arquivos de texto), mas seria ideal se houvesse algum recurso similar nativo do Ruby…
Então passei a conhecer YAML. YAML é mais uma daquelas siglas recursivas, e significa YAML Ain’t Markup Language. É uma especificação de um padrão de serialização de dados que seja amigável a humanos, e compatível com todas as linguagens de programação. Seu site oficial é http://www.yaml.org/.
É um projeto muito bacana e simplório, tendo como objetivo fugir da complexidade das linguagens de marcação. Além disso, apresenta parsers para C/C++, Java, Python, Ruby, Perl, C#/.NET, PHP, Javascript, Actionscript e outros.
E o melhor: em Ruby é incrivelmente fácil de se trabalhar com YAML! Veja só:
a) Para carregar uma parametrização de um arquivo YAML em um dictionary:
require "yaml" # (...) # This will load options.yml into config dictionary options_file = 'options.yml' config = YAML.load_file(options_file) # Now it has been loaded. This will get param1 parameter # into param1 variable. param1 = config['param1']
b) Para serializar dados de um dictionary e gravar em um arquivo YAML:
require "yaml"
# (...)
config = {
'param1' => 'value1',
'param2' => 'value2',
'param3' => 'value3'
}
File.open('options.yml', 'w') do |out|
YAML.dump(config, out)
end
Além disso, YAML pode também serializar dados de objetos, arrays, etc. E como possui parsers em diversas linguagens, agora ficou muito mais fácil e econômico para realizar serialização de dados entre sistemas construídos em linguagens diferentes, contrapondo o XML! YAML não causará o overhead causado por arquivos XML.
É claro que YAML não tem todo o potencial de XML, pois é apenas um formato de serialização de dados. Outro contraponto é que YAML não possui parsers mais complexos como os parsers de XML em Java e .NET. Mas para muitos propósitos, YAML pode ser mais adequado que XML.