Arquivo da tag: Dicas

Comando delete em Javascript

Sabia que existe um comando que desaloca da memória uma variável em Javascript?
Pois, ele existe e é bem parecido com o de C++.
Ele se chama “delete”! 🙂

Meio estranho desalocar memória em Javascript… Acho, mas não tenho certeza, que ele já faz isso por que é uma linguagem interpretada…
Em todo caso, nāo faz mal usá-la… 😛
E percebi que nem todo navegador funciona… 😛
Mais informações no site do MDN:
https://developer.mozilla.org/en/JavaScript/Reference/Operators/delete

É isso aí! Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.

Como ordenar um Array em Javascript

Desculpem por este tempo fora, acho que a preguiça me pegou uns tempos para cá…
Vou tentar voltar a minha “programação normal”. 😛
Existem várias soluções na mão para ordenar uma lista: bubble sort, quick sort, table sort, gambiarra sort… 😛 
Mas muita gente não sabe que existe um “facilitador” para isso em Javascript, um método chamado sort na própria “classe” Array:
var frutas = [“Limão”, “Laranja”, “Goiaba”, “Abacaxi”];
frutas.sort();
document.write(frutas);
Legal, não?
E ainda você pode implementar seu método de comparação, igual a Java:
//Numeros em ordem decrescente
var numeros = [1, 2, 3, 4];
numeros.sort(function (a, b) {
     if (a > b) {
          return -1;
     } else if (a

          return 1;
     }
     return 0;
});
document.write(numeros);
Acho que isso vai facilitar a vida de muita gente (a minha, com certeza!). 🙂
Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.

Posso Retornar uma Função ou Receber esta como Paramêtro em Javascript

Resposta: Sim! 🙂

Agora, só para não ficar só nisso, vamos ao exemplo:

//Declaração de função
function receberRetornarFuncao(func) {
        //Executa a função recebida como paramêtro
        func();
        //Retorna uma função
        return function() {
                alert(‘Retorno’);
        };
}

//Variável recebe função retornada (executa a função receberRetornarFuncao)
var funcRet = receberRetornarFuncao(function() {
       alert(‘Paramêtro’);
});
//Executa a função retornada
funcRet();

Obs.: Quando você faz “function nomeDaFuncao() {}” ou “var nomeDaFuncao = function() {}”, você declara esta e mas não executa. Estes só executam quando é feita a chamada “nomeDaFuncao();”.

Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.

Como Reescrever um Método de um Único Objeto em Java

Pela pergunta, parece muito difícil codificar… Mas, para fazer, até que é fácil! 🙂

A gente pode reescrever o método de um único objeto, codificando ele durante a instanciação deste (chamada do construtor). Exemplo:


List listaStrings = new ArrayList() {
      public String toString() {
               return “Reescrevi o método”;
      }
};
listaStrings.add(“Primeira String”);
System.out.println(listaStrings);

Interessante, ele escreveu “Reescrevi o método” na tela!

Se você retirar as linhas de “reescrita”:


List listaStrings = new ArrayList();
listaStrings.add(“Primeira String”);
System.out.println(listaStrings);

Ele escreve “[Primeira String]” (agora parece normal 😛 ).

Obs.: Isso só pode ser feito em objetos que não são de classes “final”.

Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.

Posso mudar o valor de um parâmetro em Java

Resposta direta: Não! 😛

Em Java, um parâmetro sempre é passado por valor (e não por referência). Ou seja, se eu fizer um código assim:

public class Main {
      public static void inc(int i) {
             i++;
      }
      public static void main(String args[]) {
            int a = 0;
            System.out.println(“Valor de a : ” + a);
            inc(a);
            System.out.println(“Valor de a : ” + a);
      }
}

O que será exibido na tela é:
Valor de a : 0
Valor de a : 0

O mesmo vale para uma String:

public class Main {
      public static void helloWorld(String str) {
             str += “ Hello World”;
      }
      public static void main(String args[]) {
            String s = “Alo mundo”;
            System.out.println(s);
            helloWorld(s);
            System.out.println(s);
      }
}

