Aprendendo uma nova linguagem

Aprender uma nova linguagem de programação não é tarefa trivial. O domínio de uma linguagem como Java, Scala ou Perl exige processos de aprendizado muito semelhantes aos da aquisição de uma nova linguagem humana.

Primeiramente, pode-se perceber que para programar computadores o domínio da lingua inglesa é essencial, o que já configura o primeiro obstáculo para nós falantes do português. Primeiro devemos aprender um segundo sistema simbólico e idiomático humano, para só depois aprendermos a programar os computadores usando os símbolos aprendidos. Portanto, a programação é uma tarefa duplamente complicada para aqueles que tem o inglês como segundo idioma.
Continue reading

Por que o foreach não funciona nos templates Play Framework

Como todos sabem, a partir do Play Framework 2.0, o antigo sistema de template foi substituido por uma solução muito mais limpa e poderosa. Basicamente usa-se o caractere “mágico” @ para tudo. No entanto, para aqueles que vem de outros sistemas de templates, podem haver alguns contratempos.

Um dos erros mais comuns é o de implementar idiomas imperativos no sistema de template. O exemplo mais claro é o fato do foreach não funcionar. Vejamos por que.
Continue reading

Programação imperativa em Scala

Mencionamos anteriormente que Scala tem a meta de integrar grandes sistemas usando apenas uma linguagem: desde rápidos scripts de instalação e administração de tarefas simples, à lógica de negócios, passando por complexos serviços distribuídos. Em todos os nossos tutoriais até agora, os idiomas usados foram funcionais. Por exemplo, usamos o idioma fold no lugar de loops while e do while, e todas as nossas variáveis foram imutáveis.

Porém, Scala é uma linguagem multi-paradigma e permite que todos os algoritmos funcionais que vimos até o momento sejam implementados também em idiomas imperativos.
Continue reading

Criando scripts em Scala

Em nossa Introdução a Scala falamos da escalabilidade da linguagem: é uma plataforma que permite criar desde scripts rápidos até grandes sistemas multitarefas e distribuídos. A meta dos criadores de Scala é tornar possível a construção de grandes sistemas usando apenas uma linguagem, ao invés da tradicional combinação de scripts Python ou Perl para tarefas de manutenção e instalação, Java ou Scala para a lógica de negócios e triggers/rotinas no banco de dados. Com Scala, é possível centralizar todo o desenvolvimento na mesma linguagem.
Continue reading

Tuplas e listas básicas em Scala

Em diversas circunstâncias, criar classes inteiras para acomodar dados simples pode tornar o código desnecessariamente complicado. Talvez seja preciso armazenar apenas a matrícula de alunos e sua menção no semestre em uma lista. Podemos precisar trabalhar uma lista de nomes e emails, para a qual seria um exagero criar uma classe dedicada. Para agrupar dados simples, Scala oferece a funcionalidade de tuplas. Tuplas são estruturas de dados que permitem agrupar dados estruturados com sintaxe extremamente simples: parenteses delimitam uma tupla, e cada ítem listado entre parenteses tem um significado de acordo com a ordem em que aparece.
Continue reading

A expressão for em Scala

Na linguagem Scala, for não é apenas um loop imperativo como em C e Java. for tem duas sintaxes, uma das quais é, na verdade, uma expressão e como tal retorna um valor. O valor de retorno do loop for em Scala é Unit, ou seja, não é um valor usável. Já o valor da expressão for depende do campo retornado através da palavra-chave yield.
Continue reading

Compensa usar C ou Assembler no lugar de Scala/Java?

Certas características de Scala, em especial a conversão automática de números inteiros em objetos(“autoboxing”), podem exigir maior processamento computacional do que suas contrapartidas usando apenas tipos primitivos. Cada objeto possui um “chassi” ou “envólucro” o qual acomoda as chamadas de métodos, dados de instância e assim por diante. Logo, um simples número inteiro em Scala, o qual poderia ser armazenado em 4 ou 8 bytes, possui na verdade algumas dezenas de bytes e código binário atrelado ao mesmo! Continue reading