Inscrições Abertas para o Join Community Segunda Edição

Join Community Event Vitrine

Os grupos GoJava, DevGoiás, GoPHP, GDG e GruPy-GO irão se reunir novamente no próximo dia 31 de agosto para abusar do conhecimento e trocar boas experiências! Anunciamos a 2ª EDIÇÃO do Join Community, que nesta segunda edição traz bons assuntos relacionados ao desenvolvimento de software com dois temas principais: Web UI (Interfaces e muito JavaScript) e Pensando fora da caixa (onde você pode conhecer aquilo que já faz mas de uma forma diferente).

A Tribo do C.I. recomenda fortemente não apenas por ter um integrante palestrando mais também por achar que é um ótima oportunidade de conhecer pessoas e aprender muito na troca de experiências.

Embora seja um evento organizado por comunidades de Tecnologia de Goiás já estão confirmadas palestras com Profissionais que são referência em todos o país, isso não também não significa que os profissionais de Goiás também não sejam referência 😎 .

Links:

Métodos de Extensão

Uma característia presente nas linguagens de dinâmicas e que também está disponível na plataforma .NET, é a capacidade de extender uma classe sem a que seja necessário uma herança da mesma, o que seria impossível numa classe selada, que não permite que seja herdada.
Veja um exemplo em ruby (trecho retirado do artigo Micro Tutorial de Ruby – Parte I):

class String
def empty?
self.nil? || self.size == 0
end
end

nome = "Sebastião Relson"
nome.empty?

Veja como fica a saída do programa utilizando o IRB:

relson@lenny-amd64:~$ irb
irb(main):001:0> class String
irb(main):002:1> def empty?
irb(main):003:2> self.nil? || self.size == 0
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> nome = "Sebastião Relson"
=> "Sebasti\303\243o Relson"
irb(main):007:0> nome.empty?
=> false
Agora um exemplo em c# .NET:

using System;

namespace MetodosExtensao
{

class MainClass
{
    public static void Main(string[] args)
    {
        int i = 1;
        Console.WriteLine(i.Negativo());
    }
}

static class ExtensoaInteiro
{
    public static int Negativo(this int i)
    {
        return -i;
    }
}
}

Nesse exemplo a saída seria somente:

-1

Para facilitar a inserção do código no blog e deixar e exemplo mais simples coloquei as classes no mesmo arquivo. O código foi retirado com adaptações do livro Microsoft Visual C# 2008, Passo a Passo - John Sharp.

Para finalizar leia também o artigo de um grande amigo meu, o memorável Rafael Camargo que fala a respeito que também fala de métodos de extensão o artigo é C#: Extension Methods & Speech.

Variáveis, Escopo e Modificadores de acesso

Nessa postagem tem um título bastante abrangente, pois bem, procurarei esclarecer e fazer comparações de como funcionam as Variáveis, Escopo e conseqüentemente os Modificadores de acesso em diversas linguagens e plataformas, desmitificando assim alguns “falsos cognatos”.

Variáveis

Uma variável é um espaço rotulado por um identificador (geralmente segue a regra de nomeação para todos os identificadores) para armazenamento de valores de acordo com o tipo definido. O espaço em memória a ser reservado depende do tipo e que foi definido, basicamente tais tipos podem ser divididos em Tipos Primitivos ou Tipos Referência.

Tipos primitivos

São tipos de variáveis com tanho e formatos fixos, em linguagens orientadas a objetos esses tipos não existem ou mesmo são encapsulados por uma classe que o representa. Um tipo primitivo pode ser um valor numérico inteiro de ponto flutuante ou um valor literal. Cada plataforma ou linguagem tem suas restrições e definições sobre como e quais serão eles.

Tipos Referência

Diferente dos tipos primitivos os tipos de referência fazem uma referência a um objeto em memória dessa forma várias variáveis podem fazer referência a um único objeto em memória. Os valores não são fixos, no entanto hipoteticamente pode supor se os atributos de uma classe forem de tipos primitivos o espaço armazenado será o suficiente para os atributos acomodar todos os atributos.

Geralmente quando se declara uma variável, é necessário informar um identificador e o seu tipo, porém algumas linguagens não permitem ou mesmo não exigem que seja informado um tipo.

Vejamos algumas formas de declaração de variáveis:

  • No Visual Basic
Dim nomeIdentificador As Tipo

Onde a palavra reservada
Dim (de dimensão) é seguida por um nome para o identificador, opcionalmente pode se usar a palavra reservada As para informar o tipo. Se um identificador novo é encontrado no código com um valor a ele sendo atribuído, o compilador cria automaticamente uma nova variável. Para forçar que todas as variáveis sejam declaradas é necessário informar em cada início de arquivo de código fonte a palavra reservada Option Explicit.

  • Nas linguagens baseadas na Linguagem C (C++, Java, C# .NET, etc.)

String nomeIdentificador = "Valor Inicial;"

String é um tipo para exemplificar (representa uma cadeia de caracteres) um nome para um identificador e opcionalmente pode se atribuir um valor inicial como no exemplo especificado, a cadeia de caracteres “Valor Inicial” e por fim “;” para finalizar a expressão.

Escopo

O escopo diz respeito a visibilidade de um identificador, basicamente pode se dizer que um identificador é visível no bloco que foi declarado, porém em alguns casos isso pode não ficar bem claro, se deseja modificar a visibilidade de um identificador é necessário utilizar um modificador de acesso que seja adequado a visibilidade desejada, como descrito no tópico a seguir.

Modificadores de acesso

Os modificadores de acesso servem para alterar a visibilidade de um identificador e são utilizados em varios contextos diferentes.
Em algumas plataformas de linguagens como C, Visual Basic 6 existe as variáveis Globais que são vistas por todo o programa.
No Visual Basic 6 era necessário utilizar a palavra chave Global. O que é um problema ter a visibilidade em todo o programa pois se torna muito complexo fazer o controle de quem modifica o valor da variável.
Com a criação dos espaços de nomes (namespace) ou Pacotes (Packages) em Java, todos os identificadores fazem parte de uma hierarquia.

Os modificadores acesso mais comuns são o private ( privado ) e public (público) que são utilizados tanto em membros da classe como também na própria classe.

Com o modificador de acesso private o idenficiador é visto somente dentro do bloque em que é declarado, no entanto, o público permite o acesso em qualquer lugar.

Existem outros modificadores que não são tão comuns como os descritos acima, são eles, o protected( protegido) que tem o comportamento semelhante do private porém ainda tem visibilidade para as classes que o herdam.

Outros que são específicos de plataforma são o “friend” do Visual Basic 6 que permite que somente seja acessível de dentro da DLL ou EXE em que é declarado, funcionamente análogo ao “internal” do C# .NET, que restringe a visiblidade ao Assembly em que é declarado, esse também é o modificador padrão quando não é informado na declaração. Já no Java a visibilidade é para o pacote, ou seja não é necessário estar no mesmo “jar” a visiblidade é definida pela organização lógica.