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:
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
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?
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.
Enviar um comentário