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:
- Um número, seja ele de -Infinito até +Infinito
- Valor padrão:
0
- Cadeia de caracteres
- Valor padrão:
""
- 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
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
}
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)
}