Cita:
Iniciado por HackmanC Hola,
No voy a criticar tu punto de vista porque llevo 10+ años programando en Java y C#, y siempre hay alguien que se aposta en un uno u el otro al punto del fanatismo, y a mi los dos lenguajes me han dado de comer en su momento.
Pero no entiendo muy bien lo del boilerplate; por que te estas contradiciendo, dices que Java tiene workarounds basados en interfaces lleno de boilerplate. Simplificando ... los delegados son clases que reciben eventos que se cumplen con una interface, como ves en Java hay delegados, pero no existe el boilerplate de C#; usando una palabra clave adicional para lo mismo que ya sabemos que es una clase que cumple con una interface.
Los eventos son eventos, que en C# y VB exista la palabra Event solo genera una boilerplate innecesario que un programador experto implementa hasta en C sin la palabra Event, ni java.awt.Event.
Pero en fin, si conoces bien a profundidad la programación, cualquier lenguaje tiene todo lo del otro, solamente hay que saber implementarlo correctamente.
Saludos,
Capo decí lo que quieras, pero tengo razon. Te propongo un juego, se llama "encontrar el boilerplate".
Empiezo yo:
De que me estas hablando?
aparte tu argumento del keyword es cualquiera. O sea, poner un keyword versus crear una clase e implementar una interfaz? me estas cargando?
Aparte existe System.Action y System.Func que tienen hasta 16 T. Yo en mi vida tuve que escribir la palabra delegate para declarar un delegado custom.
- Boilerplate = codigo inutil
por lo tanto
- Un lenguaje que te obliga a poner 60% de boilerplate es un lenguaje 60% inutil.
por lo tanto
java = lenguaje inutil
Querés que me ponga a comparar java con codigo LinQ?
Mostrame tu versión en java de esto en C#:
Código C++:
Ver originalpublic abstract class FiltradoDinamico<T>
{
public Predicate<T> Criterio {get;set;}
public virtual IEnumerable<T> Filtrar(IEnumerable<T> origen)
{
return (Criterio != null && origen != null) ? origen.Where(x => Criterio(x)) : origen;
}
}
public class FiltradoPersona: FiltradoDinamico<Persona>
{
public string Filtro {get;set;}
public FiltradoPersona()
{
Criterio = x => x.LastName == Filtro ||
x.FirstName == Filtro;
}
}
No te olvides que el Criterio es una Property. Por lo tanto se puede definir DESDE AFUERA. por ejemplo desde otra clase "Foo" instanciar un nuevo FiltradoPersona y ponerle un criterio de filtrado diferente basado en properties de la clase Foo.