C# - Conceitos : Operador Condicional (Ternário ?: ) e operador ?? (Null-Coalescente)
Neste artigo eu vou apresentar os conceitos básicos da linguagem C# para usar o operador condicional ou ternário ( ? : ) e o operador ?? (null-coalescente). |
O operador ternário ( ? : ) é utilizado para validar uma condição.
Recursos usados :
Conceitos Básicos - Operador Ternário ( ? : )
O operador ternário ( ? : ) funciona assim:
Você tem uma condição que deve ser validada como verdadeira ou falsa.
Se a condição for verdadeira o operador retorna uma expressão e se for falsa retorna outra expressão.
Sintaxe:
condição ? expressão1_se_true : expressão2_se_false
Argumentos :
O operador ? : pode ser usado como um atalho para uma instrução if...else.
Este operador é normalmente usado como parte de uma expressão maior onde uma instrução if...else seria inconveniente.
Vejamos um exemplo usando a instrução if...else :
using System;
namespace OperadorTenario
{
class Program
{
static void Main(string[] args)
{
DateTime agora = DateTime.Now;
Console.WriteLine("Agora: {0}", agora.ToLongDateString());
string saudacao = "";
if (agora.Hour > 12)
saudacao += "Boa Tarde.";
else
saudacao += "Bom Dia.";
Console.WriteLine("São {0} horas", agora.Hour);
Console.WriteLine(saudacao);
Console.ReadKey();
}
}
}
|
Vamos substituir a instrução if..else pelo operador ternário ( ? : ) :
using System;
namespace OperadorTenario
{
class Program
{
static void Main(string[] args)
{
DateTime agora = DateTime.Now;
Console.WriteLine("Agora: {0}", agora.ToLongDateString());
string saudacao;
saudacao = agora.Hour > 12 ? "Boa Tarde" : "Bom dia";
Console.WriteLine("São {0} horas", agora.Hour);
Console.WriteLine(saudacao);
Console.ReadKey();
}
}
}
|
Podemos aplicar este recurso em qualquer local como por exemplo na definição de um delegate:
1- Usando else...if
Func<Aluno, string> verificaNome = aluno =>
{
if (aluno.Nome.StartsWith("J"))
return aluno.Nome;
else
return "O Aluno não atende o critério.";
};
|
2- Usando o operador ternário
Func<Aluno, string> verificaNome = aluno => aluno.Nome.StartsWith("J") ? aluno.Nome : "Não atende o critério";
|
Outro uso que podemos ter é usar o operador ternário como parâmetro de um método.
Exemplo:
using System;
namespace Ternario_Parametro_Metrodo
{
class Program
{
static void Main(string[] args)
{
string nome1 = "Macoratti";
string nome2 = "José Carlos";
ExibirNome(nome1.Length > 5 ? nome1 : nome2);
Console.ReadKey();
}
public static void ExibirNome(string texto)
{
Console.WriteLine(texto);
}
}
}
|
No código acima o resultado do operador ternário será usado como parâmetro no método ExibirNome.
Conceitos Básicos - Operador ?? (Null-Coalescente)
Outro uso que você pode ter é verificar se uma variável possui um valor Null.
Abaixo temos um exemplo que verifica se uma variável é null usando a instrução if...else, o operador ternário e o operador ?? Null Coalescing:
Nota: O significado de Coalescente em português é : Que de liga de modo intenso; que adere com facilidade; aderente ou aglutinante.
namespace Ternario_Null
{
class Program
{
static void Main(string[] args)
{
// usando if ...else -----------------------
object a = null;
object b = new object();
object c;
if (a != null)
c = a;
else
c = b;
//------usando operador ternário-----------
object x = null;
object y = new object();
object z = (x != null) ? x : y;
//--------usando o operador ?? -------------
object i = null;
object j = new object();
object k = i ?? j;
}
}
}
|
Para verificar valores null o operador mais indicado é o operador ?? ( null-coalescente).
O operador ?? é chamado operador null-coalescente. Ele simplifica a verificação de valores nulos. (null)
Ele pode ser usado tanto com tipos anuláveis ( tipo? ) como com tipos de referência.(strings)
Sua representação é: x ?? y
Ele retorna o operando à esquerda se o operando não é nulo; caso contrário, retorna o operando do lado direito.
ou seja se x não é nulo, será retornado x, caso contrári será retornado y.
Na sintaxe: x ?? y
x é o primeiro
operando que é do tipo nullable
y é o segundo operando que tem um valor non-nullable do mesmo tipo
Durante a execução de código, se x for avaliado como null, y é retornado como o valor.
Lembre-se que o operador ?? é avaliado da direita para a esquerda.
Então se você tem uma expressão da forma x?? y?? z
Esta expressão é avaliada como x ?? (y ?? z)
Exemplo:
class
Program { static string _nome; static string Nome { get { return _nome ?? "Default"; } set { _nome = value; } } static void Main(string[] args) { Console.WriteLine(Nome); Nome = "Macoratti"; Console.WriteLine(Nome); Nome = null; Console.WriteLine(Nome); } } |
Exemplo usando o operador ?? :
using System;
namespace Operador_Coalescente
{
class Program
{
static void Main(string[] args)
{
int? x = null;
//se x for null então retorna -1
//se x Não for null entao null
int y = x ?? -1;
Console.WriteLine(y); //retorna -1
Console.ReadKey();
}
}
}
|
O resultado de um operador ?? não é considerado como sendo uma constante, mesmo que ambos os seus argumentos sejam constantes.
Pegue o exemplo do projeto aqui: OperadorTenario.zip
João 5:24 Na verdade, na verdade vos digo que quem ouve a minha palavra, e crê naquele que me enviou, tem a vida eterna, e não entrará em condenação, mas passou da morte para a vida.
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
VB .NET - Realizando operações com List(of T) - Macoratti.net