Cada vez mais ouvimos falar em cross-platform! Não é algo novo, é algo já antigo em verdade se diga! Se nos referirmos ao cross-platform como a capacidade de compilar e correr o mesmo código em múltiplas plataformas de hardware poderemos recuar tanto quanto a criação da linguagem C, por Dennis Ritchie e Ken Thompson em 1972, quando trabalhavam nos Bell Labs. De forma brilhante, estes senhores decidiram escrever uma linguagem que permitisse compilar o código e executá-lo independentemente do hardware. Inicialmente era um DEC PDP-7, posteriormente um DEC PDP-11, tendo a linguagem sido utilizada para escrever maior parte do kernel do sistema operativo UNIX.
Arquivo da Categoria: Colunas
Artigos da secção “Colunas”.
As novidades do C# 6
Com o recente lançamento do Visual Studio 2015, foi lançada a versão 6 da linguagem de programação para a plataforma .NET C#.
Como neste lançamento o enfoque principal foi na nova plataforma de compiladores (“Roslyn”), os melhoramentos e adições à linguagem foram escassos mas, tal como os melhoramentos e adições das versões anteriores, tornarão a vida de quem desenvolve usando a linguagem de programação C# muito melhor.
Async-Await – A alegoria do restaurante
Introdução
Com a introdução de capacidades assíncronas nas linguagens de programação C# e Visual Basic todas as APIs assíncronas tendem a seguir este padrão.
No entanto, muitos programadores não entendem ainda como lidar com esta nova realidade.
Este artigo não pretende explicar como funciona esta funcionalidade, mas apresentar uma alegoria que permite formar um modelo mental de como se deve funcionar com esta tecnologia.
Aplicação auxiliar de actualização
Introdução
O artigo tem por objectivo ajudar o leitor a compreender o algoritmo base por detrás de uma aplicação auxiliar de actualização. Apenas serão expostos alguns excertos de código relevantes para uma percepção lógica do objectivo final.
A linguagem de programação escolhida para desenvolvimento não é relevante.
Ensino Delta Empresa
A distância entre ensino e indústria é um tema real que merece atenção constante por parte da nossa sociedade. Assistimos recentemente no nosso país a um ajustamento forçado, mas necessário, do número de vagas do ensino superior em relação às necessidades empresariais do país. Neste ajustamento a área de tecnologia terá sido das menos afetadas, no entanto esse facto não garante que os recém licenciados venham preparados para aquilo que são as reais necessidades das empresas.
C# – Novas Funcionalidades do C# 6.0 – Antevisão de Abril de 2014
Introdução
No passado evento //Build/, a Microsoft disponibilizou uma versão de antevisão da versão 6.0 da linguagem de programação C#.
Trata-se de uma versão preliminar, pelo que algumas funcionalidades poderão sofre alterações, não fazer parte da versão final ou novas funcionalidades poderão ainda ser adicionadas.
Esta nova versão da linguagem inaugura também uma nova postura da Microsoft no que diz respeito ao código aberto e participação da comunidade.
Métodos de extensão – o que preciso, como quero
O que preciso, como quero… mais ou menos. Mais para mais. Comecemos por o básico: o que são métodos de extensão? Em poucas palavras, métodos de extensão são uma forma de injetar funcionalidades escritas por “nós”, personalizadas, diretamente em tipos que tomamos como “fechados”, quer sejam os escritos por a Microsoft ou os escritos por o vizinho de cima. Quando escrevo “injetar funcionalidades” estou-me a referir a métodos implementados por nós que para o Visual Studio fazem parte de determinada classe, e que podem ser chamados a partir de uma instância.
Programador ^ Gestor
Uma evolução típica na carreira de programador é chegar a gestor. O PM, a carinhosa abreviatura de Project Manager, é muitas vezes alguém que chega à gestão de projeto tendo feito um percurso técnico e, tantas vezes, sem formação em gestão.
O facto de se ser um bom programador não habilita ninguém a ser um bom gestor de equipa ou de projeto na área das tecnologias de informação. Infelizmente, é comum promover os melhores engenheiros de software a gestores menos capazes.
Resolução de Sobrecarga de Método
O enigma desta edição é-nos trazido por Jon Skeet.
Dado o seguinte código:
class X { static int M(Func<int?, byte> x, object y) { return 1; } static int M(Func<X, byte> x, string y) { return 2; } const int Value = 1000; static void Main() { var a = M(X => (byte)X.Value, null); unchecked { Console.WriteLine(a); Console.WriteLine(M(X => (byte)X.Value, null)); } } }
Qual é o resultado da sua execução?
Os Perigos das Estruturas Mutáveis
Dada a seguinte estrutura:
public struct S : IDisposable { public int Value { get; private set; } public S(int value) : this() { this.Value = value; } public void SetValue(int value) { this.Value = value; } public void Dispose() { Console.WriteLine( "Disposing: {0}", this.Value); this.Value = 0; } }
Qual é o resultado da execução do seguinte código?
using (var s1 = new S(1)) { s1.SetValue(-1); } Console.WriteLine(); var s2 = new S(2); using (s2) { s2.SetValue(-1); } Console.WriteLine("Disposed: {0}", s2.Value); Console.WriteLine(); var s3 = new S(3); try { s3.SetValue(-1); } finally { s3.Dispose(); } Console.WriteLine("Disposed: {0}", s3.Value); Console.WriteLine(); var s4 = new S(4); try { s4.SetValue(-1); } finally { ((IDisposable)s4).Dispose(); } Console.WriteLine("Disposed: {0}", s4.Value); Console.WriteLine();