Archive for February, 2008

Aplicando diferentes Cabeçalhos num documento Word 8

Estava formatando um documento no Word 2007, que acredito ser a melhor versão do Office, e precisei colocar diferentes layouts no documento, desde orientação de páginas diferentes à cabeçalhos e rodapés.

Nas referências básicas do Word que se encontram na internet pouco se fala em como fazer este tipo de tarefa.

Nos meus anos de uso do Office, nunca havia usado Sections num documento. As sections servem para diferenciar partes de um documento, possibilitando assim aplicar diferentes cabeçalhos e layouts num mesmo documento.

No Word 2007, basta ir em Page Layout e aplicar um break adicionando uma nova section como mostrado na figura.

diff_format_word_2007_01

Uma vez adionado uma nova section no documento, é possível aplicar diferentes formatações do documento como orientação e cabeçalho. Para realizar isso, é preciso desmarcar a opção “Link to Previous” para que a formatação existente não seja aplicada nesta section.

diff_format_word_2007_02

Desse modo é possível ter diferentes formatações num mesmo documento.

Teste do Windows Live Writer 0

Teste…

Foreach vs Iterator 0

Nós últimos dias tenho trabalhado bastante com coleções (collections) do java. Estava habituado a usar Iterator para varrer as coleções. Na versão do Java 5, houve a implementação do foreach para java que mudou a forma como iteramos sobre uma coleção.

Normalmente fazíamos da forma:


List objects = new ArrayList();
objects.add(obj1);
...
objects.add(objn);

Iterator it = objects.iterator();
while (it.hasNext()) {
Object o = it.next();
// do something with the object ‘o’
}

Quando precisamos realmente trabalhar com o objeto, precisamos de uma referência aquele objeto, caso contrário:


while (it.hastNext()) {
it.next().method1();
it.next().method2(); // could result exception
}

Neste caso it.next() lê o objeto corrente e incrementa um marcador para o elemento seguinte. Se usarmos o it.next() novamenete, estaremos trabalhando com outra referência, o que poderia ser um vazio ou um ponteiro nulo.

Por estes motivos a forma de iterar sobre coleções foi mudado para o foreach, que possui a seguinte implementação:


for (Object o : objects) {
// do something with the object 'o'
}

Na prática, quando compilamos o código o resultado do o foreach é o mesmo para a iteração do primeiro caso apresentado, onde criamos um marcador para referênciar o objeto da coleção lido. Usando o for-each trabalhamos de forma mais segura quando iteramos, resultando também num código mais legível, mantendo a tipagem sobre generics collections.

Se tiver dúvidas basta criar um código e compilá-lo.

Depois use o comando javap -c CompiledClass note que não há extensão .class

Relembrando, o uso de foreach só é válido na versão do Java 5+

update

Uma observação que gostária de fazer é a seguinte, alguns programadores gostam de usar a seguinte codifição para iteração:


for (Iterator it = objects.iterator(); it.hasNext(); ) {
Object o = it.next();
// do something
}

É uma opção de cada um, mas acredito que o uso do while fornece um legibilidade de código muito maior, o for ele tende a amontar muita informaçao numa unica linha o que prejudica a leitura. O resultado de compilação é o mesmo tanto para for como while, uma vez que o for é uma expansão para while, ou seja, durante o processo de compilação o bloco de código do for será convertido para o formato do while.