Skip to content

Instantly share code, notes, and snippets.

@cassiofariasmachado
Last active April 18, 2022 22:45
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cassiofariasmachado/9454704d248ff76b196603e618db1424 to your computer and use it in GitHub Desktop.
Save cassiofariasmachado/9454704d248ff76b196603e618db1424 to your computer and use it in GitHub Desktop.

Dotnet para desenvolvedores Java

If you only knew the power of the darkside

.NET CLI

Criando uma nova solução:

dotnet new sln --name DotnetForJavaDevs

Criando um projeto de console application:

dotnet new console --name DotnetForJavaDevs.ConsoleApp --output ./src/DotnetForJavaDevs.ConsoleApp

Vinculando o projeto a solução:

dotnet sln add src/DotnetForJavaDevs.ConsoleApp

Dica valiosa: se você não sabe os parâmetros que um comando de CLI espera sempre teste os parametros -h, --help ou apenas help.

Criando um projeto de class library e vinculando a solução:

dotnet new classlib --name DotnetForJavaDevs.Domain --output ./src/DotnetForJavaDevs.Domain

dotnet sln add ./src/DotnetForJavaDevs.Domain

Adicionando um .gitignore:

dotnet new gitignore

IL, bytecode e CLR

IL, bytecode e CLR

Sintaxe

Operadores

Convenção de nomenclatura

  • PascalCase (exceto para campos privados)
  • Chaves na próxima linha

Tipos anônimos, implicitos (´var) e dinâmicos (dynamic`)

public static void Main (string[] args) 
{
    // Compilador infere o tipo de a como int
    var a = 1;

    // Compilador trata como tipo dinâmico (como em JavaScript)
    dynamic b = new { A = "" };

    // Compilador cria um tipo anônimo, mas conhece o tipo
    var c = new { A = "" };

    b.Qualquer(); // Erro em runtime
}

Dica: Evite utilizar dynamic, não é considerado boa prática.

Propriedades (getters e setters)

Built-in Getters e setters 💖

class Veiculo 
{
    public string Chassis { get; set; }
}

Comparação de string em C#

string nome = "Joaquim";
string outroNome = "Pedro";

if (nome == outroNome)
{
    Console.WriteLine("Nomes são iguais!")
}

Coisas que usamos em C# e Java não tem

Async e await

Exemplo de async e await

  • Assincronismo != paralelismo
  • Task Parallel Library
  • Utilizado quando alguma chamada para IO. Exemplos:
    • Acesso a Banco de dados
    • Requisição HTTP
    • Leitura e escrita de arquivos

Métodos de extensão

public static class StringExtensions
{
    public static string ToPascalCase(this string str)
        => CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str);
}

Nullable value types (Nullable<T> ou T?)

public static void Main (string[] args) {
    int meuInt = default(int);
    int? meuIntNulo = default(int?);

    Console.WriteLine(meuInt == 0);
    Console.WriteLine(meuIntNulo == null);
}

Coisas que C# não tem

Checked exceptions

public void MeuMetodo()
{
    throw new ArgumentException("Não preciso informar que estou lançando uma exceção!");
}

Métodos e atributos em enums

  • Enumeração
  • Por padrão, por baixo dos panos, trata-se de um conjunto de constantes de inteiros (int).
public enum Status
{
    EmProducao = 1,
    Pendente = 2,
    QuaseChegando = 3,
    IhhVaiDemorar = 4
}

Optional

Não existe 😢

Referências

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment