Pular para o conteúdo principal

Elixir - Tipos e operações básicas

Tipos básicos

Os tipos de dados em uma linguagem nos ajudam a entender a natureza da informação sendo manipulada, assim como nos permite garantir a integridade dessas informações, hoje veremos os tipos básicos do Elixir e suas principais características.

Inteiros

São números, no Elixir existe suporte para números binários, octais e hexadecimais:

iex> 255 255

iex> 0b0110 6 iex> 0o644 420 iex> 0x1F 31

Pontos flutuantes

Números com casa decimal, sendo obrigatório ao menos um número antes do separador decimal, possuem até 64 bits suportando números exponenciais:

iex> 3.14 3.14 iex> .14 ** (SyntaxError) iex:2: syntax error before: '.' iex> 1.0e-10 1.0e-10

Booleanos

São valores que determinam se algo é verdadeiro ou falso, no Elixir temos "true" e "false":

iex> true true iex> false false

Átomos

São constantes (valores que não se alteram) onde nome e valor representam a mesma coisa. Nomes de módulos também são considerados átomos e também são usados para referenciar módulos de bibliotecas do Erlang:

iex> :foo :foo iex> :foo == :bar false

iex> is_atom(MyApp.MyModule) true

iex> :crypto.strong_rand_bytes 3 <<23, 104, 108>>

Strings

Representam texto sendo codificados em UTF-8 sendo obrigatório o uso de aspas duplas, dentro de uma string além do exto desejado também é possível incluir quebras de linha (\n):

iex> "Hello" "Hello" iex> "dziękuję" "dziękuję"

iex> "foo ...> bar" "foo\nbar" iex> "foo\nbar" "foo\nbar"


Operações básicas

Operações são a capacidade de uma linguagem em transformar um dado, seja por meio de cálculos ou formatações, também estamos considerando como operações a capacidade de comparar dados, o que nos garante uma forma de realizar avaliações nos mesmos a fim de se chegar a "respostas" que podem nos dizer se dentro de uma avaliação temos uma igualdade, um valor maior que outro, etc.

Aritmética

A exemplo das demais linguagens Elixir suporta as operações de soma, subtração, multiplicação e divisão, um detalhe é que operações com divisão sempre retornam um número de ponto flutuante. Ainda sobre a divisão, temos a disposição duas funções interessantes, sendo um para divisão inteira "div" e outra para se obter o resto "rem":

iex> 2 + 2 4 iex> 2 - 1 1 iex> 2 * 5 10 iex> 10 / 5 2.0

iex> div(10, 5) 2 iex> rem(10, 3) 1

Booleanos

Os operadores booleanos nos permitem determinar uma expressão e funcionam com qualquer tipo de dados, que são "||" (ou), "&&" (e) e "!" (negação). Existem ainda outros três operadores que exigem o uso de um booleano "true/fasle" que são "and", "or" e "not":

iex> -20 || true -20 iex> false || 42 42 iex> 42 && true true iex> 42 && nil nil iex> !42 false iex> !false true

iex> true and 42 42 iex> false or true true iex> not false true iex> 42 and true ** (ArgumentError) argument error: 42 iex> not 42 ** (ArgumentError) argument error

Comparação

Temos a disposição os operadores de comparação padrão "==" (igual), "!=" (diferente), "===" (igual para tipos diferentes), "!==" (diferente para tipos diferentes), "<=" (menor ou igual), ">=" (maior ou igual), "<" (menor), ">" (maior):

iex> 1 > 2 false iex> 1 != 2 true iex> 2 == 2 true iex> 2 <= 3 true

iex> 2 == 2.0 true iex> 2 === 2.0 false

Interpolação de strings

Em Elixir somos capazes de utilizar em uma mesma expressão uma string e uma varável, o que resulta em um resultado único (uma forma de "concatenar"):

iex> name = "Sean" iex> "Hello #{name}" "Hello Sean"

Concatenação de strings

O operador para concatenação é o "<>":

iex> name = "Sean" iex> "Hello " <> name "Hello Sean"


Comentários

Mais visitadas

Alterar cores do PageControl (Delphi)

O padrão Windows todo cinza não é muito atraente, por isso quando nos utilizarmos do PageControl podemos alterar suas cores e fontes da seguinte maneira: Em primeiro lugar devemos alterar a propriedade OwnerDraw para TRUE ; Depois implementar seu método DrawTab da seguinte maneira: //pinta a fonte Control.Canvas.Font.Color:=clBlack; // // pinta a paleta / aba Control.Canvas.brush.Color:=clSkyBlue; PageControl1.Canvas.Rectangle(Rect); Control.Canvas.TextOut(Rect.left+5,Rect.top+3,PageControl1.Pages[tabindex].Caption); // pinta a parte interna (tabsheet) PageControl1.Pages[TabIndex].brush.Color := Control.Canvas.brush.Color; PageControl1.Pages[TabIndex].Repaint; Caso a intenção seja manter cada aba com seu próprio estilo basta adicionar um CASE filtrando o índice das abas: case TabIndex of   0: Control.Canvas.Font.Color:=clBlack;   1: Control.Canvas.Font.Color:=clWindow; ...

Lista de políticos com ficha suja

ATUALIZAÇÃO (08/03/2012 ano de eleição) Representantes de duas pessoas da lista (Eliseu Padilha e Alex Canziani) entraram em contato e pediram que esses fossem removidos, alegando que não houve condenação. É justo essa requisição, porém vale lembrar que escândalos nacionalmente reconhecidos de corrupção não deram em nada, por isso o que realmente conta nesse ano de eleição é uma pesquisa minuciosa sobre os candidatos escolhidos, eu particularmente, por não estar nem um pouco satisfeito, não irei votar em ninguém que já tenha sido eleito. Estou voltando a postar por um motivo nobre, meu tempo continua apertado mas esse post é rápido, na verdade nem meu ele é (visitem o espaço de nosso amigo Lord ), estou apenas repassando essa valiosa informação. Teremos eleição esse ano, e é importante não repetirmos erros passados, vamos ficar atentos em relação a esses nomes e exclui-los de vez do cenário politico nacional. Façamos nossa parte, publicando em nossos blog...

Iniciar e Parar Serviços do Windows (Delphi)

Em certas ocasiões nos deparamos com a necessidade de manipular determinadas atividades do SO, como iniciar ou parar um banco de dados, ou qualquer outro serviço que esteja funcionando no momento. Segue abaixo um código que encontrei na Internet para tal finalidade (não me recordo à fonte, assim que eu a encontrar colocarei). Iniciar Serviço: uses WinSvc; // // start service // // return TRUE if successful // // sMachine: //   machine name, ie: \SERVER //   empty = local machine // // sService //   service name, ie: Alerter // function ServiceStart(   sMachine,   sService : string ) : boolean; var   //   // service control   // manager handle   schm,   //   // service handle   schs   : SC_Handle;   //   // service status   ss     : TServiceStatus;   //   // te...