C # parece ser popular nos dias de hoje. Ouvi dizer que, sintaticamente, é quase o mesmo que Java. Java e C ++ existem há mais tempo. Por que razões devo escolher C # em Java e C ++?
C # parece ser popular nos dias de hoje. Ouvi dizer que, sintaticamente, é quase o mesmo que Java. Java e C ++ existem há mais tempo. Por que razões devo escolher C # em Java e C ++?
Respostas:
A pergunta deve ser "Qual idioma é mais adequado para o desenvolvimento moderno e típico de aplicativos?".
Edit: Abordei alguns dos comentários abaixo. Uma pequena observação: considere que, quando você tem muitas coisas de forma nativa, como idiomas, é uma grande diferença do que implementar ou fazer o download e usá-las sempre. Quase tudo pode ser implementado em qualquer um desses idiomas. A questão é: o que os idiomas lhe fornecem nativamente.
Então, de cabeça para baixo (alguns argumentos se aplicam aos dois idiomas) ...
this
argumento do ponteiro digitado estaticamente ) e, portanto, crie relacionamentos mais dinâmicos e flexíveis entre as classes. edite se você não souber o que isso significa, tente atribuir um método de membro retornando nulo e aceitando nulo a uma void (*ptr)()
variável. Delegados de C # carregam o this
ponteiro com eles, mas o usuário nem sempre precisa se preocupar com isso. Eles podem apenas atribuir um void()
método de qualquer classe a qualquer outro void()
delegado.using
declaração). O Java 7 também vai dar suporte a isso, mas o C # já o suporta há muito mais tempo.yield
instruçãothis
ponteiro e vincular o método que o faz a um ponteiro de função genérico (ou seja, não da mesma classe), simplesmente não há uma maneira nativa de fazê-lo. Em C #, você obtém o gratuitamente. Você nem precisa saber como isso funciona.this
ponteiro.using
declaração, obviamente junto com os invólucros IDisposable, é um ótimo exemplo de RAII. Veja este link . Considere que você não precisa de RAII tanto em C # quanto em C ++, porque possui o GC. Nos horários específicos em que você precisa, você pode usar explicitamente a using
instrução Outro pequeno lembrete: liberar memória é um procedimento caro. O GC tem sua vantagem de desempenho em muitos casos (especialmente quando você tem muita memória). A memória não vazará e você não gastará muito tempo desalocando. Além disso, a alocação também é mais rápida, pois você não aloca memória todas as vezes, apenas de vez em quando. Chamar new
é simplesmente incrementar um último ponteiro de objeto.new
e delete
, o que empiricamente sempre leva a erros aqui e ali, ou (com o C ++ 11) você pode usar ponteiros automáticos nativamente, mas lembre-se de que eles adicionam muito e muito de ruído para o código. Então a GC ainda tem uma vantagem aí.O Windows é o sistema operacional dominante nos computadores clientes. As melhores estruturas de GUI para aplicativos do Windows são Winforms e WPF, juntamente com o .NET Framework . A melhor linguagem de programação para trabalhar com o .NET Framework e suas APIs é C # . Java não é uma alternativa para isso. E o C ++ é uma linguagem antiga, sem gerenciamento automático de memória. O C # é semelhante ao C ++, mas possui gerenciamento automático de memória e você não precisa trabalhar com ponteiros, o que o torna mais produtivo. O C ++ ainda pode ser a melhor opção para alguns casos, mas não para aplicativos de banco de dados com muitos formulários, comuns nos negócios.
Se você está acostumado a trabalhar no ambiente Windows e com C #, precisará de menos investimento para aprender o IIS para programação de servidores e o Windows Server para administração básica.
Se você estiver desenvolvendo um software que será implantado nas redes da empresa, é provável que eles usem um ambiente centrado no Windows usando um Windows Server com Active Directory. Nesse ambiente, é fácil integrar e implantar uma solução feita em C # e .NET Framework .
Pessoalmente, sou desenvolvedor Java, não desenvolvedor C #, mas trabalho com a web. Eu mudaria para C # se estivesse desenvolvendo aplicativos de rede para a rede Windows. Mas eu prefiro servidores Web baseados em Java para Linux. Eu escolheria C ++ para sistemas embarcados, caso eu não tenha muitas dependências.
Sim, C # é uma linguagem melhor com recursos mais modernos que C ++ e Java, mas isso não é a coisa mais importante para escolher C # .
O ambiente do seu software é mais importante para a escolha de C # . Se você trabalha em um ambiente com clientes Windows, servidores Windows, Active Directory, IIS e talvez SQL Server , o C # é a melhor linguagem do .NET Framework .
Se você trabalha em um ambiente Unix com, por exemplo, serviços web, Java seria minha escolha. E se você trabalha com sistemas embarcados ou precisa se integrar a dispositivos de hardware, o C ++ seria uma boa escolha.
C # e Java
C # é uma linguagem muito boa se:
O C # como linguagem é mais agradável que o Java de várias maneiras (melhor sintaxe para propriedades, tipos de valor, genéricos reificados etc.). Prefiro o C # como uma linguagem ao Java, mas no grande esquema das coisas, elas são linguagens bastante semelhantes e adequadas para aplicativos semelhantes.
Por outro lado, o Java também possui algumas grandes vantagens:
Portanto, Java vs. C # é uma decisão muito estreita e realmente se resume a se você deseja estar no campo da Microsoft ou no campo de código aberto / plataforma cruzada.
Pessoalmente, prefiro Java porque:
C / C ++
C / C ++ é basicamente um animal completamente diferente. Atualmente, eu não o recomendaria para o desenvolvimento de aplicativos de uso geral pelos seguintes motivos:
No entanto, é sem dúvida uma ótima escolha em um determinado número limitado de domínios especiais, em particular:
Então, basicamente, o C / C ++ é uma ótima opção se, e somente se, você estiver focado em um dos domínios em que ele é particularmente adequado.
I heard that syntactically they are almost the same.
Sintaticamente? Quem dá macacos voadores sobre sintaxe? A sintaxe serve apenas para uma coisa: permitir uma migração mais rápida de idiomas sintaticamente semelhantes. É isso aí.
C # é muito melhor que Java. Considere o suporte à programação genérica e funcional - o C # está muito à frente do Java. Sem mencionar as sobrecargas do operador e outras coisas boas - o C # é muito melhor em destaque. Não há como o Java ser considerado melhor que o C #.
C ++ e C # é mais um concurso. O C ++ possui um modelo de compilação arcaica incrivelmente irritante e várias doenças herdadas do C, mas seus modelos são muito mais poderosos que os genéricos, e suas abordagens de gerenciamento de recursos são muito mais flexíveis e poderosas em geral, como using
é uma falha completa e são executadas Mais rápido.
O Well C#
possui alguns recursos internos agradáveis, como LINQ
delegados. Está obtendo o melhor dos dois mundos - Java
e C++
. Veja aqui uma comparação completa.
Mas eu gosto mais do Java
mundo - muito mais estruturas de código aberto e ele roda em todas as plataformas. E não me fale Mono
- não é uma opção confiável.
De acordo com algumas fontes (veja, por exemplo, http://www.indeed.com/jobtrends ), o C # ainda é menos popular que o Java e tão popular quanto o C ++.
O C # fornece recursos que o Java não possui, por exemplo, suporte direto a certos idiomas de programação, como propriedades, estilo de programação funcional e assim por diante. O C # possui um nível de abstração mais alto que o C ++, o que é uma vantagem quando o tempo de desenvolvimento é mais importante que a velocidade do programa.
Pessoalmente, ainda prefiro os mundos Java / C ++. Como disse Petar Minchev, o Java tem mais estruturas e aplicativos de código aberto, é executado em todos os lugares e está menos ligado a um fornecedor e sistema operacional em particular. O C ++ tem vantagens semelhantes, embora o código geralmente precise de adaptações, indo de uma plataforma para outra. Como eu prefiro desenvolver no Linux e, que eu saiba, não posso ter um C # completo no Linux, nunca tive um interesse real em C # porque minhas necessidades de programação são cobertas por C, C ++, Java e Scala.
Por outro lado, para muitos desenvolvedores estar vinculado a um fornecedor específico não é um problema: a Microsoft tem uma posição dominante no mercado de sistemas operacionais e o C # oferece muitas oportunidades de emprego. Portanto, muitos desenvolvedores da IMO adotam o C # porque, além de ser uma linguagem rica em recursos, também é um bom investimento.
E quanto a "Qual Software Development Framework, que inclui uma linguagem de programação", é melhor?
Você esqueceu de incluir outras coisas, como o "ambiente" com o qual você trabalhará.
Você trabalha apenas no sistema operacional Windows, mas não precisa ser de nível baixo e ter muita memória e outros recursos?
Escolha .NET como estrutura no Windows e use C #.
Você vai trabalhar apenas para Windows, mas não precisa ser de nível baixo, MAS, não possui muitos recursos?
Escolha o Delphi Framework (e a linguagem de programação Object Pascal Delphi ou a linguagem de programação Lazarus Object Pascal)
É o seu aplicativo. necessário para suportar várias plataformas, como um jogo, em diferentes celulares?
Escolha o Java Framework e a linguagem de programação Java.
É o Linux com o KDE como interface gráfica?
Escolha a estrutura QT, com C ++
É o Linux com o Gnome como interface gráfica?
Escolha a estrutura GObject / GLib, com C ++
Você vai trabalhar com muitas operações de baixo nível, como desenvolver drivers?
C ou C ++ simples é usado para vários sistemas operacionais, com bibliotecas padrão, como estrutura.
Apenas meus 2 centavos.
Se você fizer uma pesquisa, provavelmente encontrará discussões sobre as principais linguagens de programação. Aqui está um dos resultados da pesquisa - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html - Java ainda parece ser a linguagem mais popular.
O Java tentou remover algumas das deficiências do C ++ (e tornar a vida dos programadores mais simples para aplicativos não em tempo real e não críticos). Sendo o C # o mais atrasado para a festa, evitou algumas das deficiências da linguagem Java. O C # fez muito progresso (já que a Microsoft tem muito controle sobre ele), enquanto os avanços em Java foram bloqueados por um período considerável de tempo devido a conflitos entre seus stakeholders.
Algumas coisas que ainda não foram mencionadas:
C # é melhor que C ++ porque:
Ele acaba com os arquivos de cabeçalho, o que se traduz em grande simplicidade.
C # é melhor que Java porque:
Ele suporta os tipos definidos pelo usuário do tipo de referência (classe) e do tipo de valor (struct) que, se você souber o que está fazendo, podem gerar benefícios significativos de desempenho.
Ele suporta delegados, que são como interfaces de método único, simplificando muito a codificação de construções que ocorrem com frequência e que envolvem objetos de método único.
Você deve escolher o melhor idioma para o seu ambiente esperado e seus conhecimentos.
Escolha C # se você estiver trabalhando em um ambiente exclusivo da Microsoft. Enquanto o C # é padronizado pela ISO / IEC 23270: 2003, a versão da Microsoft continua sendo a única implementação completa. Várias partes principais do idioma não são cobertas pelo padrão e, portanto, estão sujeitas às patentes da Microsoft. Ninguém mais implementará uma versão completamente compatível do idioma para outros sistemas; portanto, você estará bloqueado pelo fornecedor do Microsoft Windows e do .Net enquanto você usar o idioma. Se você está procurando habilidades para usar no mercado móvel, é melhor procurar outro idioma.
O Java funciona, mas possui uma grande sobrecarga, em parte devido a recursos como coleta de lixo. O Java também não é padronizado pela ISO / IEC; portanto, você não tem garantias se alternar entre plataformas e versões do Java, apenas as melhores intenções da Sun / Oracle. Se você planeja trabalhar com o Android, esse é definitivamente o caminho a percorrer. A programação do Android é basicamente Java, com algumas alterações.
O C ++ é padronizado e quase todos os compiladores seguem o padrão internacional; portanto, você tem comportamento garantido, mas a linguagem não o protege de si mesmo. Você deve executar a verificação de limpeza e estouro por conta própria. Isto não é difícil. Os programadores de C / C ++ fazem isso há muitos anos. A Apple usa o Objective C para tudo, portanto, se você deseja apontar para a Apple, recomendo que tente isso.
Se você se vê deixando o Windows para trás em algum momento, sugiro aprender C / C ++ e Java - ambos comercializáveis no momento.
Em relação ao C ++ vs C # (como não sou proficiente o suficiente em Java), o que estou perdendo aqui é a capacidade de acessar coisas de baixo nível no Windows. Por exemplo, você não pode desenvolver um driver de vídeo nativo em C # (ainda), mas pode fazê-lo com C ++. Isso não melhora o C ++. Vejo C ++ versus C # como Assembly versus C.
C # é, na minha opinião, muito mais eficiente se você observar o tempo necessário para realmente implementar um recurso. A penalidade de desempenho do tempo de execução .Net é insignificante para 99% dos aplicativos desenvolvidos. Pode ser importante se você estiver executando um loop apertado, sim, por todos os meios, mas na maioria das vezes um aplicativo está ocioso, aguardando qualquer tipo de entrada, sinal ou interrupção (IO do disco, clique no botão, rede, conclusão da animação) .
A biblioteca CLR com todas as suas funções tem outro grande benefício. Quando eu estava treinando C # para desenvolvedores juniores, a maioria deles disse que gostava da convenção de nomes lógicos de classes, membros e espaços para nome. Encontrar um recurso do método era lógico no SDK, algo em que o Visual Basic 5 era seriamente falho. Isso os ajudou tremendamente na adoção da biblioteca. Depois de aprender a sintaxe de um idioma, aprender uma nova biblioteca é importante para obter uma boa compreensão de qualquer SDK. Isso evita que você reinvente a roda.