Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Porque sempre usar constantes?

Olá pessoal. Fiquei um pouco perdido quando o Guilherme começou a usar sempre o "let" para definir as variáveis. Não sei se perdi alguma explicação (se é que tem algum motivo forte para isso no Swift), mas sempre usei muito mais as variáveis mutáveis em meus códigos Java. Alguém pode dar um help? Valeu, abraço!

3 respostas
solução!

Normalmente, quando trabalhamos com objetos imutáveis, nós temos mais seguranças. Por exemplo, em java:

    public static void main(String[] args) {
        Calendar today = Calendar.getInstance(); // 14/12/2014
        Calendar tomorrow = getTomorrow(today); // 15/12/2014

        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

        System.out.println("Today: " + formatter.format(today.getTime()));
        System.out.println("Tomorrow: " + formatter.format(tomorrow.getTime()));
    }

    public static Calendar getTomorrow(Calendar today) {
        Calendar tomorrow = today;
        tomorrow.add(Calendar.DAY_OF_MONTH, 1);
        return tomorrow;
    }

Só que esse código tem um problema, ao invés de sair:

Today: 14/12/2014
Tomorrow: 15/12/2014

Ele imprime:

Today: 15/12/2014
Tomorrow: 15/12/2014

E isso é um problema terrível. Imagine, você tem uma entidade do Java e, no meio de uma transação do Hibernate, decide calcular uma data (com Calendar) através de um atributo dessa entidade, se você não tiver o conhecimento e cuidado prévio, o Hibernate vai mudar o valor da data no banco de dados.

Se os autores do Calendar tivessem projetado essa classe para ser imutável, nós sempre estaríamos protegidos desses problemas.

A classe String, por exemplo, é imutável e ficamos livres desses problemas:

String a = "Rafael";
String b = a;
b = b.toUpperCase();
System.out.println(a); // Rafael
System.out.println(b); // RAFAEL

Portanto, deixe seu código menos suscetível a erros silenciosos como esse, prefira o let ao var.

PS: para "resolver" o problema do Calendar, você pode fazer assim: Calendar tomorrow = (Calendar) today.clone();

Só que ficar fazendo isso não é nem um pouco legal.

PPS: É melhor, mesmo, usar o joda time ou a nova API de data do Java 8. Que são imutáveis :)

acho que a explicação do @Rafael ja disse tudo. :D pode fechar o tópico rs

Obrigado pela ajuda Rafael!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software