O que há de novo no C# 7.0 - Separador de dígitos

9/7/2016 2:04:00 AM By Felipe Pessoto

Uma pequena mas util nova funcionalidade é a possibilidade de utilizar separadores entre os dígitos, facilitando a leitura. Por exemplo:

class DigitSeparator
{
    public const int MyValue = 123_456;
    public const int MyHexValue = 0xAB_CD_EF;

    public static void Example()
    {
        Console.WriteLine(MyValue);
        Console.WriteLine(MyHexValue);
    }
}

Não há nenhuma diferença no código compilado com ou sem os separadores.

O que há de novo no C# 7.0 - Variáveis Out

8/28/2016 4:39:00 PM By Felipe Pessoto

Até o C# 6.0, chamar um método que utiliza parâmetros out não é tão fluido, pois você precisa declarar as variáveis antes de chamar o método, e nem é possível usar o var já que normalmente não se inicializa variáveis que são argumentos do método out.

Então você precisa verificar quais os tipos das variaveis utilizadas nos parametros out, voltar e declarar antes do método:

public void OutVariablesExample60()
{
    int myX;//var myX doesn't work
    int myY;

    if(MethodOut(out myX, out myY))
    {
        Console.WriteLine(myX);
    }
}

No C# 7.0 esta experiência será melhorada, ao chamar o método você pode declarar as variáveis de forma inline. Com isso o compilador sabe os tipos delas, permitindo inclusive o uso do var:

public void OutVariablesExample70()
{
    if (MethodOut(out int myX, out var myY))
    {
        Console.WriteLine(myX);
    }
}

As variáveis declaradas estarão no escopo do bloco onde o método é chamado. No Preview 4 o compilador ainda restinge o escopo para o statement onde a variável foi declarada, por isso só funciona como no exemplo acima, onde temos um bloco IF. Esta restrição será removida até a versão final.

Sempre que novas funcionalidades são acrescentadas acho interessante verificar como o código IL é gerado para saber como foi feita a implementação. Neste caso é bem simples, o novo código gera uma versão identica ao exemplo em C# 6.0.

GitHub e Two Factor Authentication no Visual Studio

5/3/2015 7:12:13 PM By Felipe Pessoto

Se você ainda não está usando o Visual Studio 2015 RC, que vem com uma extensão do GitHub, vai ter problemas ao sincronizar seu repositório com o GitHub após ativar o Two Factor Authentication.

Para quem ainda não viu a nova extensão pro VS2015:

Atualmente, quem usa o VS2013, vai se deparar um com erro 401, e a tela de login.

Clique em Sync

Será exibida a tela de login.

Não adianta colocar seu login e senha. Pois agora o Two Factor Authentication está ativo.

Como o Visual Studio não suporta essa funcionalidade, você vai precisar criar um Token no site do GitHub. O que é bem simples, acesse o link https://github.com/settings/tokens e clique em "Generate new token"

As opções padrões são suficientes:

Guarde o token gerado

Ele deve ser usado no login do login, a senha deve ficar em branco:

Com isso você vai conseguir sincronizar com sucesso:

 

Desenvolva como se o próximo a manter seu código seja um maníaco homicida que sabe onde você mora.

8/23/2014 1:02:47 AM By Felipe Pessoto

Normalmente quando estou programando não estou pensando em fazer funcionar apenas, na verdade o desafio é fazer de forma simples e óbvia. O fazer funcionar é o mínimo, se não funciona não adianta criar.

As vezes, ou muitas vezes, o dificil é fazer o simples, pode ser porquê não conhecemos a forma certa ou como usar determinado Framework, por estar "dentro" do problema e já influenciado pelo código existente ou mesmo pelo entusiamo de criar códigos mirabolantes.

"Code as if the next guy to maintain your code is a homicidal maniac who knows where you live." -Kathy Sierra and Bert Bates

Criando código bem estruturado, vai poupar seus colegas de muitos problemas (bugs) e economizar tempo sempre que precisar mexer no seu código. Costumo dizer que a próxima pessoa a mexer no código pode ser eu mesmo daqui 6 meses, quando já não lembro muita coisa do projeto, e ter o código limpo acaba sendo uma recompensa.

Para ter código limpo você depende de muitas coisas, mas é muito mais fácil faze-las quando está escrevendo pela primeira vez do que no futuro ter que entender o motivo de tudo que foi feito do jeito que está. Algumas coisas como:

  • Usar uma variavel entre alguns calculos, com um nome descritivo
  • Separar o código em método que façam sentido, normalmente com altura menor que sua tela.
  • Agrupar chamadas em blocos onde o código esteja relacionado de alguma forma e deixando uma linha em branco antes do próximo. Meio que para separar os pensamentos
  • Manter os métodos em ordem de chamadas, por exemplo se tenho um método que chama outros dois método na mesma classe, mantenho eles perto, o chamador primeiro, depois os chamados.
  • Não duplicar código.
  • Não depender de efeitos colaterais, ou regras "fracas".
  • Entre muitos outros. Recomendo o livro Clean Code: A Handbook of Agile Software Craftsmanship

 Outro fato que muita gente ignora é a compilação e deploy. Uma das coisas que dão mais trabalho e medo, é pegar um código muito antigo que muitas vezes nem compila e ter que só alterar uma linha de código. Como garantir que a versão do código que tenho é a que foi pra produção a dois anos atras? E se esse código está com alterarações que nunca subiram pra produção?

E o mais importante, refatorar, refatorar e refatorar. Antes e depois de mexer em algum código, veja as opotunidades de refatorar.

Quando pegar um código muito bagunçado, faça uma limpeza, remova duplicidades, garanta que tudo ainda funciona e então faça suas alterações. E ao terminar garanta que as alterações estão organizadas, entre um teste e outro acabamos deixando coisas para trás.

 A biblioteca que uso pra cache, Fujiy Util, é um bom exemplo de refatoração, apesar de ser pequena, a principio era um só método que fazia tudo, agora tenho classes separadas pra gerar chaves a partir de uma chamada de método e a classe que gerencia o Cache em si.