Pessoal, esse é um post pequeno, sobre uma comparação que me bateu a curiosidade de fazer durante essa semana que passou. Uma das maneiras de se medir a produtividade de uma linguagem, é o quão enxuto é o seu código, sem perder a coesão. Ou seja: Quantas linhas essa linguagem me economiza de escrever, sem que fique difícil de entender o que o código escrito faz. Atualmente, eu trabalho com VB.NET, embora eu prefira C# e esteja me apaixonando lentamente pelo Ruby(com ou sem o Rails). Então, resolvi comparar o quanto de código eu gastaria para escrever um objeto de negócio simples.
Utilizei accessors para as propriedades da classe em questão. Para quem não está acostumado com o conceito de accessors(linguagens como Java, PHP e C++ dentre outras, não tem este recurso), explico: Accessors são jeitos de implementar os getters e setters dos atributos de uma classe, com pouco código. Isso varia de linguagem para linguagem, e no .NET por exemplo, os accessors são chamados de Properties.
A classe em questão é uma classe chamada Pessoa, com os atributos Nome, CPF, RG e Data de nascimento, coisas necessárias para alguns cadastros básicos. Sem mais demoras, vamos aos códigos. Iniciemos pelo Ruby:
attr_accessor:Nome, :Nascimento, :RG, :Cpf
end
Em Ruby, foram necessárias apenas 3 linhas para a criação da classe. Aos que não conhecem a linguagem e perceberam que não declarei nenhum atributo com tipo, a explicação é simples: O Ruby, apesar de ser uma linguagem fortemente tipada, é dinamicamente tipada, ou seja: Decide o tipo do atributo em tempo de execução. Passemos agora para o C#:
public string Nome{get;set;}
public DateTime DataNascimento{get;set;}
public string RG{get;set;}
public string CPF{get;set;}
}
Em C# foram necessárias 6 linhas. Repare que o C# “abrevia” os getters e setters. Essa é a declaração dos accessors da linguagem. Apesar de aparentemente nessa declaração os atributos da classe estarem sendo declarados como públicos (o que violaria o encapsulamento), na verdade está sendo definida a visibilidade dos getters e setters. Vejamos agora como ficaria a classe em Visual Basic .NET
Dim name,registro,cadastro As String
Dim nascimento As Date
Public Property Nome() As String
Get
Return name
End Get
Set(ByVal Value As String)
name = Value
End Set
End Property
Public Property RG() As String
Get
Return registro
End Get
Set(ByVal Value As String)
registro = Value
End Set
End Property
Public Property CPF() As String
Get
Return cadastro
End Get
Set(ByVal Value As String)
cadastro = Value
End Set
End Property
Public Property DataNascimento() As Date
Get
Return nascimento
End Get
Set(ByVal Value As String)
nascimento = Value
End Set
End Property
End Class
No Visual Basic .NET foram necessárias TRINTA E SEIS linhas para fazer a mesma classe, mesmo utilizando accessors(apesar de não parecer, esses são os accessors do VB.NET) . Mesmo com o intellisense (também conhecido como autocomplete) do Visual Studio, é um trabalho muito maior de se criar a classe, gastando ainda mais tempo para a escrita do código. Eu acho o Visual Basic uma boa linguagem para quem está aprendendo a programar, pois a sintaxe deixa extremamente explícito o que faz o código. Mas há outras maneiras de se fazer entender sem precisar escrever tanto.
Em tempo: Quando a Microsoft iniciou o desenvolvimento do OS/2 com a IBM, a produtividade dos programadores era medida pela IBM em quantidade de código escrito, ou seja: Quanto mais código, maior o pagamento. Isso fazia com que os desenvolvedores escrevessem código sem nenhuma optimização e até mesmo desnecessário, para que não tivessem seu pagamento afetado. Quando a Microsoft optimizou o código e diminuiu a quantidade de linhas escritas para fazer a mesma coisa, houve um pequeno mal entendido entre as empresas, que foi logo resolvido. Curiosidades do mundo da programação.
Bem, é isso. Espero em breve ter tempo para escrever os artigos sobre Ruby que pretendo publicar aqui. É uma linguagem muito completa e gostosa de mexer. Espero que tenham gostado do artigo.
Abraços e keep coding!
richardprg em agosto 7th, 2010 at 23:23 says:
puts cara isso do ruby parece ser muito bom mesmo…