C# Iniciante – Short Circuiting
Uma técnica interessante que o C# utiliza é o short circuiting (curto circuito), que significa que se parte de uma declaração é todo verdadeiro ou falso, não há nenhuma necessidade de processar o resto da declaração.
Vamos à prática para entender melhor, analise o código abaixo:
int valor1 = 60;
int valor2 = 10;
int valor3 = 35;
if ((valor1 > valor2) || (valor2 < valor3))
Response.Write("Verdadeiro");
else
Response.Write("False");
if ((valor2 > valor3) && (valor1 > valor2))
Response.Write("Verdadeiro");
else
Response.Write("False");
Primeira verificação: Neste caso, como o valor1 é maior que o valor2 e o operador lógico condicional utilizado é o OR (||), sem mesmo verificar a segunda instrução o resultado desta verificação é verdadeiro.
Segunda verificação: Neste caso, como o valor2 é menor que o valor3 e o operador lógico condicional utilizado é o AND (&&), sem mesmo verificar a segunda instrução o resultado desta verificação é falso.
Projetando bem as expressões que usam os operadores lógicos condicionais, você poderá aumentar o desempenho do seu código evitando trabalho desnecessário. Coloque expressões booleanas simples que possam ser avaliadas facilmente no lado esquerdo de um operador lógico condicional e coloque as expressões mais complexas no lado direito. Com isso, em muitos casos as expressões mais complexas não são avaliadas por não ser necessária.
Orientação Objetos – Comparação de objetos
Imagine as seguintes instruções:
Carro meuCarro = new Carro("Corsa");
Carro carroVizinho = new Carro("Corsa");
Temos dois objetos do tipo Carro (meuCarro e carroVizinho), como estamos passando o mesmo valor (Corsa) ao instanciar os objetos, imaginamos são dois objetos iguais, ou seja, que se tratam do mesmo carro (Corsa)….
Ao comparar este dois objetos o resultado será verdadeiro ou falso?
MessageBox.Show(Convert.ToString(meuCarro == carroVizinho));
O resultado será falso!!!
A igualdade entre objetos é verdadeira somente se forem a mesma instância e não se tiverem os mesmos dados.
Gráficos no .NET
Algo que sempre senti falta foi de componentes (free) para implementação de gráficos, desde VB 6 até o .NET, não tinhamos componentes gratuítos disponibilizados pela Microsoft para a construção de gráficos, digo não tinhamos pois, recentemente a Microsoft lançou o “Microsoft Charting Control”.
Agora, com este componente conseguimos construir os mais variados tipos de gráficos para nossas aplicações, tanto em WinForms como WebForms.
Você consegue utilizar este novo componente somente com o Framework 3.5 SP1 e através do Visual Studio 2008 SP1.
Teclas de atalho do Visual Studio 2008
Aumente sua produtividade, baixe o poster com as teclas de atalho do Visual Studio 2008
C# 3.0 – Novidade: Propriedades automáticas
Antes da versão 3.0 do C#, para definir as propriedades de uma classe qualquer, era necessário declarar um atributo e uma propriedade com seu get e set, exemplo:~
private string _nome;
public string nome
{
get { return _nome; }
set { _nome = value; }
}
Agora, no C# 3.0, resolvemos esta questão com uma única linha de código, sem a necessidade da declaração do atributo, nem dos blocos get e set.
Veja o exemplo a seguir:
public string nome { get; set; }
C# 3.0 – Novidade: Tipagem implícita
Um novidade do C# 3.0 é a tipagem implícita.
Para isso, foi introduzido um novo operador “var” na linguagem, com este novo “operador”, você pode
criar variáveis sem definir explicitamente o seu tipo.
O tipo será definido de acordo com a expressão utilizada para inicializar a variável, neste caso, a variável continua sendo declarada como uma variável fortemente tipada.
Para garantir que uma variável criada com o var seja fortemente tipada, você precisa sempre iniciá-la na mesma linha da declaração da variável, e o inicializador da variável precisa ser uma expressão, e não um objeto ou um valor nulo.
A tipagem implícita é fundamental para a utilização dos tipos anônimos.
Veja dois exemplos abaixo:
var minhaVariavel = 89; //Variavel fortemente tipada do tipo Int
var meuArray = new[] {"Banana","Laranja","Abacate"}; //Variável Array fortemente tipada do tipo String
Namespace (.NET) e Package (Java)
À medida que um programa cresce, temos alguns problemas como por exemplo: muito código é mais difícil de entender e manter; mais código normalmente significa mais nomes, mais dados nomeados, mais métodos nomeados e mais classes nomeadas. à medida que o número de nomes aumenta, aumentam também as chances da compilação do projeto falhar porque dois ou mais nomes estão em conflito.
Antigamente, os programadores tentavam resolver o conflito pré-fixando os nomes com algum tipo de qualificador. Essa solução não é boa porque não é escalável, os nomes tornam-se maiores e você gasta menos tempo escrevendo o software e mais tempo digitando e lendo e relendo nomes longos e incompreensíveis.
Para resolver este problema, tanto no .NET quanto no Java, podemos criar um “contêiner” nomeado, desta forma duas classes com o mesmo nome não serão confundidas entre si se elas estiverem em “contêiners” diferentes. É uma boa prática definir todas as suas classes em “contêiners”.
Os contêiners podem ser utilizados tanto no .NET quanto no Java, no .NET chamamos de “namespaces” e no Java chamamos de “packages” (pacotes).
Conceitualmente não existem diferenças entre as duas linguagens, porém, sintaticamente existem diferenças, mas nada que não seja de fácil assimilação. Veja:
- Em Java, um package representa fisicamente uma pasta (ou diretório para os puristas);
- Em .NET um namespace não está relacionado a uma pasta. É possível ter uma pasta com um nome e dentro desta pasta, classes que pertençam a um namespace com outro nome, ou ainda, em uma pasta é possível existirem classes com namespaces diferente.
Exemplo .NET:
namespace Financeiro
{
class Calculo
{
……
}
}
namespace Estoque
{
class Calculo
{
……
}
}
Exemplo Java:
package br.com.meusistema.financeiro;
public class calculo {
…….
}
package br.com.meusistema.estoque;
public class calculo {
…….
}
Nos dois exemplos acima (.NET e Java), conseguimos ter duas classes com o mesmo nome, porém em contêiners diferentes dentro do mesmo sistema.
.NET
Financeiro.calculo
Estoque.calculo
Java
br.com.meusistema.financeiro.calculo
br.com.meusistema.estoque.calculo

