Trabalhando com String no Scala

Neste post iremos aprender a trabalhar um pouco com String no Scala.

Declaração

Já vimos nos posts anteriores como declaramos uma variável do tipo String. Podemos fazer de duas formas basicamente:

1) Especificando o Tipo

val name: String = "Diego"

2) Omitindo o tipo, deixando que o Scala determine automaticamente o tipo.

val name = "Diego"

Funções úteis

Capturando um caracter dentro de uma String

Para capturar um caracter, basta informar o indice que o caracter está posicionado. Podemos fazer isso de 3 formas:

val name = "Diego"
println(name(0))
println(name(1))
println(name(2))

Continue lendo

Declarando variáveis no Scala

Vamos colocar a mão na massa agora! Como primeiro assunto, iremos aprender como funciona a declaração de variáveis no Scala. Entre no console do Scala e vamos estudar!

Declaração

[escopo] [tipo da acesso] [nome da variável]: [tipo da variável] = [Valor padrão]

Exemplo:

private val name: String = "Diego"

Essa é a forma completa de declaração, porém não precisamos declarar sempre a forma completa, podemos omitir alguns parâmetros. Mas antes disso iremos entender cada parte da declaração completa.

1) Escopo

Escopo de acesso da sua variável, podendo ser:

a) public

Será uma variável pública, ou seja, será acessível dentro de sua própria classe, instancias dessa classe e subclasses. Esse é o escopo default na declaração de variável no Scala, então podemos omiti-lo.
Continue lendo

Primeiros passos no Scala

Console

Para entrarmos no console, basta digitarmos scala no terminal. Para quem vem do Ruby, o console do Scala funciona similar ao IRB.

O Console é o melhor lugar para darmos o primeiro passo no aprendizado da linguagem do Scala e até mesmo futuramente, caso precisemos testar algum trecho de código.

Agora que você entrou no console do Scala, digite:

println("Hello World!!")

Note que podemos quebrar linha no console para executarmos blocos de código.

val lang = "Scala"

for(l <- lang) {
  println(l)
}

Para sair do console basta pressionar Ctrl + c ou digitar o comando exit.

Continue lendo

Instalando o Scala

Instalação

A instalação do Scala é bastante simples, basta:

1) Baixar os binários do Scala no site http://www.scala-lang.org/download/ e extrair os arquivos em alguma pasta em seu computador.

2) Adicionar em seu PATH, o local onde o Scala se encontra. Para isso adicione no ~/.bashrc (Linux) ou ~/.bash_profile (Mac) a seguinte linha:

OBS: Lembre-se de alterar o caminho do PATH para a pasta bin de onde você extraiu os arquivos da instalação do Scala. Após adicionar o PATH reinicie seu terminal ou recarregue o arquivo bash com o comando: source ~/.bashrc (Linux) ou ~/.bash_profile (Mac).

export PATH=$PATH:/Users/diego/Documents/scala/scala-2.10.4/bin

Pronto! Instalação realizada com sucesso!

No próximo post iremos brincar um pouco com o console!

Até lá!

Introdução à Scala

A linguagem Scala

Criada por Martin Odersky, a linguagem Scala foi influenciada por outras linguagens com o objetivo de unir o melhor de cada linguagem, como a legibilidade e facilidade de escrita do Ruby, conceitos de programação funcional como na Haskell, a robustez e maturação da linguagem java, entre outros fatores, além do fato de rodar sobre a JVM (Java Virtual Machine).

Orientação a objetos

A Scala é uma linguagem orientada a objetos, onde, todo valor é um objeto e as classes são quem definem os objetos presentes no sistema de software. Cada classe determina o comportamento (definido nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos.

Programação Funcional

Assim como na linguagem Haskell e Erlang, a Scala também se beneficia da programação funcional, evitando estados ou dados mutáveis, ao contrário da programação imperativa, que enfatiza mudanças no estado do programa. Funções são tratadas como valores, você pode passar uma função para uma variável, como parâmetro para outra função ou até mesmo como retorno de uma função.

Continue lendo

Primeira temporada de Scala

De tempos em tempos, gosto de dar uma reciclada em meus conhecimentos. Aprender uma nova linguagem, um banco de dados novo ou um novo framework.

Tecnologia é igual ao tempo, não para! Temos que estar por dentro de tudo a todo momento. Não buscando ser um especialista, mas sim ter um pouco do conhecimento, entender do assunto, acompanhar a linha de raciocínio atual, ter uma carta na manga.

Decidi iniciar um estudo esse ano na linguagem Scala. Vou tentar postar em doses omeopáticas um pouco do que for aprendendo.

Escolhi a linguagem Scala para estudo pelo fato de algumas grandes empresas apostarem e conseguirem ter melhoras significativas no que diz respeito a performance, scalabilidade, produtividade, segurança e etc. Twitter, Foursqure, Thumbr e Linkedin, são um bom exemplo de empresas que utilizam Scala.

Infelizmente ainda não temos um vasto material no Brasil sobre Scala. Espero contribuir um pouco com quem procura dar os primeiros passos na linguagem, assim como eu.

É isso ai, nos vemos nos próximos posts!

Utilizando cache em apps multi-tenancy

Recentemente tive um problema ao utilizar cache em uma aplicação multi-tenancy. Como teria uma aplicação com vários banco de dados, precisaria também dividir meus caches, para não misturar informações de clientes.

Estou utilizando a gem apartment, o qual me disponibiliza um método Apartment::Database.current_database, para capturar o nome da database levando em conta o cliente atual ( domínio ).

Após várias tentativas, consegui fazer funcionar sobrescrevendo o método responsável pelo namespace.

Cache default do rails:

# config/initializers/multi_tenancy_cache.rb
module ActiveSupport
  module Cache
    class Store
      def options
        @options.merge(namespace: Apartment::Database.current_database)
      end
    end
  end
end

Utilizando a gem dalli:

# config/initializers/multi_tenancy_cache.rb
module Dalli
  class Client
    private
    def namespace
      Apartment::Database.current_database
    end
  end
end

OBS: Tanto o cache padrão do rails, quanto a gem dalli oferecem configuração para namespace, porém não achei nenhuma forma de utilizar de forma dinâmica.

Abraços,
Diego