Tela:
Alo mundo
Alo mundo

Ou seja, o valor da variável passada por parametro não muda depois que você retorna para a função que o chamou…

Mas existe um jeito de contornar isso! 🙂

Podemos usar classes que possuem funções e/ou atributos que modificam o estado inicial de um objeto (hã, o que é isso???).

Para facilitar, vejamos o exemplo a seguir:

public class Main {
      public static void helloWorld(StringBuilder str) {
             str.append(“ Hello World”);
      }
      public static void main(String args[]) {
            StringBuilder s = new StringBuilder(“Alo mundo”);
            System.out.println(s);
            helloWorld(s);
            System.out.println(s);
      }
}

Quando você executar, verá algo assim:
Alo mundo
Alo mundo Hello World

A mesma coisa acontece se eu criar um atributo inteiro em uma classe:
class MutableInteger {
         public int i = 0;
         public String toString() {
                 return String.valueOf(i);
         }       
}
E incrementar este na função, passando um objeto instanciado desta: 

public class Main {
      public static void inc(MutableInteger b) {
             b.i++;
      }
      public static void main(String args[]) {
            MutableInteger a = new MutableInteger();
            System.out.println(“Valor de a : ” + a);
            inc(a);
            System.out.println(“Valor de a : ” + a);
      }
}

E o que será exibido é:

Valor de a : 0
Valor de a : 1

Uau! Que coisa estranha… 😛

Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.

Propriedades estáticas em Java

Esta dúvida também apareceu semana passada…

Se eu criar uma propriedade estática do tipo contador e incrementa-la no construtor do objeto…

public class Usuario {
      private static int contador = 0;
      //Construtor
      public Usuario() {
              contador++;
      }
      //Exibe o valor
       public void exibirContador() {
               System.out.println(“No. de Usuarios: ” + contador);
       }
}

E criar e instanciar 5 objetos desta classe, não importa em qual objeto chamar o método exibirContador, que ele sempre retornará o mesmo valor, ou seja, 5 (é como se a variável fosse global):

Usuario u1 = new Usuario();
Usuario u2 = new Usuario();
Usuario u3 = new Usuario();
Usuario u4 = new Usuario();
Usuario u5 = new Usuario();

u2.exibirContador(); //Tente trocar para qualquer outro objeto que sempre dará o mesmo valor…

Outra dúvida que surgiu é a chamada desta variável. Será que é possível chamar assim:
      public Usuario() {
              contador++;
      }
Ou assim:
      public Usuario() {
              this.contador++;
      }

Ou assim:
      public Usuario() {
              Usuario.contador++;
      }

Sim, por incrivel que pareça, é possível. (agora, não me pergunte o porque… parece que isso tem haver com escopo da variável e outras coisas a mais que não faço a menor idéia de como funciona…)

Que confusão… Será que eu consegui explicar alguma coisa?
Bem, de qualquer forma, é bom testar o código acima… 😛

Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.

Qual é a diferença entre classe abstrata e interface em Java

Isso foi me perguntado semana passada….

A resposta:

Classe Abstrata é uma classe que não pode ser instanciada, pode possuir métodos abstratos (ou seja, sem implementação) e que somente pode ser extendida (ou seja, as classes filhas somente podem herdar de uma única classe abstrata).

Interface é uma estrutura que também não pode ser instanciada, possui sempre métodos abstratos e podem ser implementadas em várias classes (ou seja, as classes filhas podem herdar de uma ou mais interfaces).

Exemplo:

//Classe abstrata Som
abstract class Som {
    public abstract void tocar();
    public void info() {
           System.out.println(“Testando som, 1, 2, 3”);
    }
}

//Classe abstrata Video
abstract class Video {
     public abstract void exibir();
     public void info() {
            System.out.println(“Luzes, Camera e Acao”);
     }
}

//Classe Musica que extende a classe Som (funciona!)
class Musica extends Som {
       public void tocar() {
              System.out.println(“Do re mi fa sol la si”);
       }
}

