sexta-feira, setembro 21, 2007

.Net 3.X

Encontrei este link que considero interessante sobre as novas funcionalidades do .NET 3.0 e 3.5. Apesar de achar que vamos ter grande evoluções (LINQ, Lambda expressions, etc), existe um sintatic sugar que não me "passa no goto" porque vai dar origem a mais "lixo" no meio do código, que pode ser facilmente evitado. Veja-se um exemplo simples:
Club club = new club();
club.name = "xpto";
A nova funcionalidade a que me refiro permite o seguinte:
Club club = new club(name = "xpto");
Aparentemente é uma boa evolução, menos linhas de código, menos chamadas ao objecto, agora porquê estou contra esta funcionalidade? Porque na minha perspectiva o que fica realmente elegante é o seguinte:
Club club = new club("xpto");
Têm é de existir construtores que possibilitem afectar os campos que se julguem necessários quando se cria o objecto.

3 comentários:

Anónimo disse...

Grinning Monkey, em honra dos bons velhos tempos, aqui vai um peido mental...

Mas antes, um pouco de Lisp.

Trust me, I know what I'm doing.

(defclass code-monkey ()
((name :initarg :name)
(iq :initarg :iq)))

Agora posso fazer

(make-instance 'code-monkey :name "Jimmy" :iq -150)

ou

(make-instance 'code-monkey :iq -150 :name "Jimmy")

ou

(make-instance 'code-monkey :iq -150)

ou

(make-instance 'code-monkey :name "Jimmy")

Quantos construtores é que eu defini? Nicles. No entanto, ó maravilha, dá para instanciar um objecto da todos os feitios e maneiras. SMOKIN'!!! como dizem os Albaneses.

Toca a lançar o torpedo!!!

O pessoal da Microshite além de dar a banana, aínda a tenta descascar e em troca da gentileza a macacada é só guinchos e mordidelas.

Assim, até eu fico com pena daqueles fdps.

:p

Tiago Sousa disse...

Finalmente dás sinais de vida :D
Isto são apenas opiniões, nem sabia que o teu tão amado lisp tinha esta funcionalidade. Continuo a ter a minha opinião e a não gostar disto, no caso que apresentaste tinhas de fazer 4 construtores, se tivesses que criar 20 instâncias do objecto, o que é um número razoável, o que ficava mais elegante ter 4 construtores ou "lixo" extra nas 20 instanciações?

Anónimo disse...

Tou a ver que Lisp e code monkeys não se dão bem. ;)

Não confundas o que fiz no meu exemplo com um construtor com N parâmetros, em que é preciso definir valores para todos os parâmetros de cada vez que se instancia um objecto.

Aqui vai a tentativa #2, num C# imaginário que sabe fazer umas piruetas.

class CodeMonkey {
string name;
int IQ;
}

Não defino qualquer construtor.

Para instanciar com nome e QI podias fazer:

...
foreach (int i in IQList)
foreach (string n in NameList)
CodeMonkeys.add(new CodeMonkey(IQ = i name = n));
...

se só quisesses instanciar com QI:

...
foreach (int i in IQList)
CodeMonkeys.add(new CodeMonkey(IQ = i));
...

e caso só quisesses instanciar só com o nome:

...
foreach (int n in NameList)
CodeMonkeys.add(new CodeMonkey(name = n));
...

Como vês, nicles de "lixo". Defines valores apenas para os parâmetros que te interessam. E não necessitas de estar a definir construtores. Claro que precisas de teclar um pouco mais quando fazes a instanciação, mas nada é perfeito.

Talvez a Microshite esteja a caminhar nesta direcção. O Evil Empire tem estado a investigar linguagens funcionais e dinâmicas ultimamente, e já incorporou várias ideias oriundas dessas linguagens no C#. Portanto, nunca se sabe. Se for este o caso, acho uma boa ideia.