Trilhas
/
Crystal
Crystal
/
Programa
/
Noções básicas
No

Noções básicas em Crystal

1 exercício

Sobre Noções básicas

Crystal é uma linguagem de programação compilada e orientada a objetos. Estes são alguns dos objetivos da linguagem:

  • Sintaxe inspirada no Ruby.

  • Verificação estática de tipos, mas sem precisar especificar o tipo de variáveis ou de argumentos de método.

  • Poder chamar código C escrevendo bindings para ele em Crystal.

  • Ter avaliação e geração de código em tempo de compilação, para evitar código boilerplate.

  • Compilar para código nativo eficiente.

O trabalho no Crystal começou em 2011 com o objetivo de criar uma linguagem com a elegância e a produtividade do Ruby, mas com o desempenho e a segurança de tipos de uma linguagem compilada. O compilador da linguagem foi inicialmente escrito em Ruby, mas foi reescrito em Crystal em 2013. Ary Borenszweig, Juan Wajnerman e Brian Cardiff desenvolveram e projetaram a linguagem.

Primeiros passos

Variáveis

Para declarar uma variável, use o operador de atribuição =. No Crystal, as variáveis devem usar o formato snake_case.

number = 1
puts number # => 1

number = 2
puts number # => 2

Constantes

As constantes são declaradas com o mesmo operador de atribuição =, mas usam apenas letras maiúsculas, no formato conhecido como SCREAMING_SNAKE_CASE.

NUMBER = 1
puts NUMBER # => 1

Atribuir um valor a uma constante já definida resulta em um erro em tempo de compilação.

NUMBER = 1

NUMBER = 2
# Error: already initialized constant NUMBER

Tipos

Crystal é uma linguagem compilada, o que significa que toda variável ou argumento de método recebe um tipo em tempo de compilação. O compilador é capaz de inferir o tipo de uma variável ou de um argumento de método. No entanto, em alguns casos, é necessário especificar o tipo. Os casos que exigem a definição de um tipo serão explicados em conceitos posteriores.

Métodos

Os métodos são uma forma de agrupar um conjunto de instruções que podem ser reutilizadas. No Crystal, os métodos são frequentemente definidos em uma classe, módulo ou struct. No entanto, os métodos também podem ser definidos fora de uma classe, módulo ou estrutura. Os métodos são declarados com a palavra-chave def, seguida do nome do método. No Crystal, os métodos devem ser escritos em snake_case. Você pode omitir os parênteses quando um método não tem argumentos. Para marcar o fim de um método, você deve usar a palavra-chave end.

def hello
  puts "Hello World!"
end

Usar um método que não existe para o tipo da variável ou do argumento de método resulta em um erro em tempo de compilação.

number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String

Argumentos

Os métodos podem ter argumentos. Os argumentos são dados passados para um método. Para poder passar argumentos a um método, você precisa especificar o nome do argumento. No Crystal, os argumentos devem ser escritos em snake_case. Um método pode ter vários argumentos, mas eles devem ser separados por vírgula.

def hello(name)
  puts "Hello #{name}!"
end

Os métodos também podem ter vários argumentos. Nesse caso, os argumentos devem ser separados por vírgula.

def hello(name, language)
  puts "Hello #{name}! You are learning #{language}."
end

Chamando métodos

Ao chamar um método que pertence a uma classe, módulo ou struct, você deve usar o operador ponto (.). O formato deve ser: <ClassName>.<method_name>. Quando um método não pertence a uma classe, módulo ou struct, você pode simplesmente chamá-lo escrevendo o nome dele. Os métodos sempre retornam implicitamente o valor da última expressão.

Quando um método tem argumentos, você pode usar parênteses ao especificar os argumentos na chamada e na definição do método, assim: <method_name>(<argument_1>, <argument_2>, ...). Quando um método não tem argumentos, os parênteses devem ser omitidos.

def hello(name)
  "Hello #{name}!"
end

hello("Crystal")
# => Hello Crystal!

Ao chamar um método com vários argumentos, eles devem ser separados por vírgula. Os argumentos devem ser passados na mesma ordem dos argumentos do método.

def hello_language(name, language)
  "Hello #{name}! You are learning #{language}."
end

hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.

Chamar um método com o número errado de argumentos resulta em um erro em tempo de compilação.

hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)

Adição, subtração e multiplicação

No Crystal, você pode usar o operador + para somar dois números. Você também pode usar o operador - para subtrair dois números. E pode usar o operador * para multiplicar dois números.

1 + 1
# => 2

2 - 1
# => 1

2 * 2
# => 4

Comentários

No Crystal, os comentários são escritos com o caractere #, seguido de um espaço e depois o comentário. Os comentários são usados para documentar o código. O compilador não executa os comentários.

# This is a comment
Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Noções básicas