C# 
-  Criando um código mais limpo    
    ![]()  | 
    Neste artigo vamos recordar o uso de 3 dicas práticas para ter um código C# mais claro e fácil de entender e manter. | 
Como você sabe se 
está seguindo as boas práticas ao programar em C# ? 

E como você pode evitar as más práticas que podem tornar seu código confuso e mais difícil de gerenciar ?
Neste artigo, veremos 3 práticas ruins comuns e explicaremos como evitá-las usando recursos já existentes na linguagem C#.
1- Pare de verificar 
null usando a instrução if 
![]()
A instrução if pode ter um número enorme de utilidades e usos, um deles é fazer a verificação de valores null.
Embora usar if para fazer isso não esteja errado podemos usar uma maneira melhor e que esta disponível desde a versão 6.0 do C#. Vamos recordar...
O operador condicional nulo (?.) também chamado de "operador Elvis" por causa de sua semelhança com um par de olhos escuros sob um grande topete de cabelo. Este operador é uma forma de um operador de acesso de membro(.).
Dada a expressão :
x?.y
Comportamentos do operador:
- O tipo da 
expressão x?.y é o tipo de y, nos casos em que y é um tipo de referência. Se y 
for um tipo de valor, a expressão x?.y será o tipo anulável que envolve o tipo 
de valor subjacente representado por y.
- A especificação para o recurso exige que x seja avaliado não mais de uma vez.
- O operador condicional nulo causa curto-circuito, o que significa que você 
pode encadear vários operadores ?. ,  sabendo que o primeiro nulo 
encontrado impede que os componentes restantes (mais à direita) da expressão 
sejam avaliados.
Exemplo prático:
Considere a classe Pessoa :
| 
		public
		class
		Pessoa { public string? Nome { get; set; } public string? Sobrenome { get; set; } public int? Idade { get; set; } }  | 
	
Agora vamos assumir que temos uma instância da classe Pessoa chamada de p.
Com isso em mente considere as instruções a seguir:
var
nome = p?.Nome;A variável
nome é uma string. 
O valor de nome depende do valor de p. 
Se p for nulo, nome será nulo. 
Se p não for nulo, nome será o valor de
p.Nome. 
Observe que p.Nome pode ser nulo mesmo quando p não 
for.
A variável idade é um int? (que é outra maneira 
de especificar um Nullable<int>). 
Tal como acontece com o nome, o valor da idade 
depende do valor de p. 
Se p é nulo, a idade é um int? sem valor.
Se p não for nulo, idade é o valor encapsulado de p.Idade.
Agora suponha que temos uma lista de pessoas representadas por IList<Pessoa>.
IList<Pessoa> pessoas =
new List<Pessoa>();Usando a operador null condicional podemos escrever:
var nome = pessoas?[3]?.Nome;
A sintaxe ?[] tem a mesma semântica que a sintaxe ?. , é como você acessa o indexador em um array, ou uma classe que implementa um indexador.
As regras para o seu comportamento são as mesmas :
- Se
pessoas for null, nome receberá o valor null. 
- Se pessoas[3] for null, nome receberá o valor 
null. 
- Caso contrário, a nome é atribuído o valor de 
pessoas[3].Nome. 
- No entanto, se pessoas não for null, mas tiver 
menos de quatro elementos, acessar pessoas[3] ainda 
gerará uma OutOfRangeException.
2- 
Utilize tuplas para 
retornar mais de um valor  ![]()
Se você quiser retornar mais de um resultado, a primeira coisa que provavelmente virá à mente é criar uma classe e usar parâmetros out ou usar tipos anônimos. Esta pode ser a forma padrão de agir mas a melhor é usar uma tupla.
A classe Tuple() fornece métodos estáticos para criar objetos de coleção de itens e é uma estrutura de dados que tem um número específico e sequencial de elementos, e o C# 7.0 introduziu o suporte de linguagem para tuplas, que permite nomes semânticos para os campos de uma tupla, usando tipos de tupla novos e mais eficientes.
Exemplo:
| 
		int 
		a = 30; int b = 30; ( int soma, int multiplicacao) = Calcula(a, b);Console.WriteLine( $" 30 + 30 = {soma} e 30 x 30 = {multiplicacao} ");Console.ReadKey(); static (int, int) Calcula(int a, int b){ return (a + b, a * b); }  | 
	
Aqui estamos retornando mais de um resultado usando tuplas de forma simples e direta.
3- Use o 
operador condicional em vez de if-else
![]()
Muitas vezes, por hábito, nos acostumamos a usar o clássico
if-else e pronto; mesmo já existindo recursos na 
linguagem que nos oferecem um melhor resultado.
O operador condicional (:?) avalia uma expressão booleana e retorna um dentre dois valores e pode substituir o uso do if-else.
O formato do operador (:?) é o seguinte:
| 
		 condição ? primeira_expressão : segunda_expressão  | 
	
Se a condição for verdadeira, a primeira expressão é avaliada e se torna o resultado, se falsa, a segunda expressão é avaliada e se torna o resultado. Apenas uma das duas expressões é sempre avaliada.
Abaixo temos um exemplo mostra como podemos usar o operador para reduzir a quantidade de código escrita:
| int 
		x = 10; int y = 20; int maximo; if (x > y)maximo = x; else maximo = y; Console.WriteLine( " Máximo = " + maximo);Console.ReadKey();  | 
	
Usando o operador condicional temos:
| int 
		x = 10; int y = 20; int maximo; maximo = (x > y) ? x : y; Console.WriteLine( " Máximo = " + maximo);Console.ReadKey();  | 
	
Com isso usamos recursos da linguagem C# disponíveis já a um bom tempo para obter um código mais limpo.
E estamos 
conversados... ![]()
"Dando graças ao 
Pai que nos fez idôneos para participar da herança dos santos na luz;
O qual nos tirou da potestade das trevas, e nos transportou para o reino do 
Filho do seu amor;"
Colossenses 1:12,13
Referências:
NET - Unit of Work - Padrão Unidade de ...