quarta-feira, 21 de agosto de 2013

Creating Indexers C#

Artigo em português -> http://felipeaugusto-developer.blogspot.com.br/2013/08/criando-indexadores-c.html

After all, what's indexers in C#?
It's only a intelligent array that can be used both classes as structures, an example:


Let's create our own indexer.

//creating the class
public class Vehicle
{
private Dictionary<string, string> _parts = new Dictionary<string, string>();

//creating the indexer (the "this" is a reference for the class)
public string this[string key]
 {
     get { return _parts[key];}
     set { _parts[key] = value; }
}


//After instantiating the Vehicle, let's use the indexer:

var car = new Vehicle();
car["fabricante"] = "Honda";
 car["modelo"] = "Civic";
 car["year"] = "2011";

}

Remember that the name of the Key can be anyone, for example, put the name car["indexer"]="value";


If you want to return the value of some property indexed, just do this:


Console.WriteLine("Constructor {0}", car["fabricante"]);


Hope that you enjoyed! =P

Nomear variáveis e métodos

Olá,

Estou criando este artigo como um apelo aos desenvolvedores em geral, sempre que faço manutenção em software as vezes dá vontade de entrar em depressão com código mal feito e o principal vilão são o nome das varáveis, se você não sabe como utilizar a palavra reservada "var" por favor evite utilizá-la.

Citarei alguns exemplos de boas práticas para os nomes:

Nome de variável: A menos que estejamos falando de um laço for ou algum contador por que diabos você vai criar váriaveis com o nome de "i", "x", "k", etc..
Coloque nomes do que a variável irá armazenar, se sua variável vai armazenar um salário então ela tem que ter o nome de:

decimal salario = 500.00;

e não decimal sal = 500,00;
ou até mesmo decimal  salarioValor = 500.00;
decimal salarioFuncionario = 500.00;

Sabe onde está o erro (na verdade uma informação desnecessária e não necessariamente um erro)? Se é um salário eu não preciso informar que é um valor, por que eu já sei disso, a não ser que o salario estivesse em uma categoria, ai sim poderíamos falar:

string categoriaSalario = "JR";

Nome de métodos: MUITO cuidado com o nome dos seus métodos um simples nome mal dado pode confundir muito seu companheiro de desenvolvimento, quer um exemplo?
Procurem dar nomes que falem aquilo que o método faz, se o método calcula algo então o nome dele tem que ser CalcularAlgo() e não Calcular();

Observem este método (SEMPRE use verbos na primeira palavra do seu método, um método é uma ação então nada mais correto do que usar verbos):

List<Funcionario> BuscarFuncionario()

De cara já termos um erro, nosso tipo de retorno é uma lista então no minimo esse método tem que estar no plural, se a classe é um funcionário no minimo o que se espera é que se esteja buscando funcionários

Correção:

List<Funcionario>GetAll()

Pronto já temos um método bem melhor do que o outro que não tinha pluralização, pensa q é frescura? Então vamos olhar isso:

Exemplo 1:

Funcionario funcionario = new Funcionario();
var funcionarios = funcionario.BuscarFuncionario();

Exemplo 2:
var funcionario = new Funcionario();
var listaFuncionarios = funcionario.GetAll();


Não preciso nem dizer que o exemplo 2 logo de cara você sabe que seu método está retornando uma lista de funcionários não é verdade?
Tirando que no exemplo 1 você encontra a palavra funcionário tantas vezes que fica até poluído.







terça-feira, 20 de agosto de 2013

Criando indexadores C#

Afinal o que são indexadores em C# ?
Nada mais são do que um array inteligente, podem ser usados tanto em classes como estruturas, vamos à um exemplo:

Vamos criar nosso indexador

//criando a classe
 public class Veiculo
    {        
        private Dictionary<string, string> _parts = new Dictionary<string, string>();      
     
//criando o indexador (o this referecia a classe)
        public string this[string key]
        { 
            get { return _parts[key];}
            set { _parts[key] = value; }
        }

Após instaciar o Veiculo vamos utilizar o indexador

var carro = new Veiculo();
carro["constutora"] = "Honda";
carro["modelo"] = "Civic";
carro["ano"] = "2011";

Vale lembrar que o nome da Key pode ser qualquer um, poderia por exemplo colocar o nome carro["indexer"] = "value";

Se quiser retornar o valor de alguma propriedade indexada basta fazer da seguinte forma

Console.WriteLine("Construtora {0}", carro["construtora"]);

Espero que tenham entendido =P