Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Crystal: Uma linguagem para humanos e computadores

Crystal: Uma linguagem para humanos e computadores

João Lanjoni

May 13, 2023
Tweet

More Decks by João Lanjoni

Other Decks in Programming

Transcript

  1. Prazer, Guto Técnico em Informática e Futuro Bacharel em Sistemas

    de Informação pelo IFSP, Engenheiro de Software na Nimble, Entusiasta de Open-Source, Amante de UNIX, Membro da He4rt Developers e Embaixador brasileiro da linguagem de programação Crystal @lanjoni @gutolanjoni @gutolanjoni Para mais infos acesse: https://lanjoni.dev vulgo João Augusto Lissoni Lanjoni /lanjoni
  2. Como eu conheci? • Pandemia (2021) • Estudando Ruby •

    Lançamento da versão 1.0 em março • Me interessei pelo funcionamento da linguagem
  3. Características • Proposta de ser rápido como C • Sintaxe

    elegante como Ruby • Compilada e usa LLVM (ou seja, nada dinâmico) • Comunidade nova e crescente
  4. Embaixadores O que são? Onde vivem? O que comem? Olha

    só: Os embaixadores são pessoas que representam alguma marca ou empresa por exemplo, na qual seu estilo de convivência é alinhado à promoção da imagem de determinada marca!
  5. Meu papel Meu papel como embaixador da linguagem de programação

    Crystal é evangelizar, espalhando a imagem e conhecimento sobre Crystal para o mundo, neste caso, buscando produzir conteúdos (como artigos, vídeos, palestras, cursos, entre outros) voltados para esta área!
  6. Ok, mas, por qual motivo essa história? 1. Mostrar que

    você pode fazer a diferença desde já, o mundo só é um lugar melhor por ter você! 2. Vou utilizar de base o material do Crystal4noobs aplicando algumas modificações!
  7. História • Projeto surgindo em junho de 2011 • Elegante

    como Ruby, veloz como C • O compilador de Crystal foi escrito pela primeira vez em Ruby • Em 2013 se auto-hospeda
  8. História Em 2016 entra para o TIOBE (um índice de

    popularidade entre linguagens de programação)! As únicas linguagens mais novas que 10 anos que estão no Rank 100 são Swift (#14), Rust (#17), Crystal (#48), Solidity (#59), Pony (#71), Raku (#72), Zig (#88) e Hack (#92)!
  9. História Projetada e desenvolvida inicialmente por Ary Borenszweig, Juan Wajnerman

    e Brian Cardiff. Atualmente conta com mais de 470 colaboradores do mundo todo e tem seu repositório oficial publicado no GitHub sob licença Apache 2.0! Acesse: https://github.com/crystal-lang
  10. LLVM A Low-Level Virtual Machine é uma infraestrutura de compilação

    e otimização, sendo portátil e de código aberto!
  11. LLVM Escrita em C e C++, seu principal objetivo é

    prover uma camada intermediária de um compilador, resultando em uma conversão otimizada, gerando um binário otimizado em tempo de execução!
  12. LLVM Tendo sua arquitetura expansível e uma otimização significativa, Crystal

    utiliza LLVM em seu processo de compilação, deixando sua performance absurda.
  13. Bubble sort Algoritmo de ordenação simples, com a ideia de

    percorrer um vetor ordenando seus elementos! O conceito se baseia em realizar trocas de valores, na qual o elemento maior sempre fica à direita!
  14. Bubble sort Tempo de execução Tempo (em segundos) Ruby 11.818

    Crystal run 02.371 Crystal build 01.811 Crystal build -release 00.303 Para mais informações acesse: https://rrevi.github.io/performance-crystal-vs-ruby
  15. Detalhes • Sintaxe muito parecida com Ruby • Oferece coletor

    Boehm (coletor de lixo de memória) • Suporta sobrecarga de métodos e operadores • Modelo de simultaneidade é baseado na comunicação de pontos sequenciais, parecido com Go!
  16. Instalação • macOS -> Com homebrew: $ brew install crystal

    • Distribuição Linux -> Instale utilizando seu gerenciador de pacotes! Exemplo com distros baseadas no Debian: # apt install crystal Guia de instalação completo: https://crystal-lang.org/install/
  17. Instalação • Windows (2 opções) • Utilize WSL ou uma

    máquina virtual • Teste o instalador que está em desenvolvimento utilizando scoop! Acesse o repositório: https://github.com/neatorobito/scoop-crystal
  18. Instalação Teve algum problema com a instalação? Não se preocupe!

    Acesse o link para ver mais! https://github.com/lanjoni/crystal4noobs/blob/main/content/intro/instalacao.md
  19. Instalação Para sabermos se tudo correu bem durante a instalação

    execute em seu terminal: $ crystal –v Você deverá ver retornado a versão de seu Crystal e a versão da LLVM que está utilizando!
  20. Hello World! Nosso objetivo agora é criar nossa primeira linha

    de código em Crystal! Por isso, verifique se você tem os seguintes requisitos para utilizar essa linguagem tão maravilhosa:
  21. Hello World! Crie um espaço de trabalho para utilizar! Nele

    vamos colocar todos os nossos projetos em Crystal!
  22. Hello World! Sim, “puts” é o comando utilizado para imprimir

    uma string! Faz sentido não é? puts = put string Faz sentido? PS: só “p” também serve 👀
  23. Hello World! Para executar nosso código é bem simples! No

    terminal, já dentro do nosso diretório de trabalho, execute o comando: $ crystal hello.cr
  24. Build O motivo é simples: o projeto foi “buildado” e

    já apagado! Assim, apenas executamos e não salvamos nenhum binário compilado!
  25. Build Caso você queira compilar seu código e salvar o

    executável gerado basta utilizar: $ crystal build hello.cr –o hello
  26. Build O comando “build” cria um arquivo compilado executável! A

    opção “-o” vem de output, definindo um nome para o arquivo que será gerado! Para executar: $ ./hello
  27. Operações • Módulo: % • Divisão sob parte inteira: //

    -> Arredonda valor para parte inteira!
  28. Strings Existem diversas formas de manipular strings, por isso, vamos

    conhecer algumas funções nativas que podem nos auxiliar durante o processo!
  29. Strings Curiosidade: os caractertes de uma string são distribuídos como

    em um vetor! Isso significa que podemos trabalhar como um vetor, veja: texto = “Crystal é legal!” puts texto[0]
  30. Strings Includes: verificar se um texto está dentro de uma

    string! texto = “Crystal é legal!” puts texto.includes?(“legal”)
  31. Strings Starts e Ends: verificar se string começa ou termina

    com um texto! texto = “Crystal é legal!” puts texto.starts_with?(“Crystal”) puts texto.ends_with?(“legal!”)
  32. Strings Sub: Utilizado para substituir um texto por outro dentro

    da string! texto = “Crystal é legal!” puts texto.sub(“legal”, “top”)
  33. Strings Empty e Blank: Utilizados para verificar se uma string

    está vazia ou em branco! texto = “\n\n” puts texto.empty? puts texto.blank?
  34. Strings Conversão: Podemos ainda converter uma string para valores float

    ou integer! texto = “42.3” puts typeof(texto.to_f) puts typeof(texto.to_i)
  35. Strings Split: podemos dividir uma string! texto = “Crystal é

    legal, top, divertida!” puts texto.split(“ ”) puts texto.split(“,”)
  36. Strings Mesclando strings! texto1 = “Crystal” texto2 = “legal!” puts

    “Olha, %s é %s” % {texto1, texto2} puts sprintf “Olha, %s é %s”, texto1, texto2
  37. Loops While: enquanto verificação é verdadeira ele executa as instruções

    do laço! n = 0 while n < 10 puts “Crystal é muito é massa!” n += 1 end
  38. Loops Loop: enquanto verificação é falsa ele executa as instruções

    do laço! n = 0 loop do puts “Crystal é muito é massa!” n += 1 break if n >= 10 end
  39. Loops Until: enquanto verificação é falsa ele executa as instruções

    do laço! n = 0 until n >= 10 puts “Crystal é muito é massa!” n += 1 end
  40. Loops Next: utilizado para passar para o próximo laço, ou

    seja, pula este laço! n = 0 while n >= 10 n += 1 if n == 3 next end puts “Crystal é muito é massa!” end
  41. Condicionais Operadores: • == (igual a) e != (diferente de)

    • < (menor que) e > (maior que) • <= (menor ou igual a) e >= (maior ou igual a)
  42. Condicionais Spaceship: caso o primeiro valor seja igual ao segundo

    o retorno é 0, menor o retorno é -1 e maior o retorno é 1! puts 3 <=> 3 puts 3 <=> 4 puts 4 <=> 3
  43. Condicionais Estrutura if: caso a condição seja verdadeira ou não!

    if a > b puts a else if a < b puts b else puts “igual!” end
  44. Condicionais Suffix: uma forma de realizar uma ação caso algo

    seja verdadeiro! puts “a é maior!” if a > b puts “b é maior!” if b > a
  45. Condicionais Case: uma verificação de casos! case a when 5

    puts 5 when 10 puts 10 else puts “Não sei” exit 0 end
  46. Condicionais Case com verificação de tipos! case a when String

    puts “String” when Int32 puts “Int32” else puts “Não sei” exit 0 end
  47. Gets Este é o comando utilizado para receber um valor

    digitado! Veja: puts “Digite seu nome: ” nome = gets puts “Olá #{nome}”
  48. Gets A adição do “not_nil!” é necessária para indicar que

    o valor não pode ser nulo! numero_int = gets.not_nil!.to_i
  49. Exercício Crie um programa que receba a idade de uma

    pessoa e verifique se ela pode ou não obter sua CNH. A verificação de idade deve ser se a idade é maior ou igual a 18, caso sim, imprima a mensagem dizendo que ela pode obter, caso contrário, imprima a mensagem dizendo que ela não pode obter a CNH!
  50. Exercício Crie um programa que o usuário tenta adivinhar em

    qual número o computador pensou. Caso o número seja maior ou menor, imprima avisando o usuário! Caso ele acerte, imprima e saia do laço! numero = Random.rand(20) + 1