C # parece ser popular en estos días. Escuché que sintácticamente es casi lo mismo que Java. Java y C ++ han existido por más tiempo. ¿Por qué razones debo elegir C # sobre Java y C ++?
java
programming-languages
c#
c++
Templario oscuro
fuente
fuente
Respuestas:
La pregunta debería ser "¿Qué lenguaje es más adecuado para el desarrollo de aplicaciones moderno y típico?".
Editar: me dirigí a algunos de los comentarios a continuación. Una pequeña observación: considere que cuando tiene muchas cosas de forma nativa, como expresiones idiomáticas, es una gran diferencia que implementarlas o descargarlas y usarlas usted mismo cada vez. Casi todo se puede implementar en cualquiera de estos idiomas. La pregunta es: qué idiomas le proporcionan de forma nativa.
Así que fuera de mi cabeza (algunos argumentos se aplican a ambos idiomas) ...
C # es mejor que C ++ en eso:
this
argumento del puntero estáticamente tipado ) y, por lo tanto, crear relaciones más dinámicas y flexibles entre las clases. edite si no sabe lo que esto significa, luego intente asignar un método miembro que devuelva void y acepte void a unavoid (*ptr)()
variable. Los delegados de C # llevan elthis
puntero con ellos, pero el usuario no siempre tiene que preocuparse por eso. Simplemente pueden asignar unvoid()
método de cualquier clase a cualquier otrovoid()
delegado.C # es mejor que Java en eso:
using
declaración). Java 7 también va a soportar esto, pero C # lo ha tenido por mucho más tiempo.yield
declaración.Editar - Abordar comentarios
this
puntero y vincular el método que lo hace a un puntero de función genérico (es decir, no en la misma clase), entonces simplemente no hay una forma nativa de hacerlo. En C #, obtienes el gratis. Ni siquiera tiene que saber cómo funciona.this
puntero.using
declaración, obviamente junto con los envoltorios desechables, es un gran ejemplo de RAII. Ver este enlace . Tenga en cuenta que no necesita tanto RAII en C # como en C ++ porque tiene el GC. Para los momentos específicos que lo necesite, puede usar explícitamente lausing
declaración. Otro pequeño recordatorio: liberar memoria es un procedimiento costoso. GC tiene su ventaja de rendimiento en muchos casos (especialmente cuando tiene mucha memoria). La memoria no se perderá y no pasará mucho tiempo en la desasignación. Además, la asignación también es más rápida, ya que no asigna memoria cada vez, solo de vez en cuando. Llamarnew
es simplemente incrementar un puntero de último objeto.En C ++, sus opciones son administrar manualmente su memoria usando
new
ydelete
, lo que empíricamente siempre conduce a errores aquí y allá, o (con C ++ 11) puede usar punteros automáticos de forma nativa, pero tenga en cuenta que agregan montones y montones de ruido al código. Así que GC todavía tiene una ventaja allí.fuente
El entorno
.NET Framework y clientes de Windows
Windows es el sistema operativo dominante en las computadoras cliente. Los mejores marcos de GUI para aplicaciones de Windows son Winforms y WPF junto con .NET Framework . El mejor lenguaje de programación para trabajar con .NET Framework y sus API es C # . Java no es una alternativa para esto. Y C ++ es un lenguaje antiguo sin administración automática de memoria. C # es similar a C ++ pero tiene administración de memoria automática y no tiene que trabajar con punteros, lo que lo hace más productivo. C ++ aún puede ser la mejor opción para algunos casos, pero no para aplicaciones de bases de datos de uso intensivo de formularios que son comunes en los negocios.
IIS y Windows Server
Si está acostumbrado a trabajar en el entorno de Windows y con C #, necesitará la menor inversión para aprender IIS para la programación del servidor y Windows Server para la administración básica.
Active Directory y Windows Server
Si está desarrollando un software que se implementará en las redes de la empresa, es probable que utilicen un entorno centrado en Windows utilizando un servidor de Windows con Active Directory. En dicho entorno, es fácil integrar e implementar una solución hecha en C # y .NET Framework .
Personalmente, soy un desarrollador de Java, no un desarrollador de C #, pero trabajo con la web. Cambiaría a C # si estuviera desarrollando aplicaciones de red para la red de Windows. Pero prefiero Java para servidores web basados en Linux. Elegiría C ++ para sistemas embebidos donde no tendré muchas dependencias.
Sí, C # es un lenguaje mejor con características más modernas que C ++ y Java, pero eso no es lo más importante para elegir C # .
Resumen
El entorno para su software es más importante para elegir C # . Si trabaja en un entorno con clientes Windows, servidores Windows, Active Directory, IIS y tal vez SQL Server, entonces C # es el mejor lenguaje con .NET Framework .
Si trabaja en un entorno Unix con, por ejemplo, servicios web, Java sería mi elección. Y si trabaja con sistemas integrados o tiene que integrarse con dispositivos de hardware, C ++ sería una buena opción.
fuente
C # y Java
C # es un muy buen lenguaje si:
C # como lenguaje es más agradable que Java en varias formas (mejor sintaxis para propiedades, tipos de valores, genéricos reificados, etc.). Prefiero C # como lenguaje a Java, pero en el gran esquema de las cosas son lenguajes bastante similares y adecuados para aplicaciones similares.
Por otro lado, Java también tiene algunas grandes ventajas:
Entonces, Java vs. C # es una decisión bastante estrecha y realmente se reduce a si quieres estar en el campamento de Microsoft o en el campo de código abierto / multiplataforma.
Personalmente, prefiero Java porque:
C / C ++
C / C ++ es básicamente una bestia completamente diferente. Yo no recomendaría a desarrollo de la aplicación de uso general hoy en día por las siguientes razones:
Sin embargo, es sin duda una gran opción en un cierto número limitado de dominios especiales, en particular:
Básicamente, C / C ++ es una gran opción si y solo si está enfocado en uno de los dominios donde es particularmente adecuado.
fuente
Sintácticamente? ¿Quién le da a los monos voladores la sintaxis? La sintaxis solo sirve para una cosa: permite una migración más rápida desde lenguajes sintácticamente similares. Eso es.
C # es mucho mejor que Java. Considere su soporte de programación genérico y funcional: C # está muy por delante de Java. Sin mencionar las sobrecargas del operador y otras cosas buenas: C # es mucho mejor presentado. No hay forma de que Java pueda considerarse mejor que C #.
C ++ y C # es más un concurso. C ++ tiene un modelo de compilación arcaico increíblemente molesto y un montón de enfermedades heredadas de C, pero sus plantillas son mucho más potentes que las genéricas, y sus enfoques de gestión de recursos son mucho más flexibles y potentes en general, como
using
es un completo fracaso, y se ejecuta Más rápido.fuente
Well
C#
tiene algunas características incorporadas agradables comoLINQ
y delegados. Está obteniendo lo mejor de ambos mundos,Java
yC++
. Mira aquí para una comparación completa.Pero me gusta más el
Java
mundo: mucho más marcos de código abierto y se ejecuta en todas las plataformas. Y no me hable de esoMono
, no es una opción confiable.fuente
Según algunas fuentes (véase, por ejemplo, http://www.indeed.com/jobtrends ) C # es aún menos popular que Java, y tan popular como C ++.
C # proporciona características de las que carece Java, por ejemplo, soporte directo para ciertos modismos de programación como propiedades, estilo de programación funcional, etc. C # tiene un mayor nivel de abstracción que C ++, lo cual es una ventaja cuando el tiempo de desarrollo es más importante que la velocidad del programa.
Personalmente, todavía prefiero los mundos Java / C ++. Como dijo Petar Minchev, Java tiene más frameworks y aplicaciones de código abierto, se ejecuta en todas partes, está menos vinculado a un proveedor y sistema operativo en particular. C ++ tiene ventajas similares, aunque el código a menudo necesita adaptaciones que van de una plataforma a otra. Como prefiero desarrollar en Linux y, que yo sepa, no puedo haber desarrollado completamente C # en Linux, nunca tuve un interés real en C # porque mis necesidades de programación están cubiertas por C, C ++, Java, Scala.
Por otro lado, para muchos desarrolladores estar vinculados a un proveedor en particular no es un problema: Microsoft tiene una posición dominante en el mercado de sistemas operativos y C # ofrece muchas oportunidades de trabajo. Por lo tanto, muchos desarrolladores de IMO adoptan C # porque, además de ser un lenguaje rico en funciones, también es una buena inversión.
fuente
¿Qué pasa con "Qué marco de desarrollo de software, que incluye un lenguaje de programación" es mejor?
Olvidó incluir otras cosas, como el "entorno" con el que trabajará.
¿Va a funcionar solo para el sistema operativo Windows, pero no tiene que ser de bajo nivel y tener mucha memoria y otros recursos?
Elija .NET como framework sobre Windows y use C #.
¿Vas a trabajar solo para Windows, pero no tiene que ser de bajo nivel, PERO, no tiene muchos recursos?
Elija el Marco de Delphi (y el lenguaje de programación Object Pascal Delphi o el lenguaje de programación Lazarus Object Pascal)
Es tu aplicación requerido para soportar varias plataformas, como un juego, en diferentes móviles?
Elija el Marco de Java y el lenguaje de programación Java.
¿Es Linux con KDE como interfaz gráfica?
Elija el marco QT, con C ++
¿Es Linux con Gnome como interfaz gráfica?
Elija el marco GObject / GLib, con C ++
¿Vas a trabajar con muchas operaciones de bajo nivel, como desarrollar controladores?
Plain C o C ++ se utiliza para varios sistemas operativos, con bibliotecas estándar, como marco.
Solo mis 2 centavos.
fuente
Si realiza una búsqueda, es probable que se encuentre con discusiones sobre los principales lenguajes de programación. Este es uno de los resultados de búsqueda: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html . Java parece ser el lenguaje más popular.
Java trató de eliminar algunas de las deficiencias de C ++ (y simplificó la vida de los programadores para aplicaciones no críticas y en tiempo real). C #, que llegó tarde a la fiesta, evitó algunas de las deficiencias del lenguaje Java. C # ha progresado mucho (ya que Microsoft tiene mucho control sobre él), mientras que los avances en Java se bloquearon durante un período considerable de tiempo debido a un conflicto entre sus partes interesadas.
fuente
Un par de cosas que aún no se han mencionado:
C # es mejor que C ++ porque:
Elimina los archivos de encabezado, lo que se traduce en una gran simplicidad.
C # es mejor que Java porque:
Admite tipos definidos por el usuario tanto de tipo de referencia (clase) como de tipo de valor (estructura), que, si sabe lo que está haciendo, puede generar importantes beneficios de rendimiento.
Admite delegados, que son como interfaces de un solo método, lo que simplifica enormemente la codificación de construcciones que ocurren con frecuencia que involucran objetos de un solo método.
fuente
Debe elegir el mejor idioma para su entorno esperado y su experiencia.
Elija C # si está trabajando en un entorno exclusivo de Microsoft. Si bien C # está estandarizado según ISO / IEC 23270: 2003, la versión de Microsoft sigue siendo la única implementación completa. Varias partes clave del lenguaje no están cubiertas por el estándar y, por lo tanto, están sujetas a las patentes de Microsoft. Nadie más implementará una versión completamente compatible del idioma para otros sistemas, por lo que, en efecto, está bloqueado por el proveedor de Microsoft Windows y .Net durante el tiempo que use el idioma. Si está buscando habilidades para usar en el mercado móvil, lo mejor es buscar otro idioma.
Java funciona, pero tiene una gran cantidad de gastos generales, en parte debido a características como la recolección de basura. Java tampoco está estandarizado por ISO / IEC, por lo que no tiene garantías si cambia las plataformas y versiones de Java, solo las mejores intenciones de Sun / Oracle. Si finalmente planea trabajar con Android, este es definitivamente el camino a seguir. La programación de Android es básicamente Java, con algunos cambios.
C ++ está estandarizado y casi todos los compiladores siguen el estándar internacional, por lo que tiene un comportamiento garantizado PERO el lenguaje no lo protege de usted mismo. Debe realizar la limpieza y la comprobación de desbordamiento por su cuenta. Esto no es dificil. Los programadores de C / C ++ han estado haciendo esto durante muchos años. Apple usa Objective C para todo, así que si quieres apuntar a Apple, te recomiendo que pruebes esto.
Si te ves dejando Windows en algún momento, te sugiero que aprendas tanto C / C ++ como Java, los cuales son comercializables en este momento.
fuente
En relación a C ++ vs C # (ya que no soy lo suficientemente competente en Java), lo que me falta aquí es la capacidad de acceder a cosas de bajo nivel en Windows. Por ejemplo, no puede desarrollar un controlador de pantalla nativo en C # (todavía), pero puede hacerlo con C ++. Esto no mejora C ++. Veo C ++ versus C # como ensamblado versus C.
C # es, en mi opinión, mucho más eficiente si nos fijamos en el tiempo que lleva implementar una característica. La penalización de rendimiento del tiempo de ejecución .Net es insignificante para el 99% de las aplicaciones desarrolladas. Puede ser importante si está ejecutando un ciclo cerrado, sí, por supuesto, pero la mayoría de las veces una aplicación está inactiva, esperando cualquier tipo de entrada, señal o interrupción (disco IO, clic de botón, red, finalización de animación) .
La biblioteca CLR con todas sus funciones tiene otro gran beneficio. Cuando estaba entrenando C # para desarrolladores junior, la mayoría de ellos dijeron que les gustaba la convención de nomenclatura lógica de clases, miembros y espacios de nombres. Encontrar una característica del método era lógico en todo el SDK, algo en lo que Visual Basic 5 tenía serias fallas. Esto les ha ayudado enormemente a adoptar la biblioteca. Después de aprender la sintaxis de un idioma, aprender una nueva biblioteca es importante para obtener una buena comprensión de cualquier SDK. Le evita reinventar la rueda.
fuente