Base da linguagem

Tucano é uma linguagem orientada a objetos com classes, herança e tipagem forte porém opcional. É escrita numeroeiramente em português, tornando a programação mais acessível.

Todo projeto Tucano possui um arquivo principal com o mesmo nome do projeto e o sufixo .tc. Por exemplo, um projeto chamado teste terá o arquivo teste.tc, que obrigatoriamente deve conter a função inicio:

funcao inicio() {

}

O compilador ignora caracteres especiais em palavras reservadas, portanto funcao, funçao, função e funcão são equivalentes.

O tipo de retorno de uma função é declarado com : após os argumentos. Os próprios argumentos também aceitam : para especificar seu tipo:

funcao soma(x:numero, y:numero):numero {
  retorna x + y
}

Em Tucano, a quebra de linha (\n) encerra um comando. O ponto e vírgula (;) é opcional e permite escrever múltiplos comandos em uma linha:

var x: numero; var y: texto   --equivalente a duas linhas separadas

Comentários

Comentários são iniciados com -- e se estendem até o fim da linha:

var x: numero = 5  --isso é um comentário
--isso também é um comentário

Tipos de variáveis

Tucano possui quatro tipos primitivos nativos:

numero
  • Um número, seja ele de -Infinito até +Infinito
  • Valor padrão: 0
texto
  • Cadeia de caracteres
  • Valor padrão: ""
lógico
  • Booleano — verdadeiro ou falso
  • Valor padrão: falso

Declaração de variáveis

Variáveis devem ser declaradas antes de serem usadas. O tipo deve ser especificado explicitamente usando a palavra-chave var e : tipo:


var x: numero = 10
var y: logico = falso
var z: texto = "oi"

var teste: texto = 10  --Erro: tipo incompatível

Para declarar listas, adicione [] após o tipo. Deixe vazio para uma lista dinâmica ou informe um tamanho para array fixo:

var listadecompras: texto[] = ["Alface", "Tomate"]

Matrizes são criadas como listas de listas:

var matriz: numero[][]   --lista de listas de números

Operadores

Comparação

==   igualdade
~=   diferente
>    maior que
>=   maior ou igual
<    menor que
<=   menor ou igual
⚠️
Tipagem estrita

Diferente do JavaScript, todas as comparações em Tucano são estritas ao tipo — 10 == "10" retorna falso.

Matemáticos

+    soma
-    subtração
*    multiplicação
/    divisão
^    exponenciação
//   divisão numeroeira
%    módulo
..   concatenação

Lógicos

e
ou
xou

Condições

Use se para verificar uma condição:

var sim: logico = verdadeiro
se (sim) {
  --executado se verdadeiro
}

Use senao para o caso contrário:

var nao: logico = falso
se (nao) {
  --executado se verdadeiro
} senao {
  --executado se falso
}

Use escolha..caso para múltiplas condições sobre um valor:

var x: numero = 10
escolha (x) {
  caso 1:
    --faça algo
  caso 2:
    --faça outra coisa
}

Laços de repetição

O laço para itera um número fixo de vezes (ambos os limites são inclusivos):

para (i=1,10) faca {
  --executa 10 vezes
}

var lista: texto[] = {"Alface", "Batata"}
para (vegetal de lista) faca {
  --itera por cada item da lista
}

para (i=10,1) passo -1 faca {
  --contagem regressiva; passo -1 é o padrão quando inicial > final
}

para (i=0,20) passo 2 faca {
  --números pares de 0 a 20
}

O laço enquanto repete enquanto a condição for verdadeira:

var x: numero = 1
enquanto (x < 10) {
  x += 1
}

O laço repita..até executa ao menos uma vez e para quando a condição for atingida:

var x: numero = 1
repita até (x >= 10) {
  x += 1
}

Entrada e Saída

Entrada e saída de dados são gerenciadas pelos objetos Entrada e Saida da biblioteca padrão.

funcao inicio() {
  var nome: texto = Entrada.leia()
  --lê a primeira linha digitada pelo usuário
}
funcao inicio() {
  Saida.escreval("Olá, mundo!")
}

Classes

Uma classe é declarada com a palavra-chave classe. Todo objeto deve ter um método construtor que retorna a própria classe:

classe Fruta {

  var nome: texto

  funcao construtor(n:texto):Fruta {
    isso.nome = n
    retorne isso
  }

  funcao falarNome() {
    Saida.escreval(isso.nome)
  }

}

funcao inicio() {
  var uva: Fruta   = novo Fruta("uva")
  var melao: Fruta = novo Fruta("melao")

  melao.falarNome()  -- escreve "melao" na tela
}
💡
Dica

Use isso dentro de um método para referenciar a instância atual do objeto — equivalente ao this em outras linguagens.


Gráficos

A biblioteca padrão fornece o objeto Tela para criação de janelas e renderização 2D:

funcao inicio() {
  Tela.iniciar()  --abre uma janela 1080×720 (desnecessário no Tucano Play)
}
funcao inicio() {
  Tela.cor("#9999ff")                            --define cor azul
  Tela.retangulo(0, 0, 100, 150, "preencher")    --retângulo preenchido em (0,0), 100x150
  Tela.desenhar(0,0,150,150, "nomeDoObjeto")     --Desenha uma imagem, do objeto, nas coordenadas (0,0), com um tamanho 150x150   
  Tela.imprimir(0,0,"Texto",30)                  --Escreve "Texto" na tela, nas coordenadas (0,0), com tamanho de fonte 30pt
  Tela.reta(0,0,150,150)                         --Desenha uma reta, do ponto (0,0) ao ponto (150,150)
}