//Classe Filme que extende as classes Video e Som (não funciona…)
class Filme extends Video, Som {
       public void tocar() {
              System.out.println(“Do re mi fa sol la si”);

       }
       public void exibir() {
               System.out.println(“Vendo o filme”);
       }

}

A classe Filme somente funcionaria, se as classes abstratas Video e Som fossem interfaces:

//Interface Video (não há implementação de método)
interface Video {
      public void exibir(); 
}

//Interface Som (não há implementação de método)
interface Som {
      public void tocar();
}

//Classe Filme que implementa as interfaces Video e Som (funciona…)
class Filme implements Video, Som {
       public void tocar() {
              System.out.println(“Do re mi fa sol la si”);

       }
       public void exibir() {
               System.out.println(“Vendo o filme”);
       }

}

Complicado, não? Mas com o tempo, a gente pega a prática… 🙂

Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.

Leak Finder Javascript

Sabia que o Javascript dá vazamento de memória?
Pois é, eu não sabia até agora… (e nem me preocupava com isso…) 😛

Mas, um colega meu passou um link de um artigo que fala sobre isso e uma nova ferramenta para descobrir este tipo de problema:
http://google-opensource.blogspot.com.br/2012/08/leak-finder-new-tool-for-javascript.html

Muito legal! Principalmente para quem faz ou esta fazendo sites para dispositivos móveis (onde o recurso de memória é um pouco mais escasso…).

Valeu pela dica, Morilha!

Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.

Dicas para programação de sites mobile

Aqui vão as minhas dicas para quem esta iniciando neste maravilhoso e complicado mundo de site mobile:
– É possível implementar aplicações responsivas (onde a página se ajusta, através de folhas de estilos, conforme o tamanho da tela/navegador), porém é um pouco difícil de se fazer, se as telas de desktop e de mobile forem muito diferentes (Quer mais informações? Entre no site da wikipédia: http://pt.wikipedia.org/wiki/Web_Design_Responsivo).
– Evitem usar muitas imagens “pesadas” para web-mobile, para que o usuário não sinta uma “lentidão” no sistema.

– Efeitos visuais não são recomendáveis, pois alguns aparelhos de baixo processamento não suportam muito bem isso (travam, ficam lentos, etc.).

– Evitem usar tamanhos fixos no estilo e nos elementos, tentem usar o máximo possível de porcentagem ou “em”.

– Se sua aplicação checar se o navegador é mobile via User-Agent (cabeçalho da página web onde pode-se identificar o navegador e sistema operacional que requisitou esta), vocês podem emular isso via plugins, como este:
 – Se necessário, não esqueçam da meta tag viewport:
– Se vocês não tiverem dispositivos para seus testes, pode-se emular alguns destes via web, através do site:
 http://www.mobilephoneemulator.com/ (Não é 100% confiável, mas é alguma coisa).
     
Obs.: Recomendação para esta ferramenta: para melhor emulação, abram esta url no Google Chrome (para testes no Android) e/ou no Safari (para testes no iPhone).
– Em testes finais, sempre usem dispositivos reais.
– Se for necessário implementar algum efeito visual, testem no pior dispositivo possível (com o menor processamento, tela pequena e pouca memória).

– Sei que isso vale mais para desenvolvimento nativo, mas sempre deem uma olhada nos guidelines disponíveis para Android (http://developer.android.com/design/index.html) e para iOS (https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/Introduction/Introduction.html), pois estes dão dicas legais para quem esta começando. 🙂

Espero que isso ajude alguém…

Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.

Como “chamar” o telefone no iPhone em Objective C

Pelo que me disseram (tentei testar no emulador, mas não funciona… :P), é só criar uma “URL” com o protocolo “tel:” mais o número do telefone. Exemplo:


//Cria o objeto NSURL com uma String (“protocolo:numero_do_telefone”)
NSURL* phoneURL = [NSURL URLWithString: @“tel:1234567890”];
//Chama a aplicação externa para abrir a URL
[[UIApplication sharedApplication] openURL: phoneURL];

Também é possivel criar uma página web para iPhone, com o mesmo protocolo:


Ligue-me&lt/a&gt

Sei lá, tomara que isso ajude alguém… 🙂

Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.