Roadmap para desenvolvedores Java aprendendo C#
C# e Java têm muitas semelhanças. Ao aprender C#, você pode aplicar muito do conhecimento que já tem da programação em Java:
- Sintaxe semelhante: Java e C# estão na família C de linguagens. Essa semelhança significa que você já pode ler e entender C#. Existem algumas diferenças, mas a maior parte da sintaxe é a mesma que Java e C. Os suportes encaracolados e ponto-e-vírgula são familiares. As instruções de controle como
if
,else
,switch
são as mesmas. As instruções de looping defor
,while
, edo
...while
são as mesmas. As mesmas palavras-chave paraclass
einterface
estão em ambas as línguas. Os modificadores de acesso depublic
paraprivate
são os mesmos. Mesmo muitos dos tipos incorporados usam as mesmas palavras-chave:int
,string
, edouble
. - Paradigma orientado a objetos: Java e C# são linguagens orientadas a objetos. Os conceitos de polimorfismo, abstração e encapsulamento aplicam-se em ambas as línguas. Ambos adicionaram novas construções, mas os recursos principais ainda são relevantes.
- Fortemente tipado: Java e C# são linguagens fortemente tipadas. Você declara o tipo de dados das variáveis, explícita ou implicitamente. O compilador impõe a segurança de tipo. O compilador deteta erros relacionados ao tipo em seu código, antes de executar o código.
- Multiplataforma: Java e C# são multiplataforma. Você pode executar suas ferramentas de desenvolvimento em sua plataforma favorita. Seu aplicativo pode ser executado em várias plataformas. Sua plataforma de desenvolvimento não é necessária para corresponder à sua plataforma de destino.
- Tratamento de exceções: Java e C# lançam exceções para indicar erros. Ambos usam
try
- -catch
finally
blocos para lidar com exceções. As classes Exception têm nomes e hierarquias de herança semelhantes. Uma diferença é que o C# não tem o conceito de exceções verificadas. Qualquer método poderia (em teoria) lançar qualquer exceção. - Bibliotecas padrão: O tempo de execução do .NET e a Java Standard Library (JSL) têm suporte para tarefas comuns. Ambos têm ecossistemas extensos para outros pacotes de código aberto. Em C#, o gerenciador de pacotes é NuGet. É análogo ao Maven.
- Coleta de lixo: Ambos os idiomas empregam gerenciamento automático de memória através da coleta de lixo. O tempo de execução recupera a memória de objetos que não são referenciados. Uma diferença é que o C# permite criar tipos de valor, como
struct
tipos.
Você será produtivo em C# quase imediatamente por causa das semelhanças. À medida que você progride, você deve aprender recursos e expressões idiomáticas em C# que não estão disponíveis em Java:
- Correspondência de padrões: a correspondência de padrões permite instruções e expressões condicionais concisas com base na forma de estruturas de dados complexas. A
is
instrução verifica se uma variável "é" algum padrão. A expressão baseada emswitch
padrões fornece uma sintaxe rica para inspecionar uma variável e tomar decisões com base em suas características. - Interpolação de cadeia de caracteres e literais de cadeia de caracteres brutos: a interpolação de cadeia de caracteres permite inserir expressões avaliadas em uma cadeia de caracteres, em vez de usar identificadores posicionais. Os literais de cadeia de caracteres brutos fornecem uma maneira de minimizar as sequências de escape no texto.
- Tipos anuláveis e não anuláveis: C# suporta tipos de valor anuláveis e tipos de referência anuláveis anexando o sufixo
?
a um tipo. Para tipos anuláveis, o compilador avisa se você não verificarnull
antes de desreferenciar a expressão. Para tipos não anuláveis, o compilador avisa se você pode estar atribuindo umnull
valor a essa variável. Tipos de referência não anuláveis minimizam erros de programação que geram um System.NullReferenceExceptionarquivo . - Métodos de extensão: em C#, você pode criar métodos que estendem uma classe ou interface. Os métodos de extensão estendem o comportamento de um tipo de uma biblioteca ou todos os tipos que implementam uma determinada interface.
- LINQ: Language Integrated query (LINQ) fornece uma sintaxe comum para consultar e transformar dados, independentemente de seu armazenamento.
- Funções locais: em C#, você pode aninhar funções dentro de métodos ou outras funções locais. As funções locais fornecem ainda outra camada de encapsulamento.
Há outros recursos em C# que não estão em Java. Você verá recursos como async
e await
, e using
instruções para liberar automaticamente recursos que não são de memória.
Há também alguns recursos semelhantes entre C# e Java que têm diferenças sutis, mas importantes:
- Propriedades e indexadores: Tanto as propriedades quanto os indexadores (tratando uma classe como uma matriz ou dicionário) têm suporte a idiomas. Em Java, eles estão nomeando convenções para métodos que começam com
get
eset
. - Registros: em C#, os registros podem ser do
class
tipo (referência) oustruct
(valor). Os registros C# podem ser imutáveis, mas não precisam ser imutáveis. - Tuplas têm sintaxe diferente em C# e Java.
- Os atributos são semelhantes às anotações Java.
Finalmente, há recursos da linguagem Java que não estão disponíveis em C#:
- Exceções verificadas: em C#, qualquer método pode, teoricamente, lançar qualquer exceção.
- Covariância de matriz verificada: em C#, as matrizes não são covariantes com segurança. Você deve usar as classes de coleção genéricas e interfaces se precisar de estruturas covariantes.
No geral, aprender C# para um desenvolvedor experiente em Java deve ser suave. Você encontrará expressões idiomáticas familiares suficientes para ser produtivo rapidamente e aprenderá as novas expressões idiomáticas rapidamente.