Percursos
/
Go
Go
/
Exercícios
/
A lasanha maravilhosa do Gopher
A lasanha maravilhosa do Gopher

A lasanha maravilhosa do Gopher

Exercício de aprendizagem

Introdução

O Go é uma linguagem de programação compilada e de tipagem estática. Este exercício apresenta três funcionalidades importantes da linguagem: pacotes, funções e variáveis.

Pacotes

As aplicações em Go organizam-se em pacotes. Um pacote é um conjunto de ficheiros de código-fonte que estão no mesmo diretório. Todos os ficheiros de código-fonte num diretório têm de ter o mesmo nome de pacote. Quando um pacote é importado, só as entidades (funções, tipos, variáveis, constantes) cujos nomes começam por letra maiúscula podem ser usadas ou acedidas. O estilo de nomenclatura recomendado em Go é usar camelCase para os identificadores, exceto para aqueles que devem ser acessíveis entre pacotes, que devem usar PascalCase.

package lasagna

Variáveis

O Go tem tipagem estática, o que significa que todas as variáveis têm de ter um tipo definido em tempo de compilação.

As variáveis podem ser definidas especificando explicitamente um tipo:

var explicit int // Explicitly typed

Também podes usar um inicializador, e o compilador atribui à variável o tipo correspondente ao do inicializador.

implicit := 10   // Implicitly typed as an int

Depois de declarada, podes atribuir valores a uma variável com o operador =. Depois de declarada, o tipo de uma variável nunca muda.

count := 1 // Assign initial value
count = 2  // Update to new value

count = false // This throws a compiler error due to assigning a non `int` type

Constantes

As constantes guardam um valor tal como as variáveis, mas o seu valor não pode mudar durante a execução do programa.

As constantes definem-se com a palavra-chave const e podem ser números, carateres, strings ou Boolean:

const Age = 21 // Defines a numeric constant 'Age' with the value of 21

Funções

As funções em Go aceitam zero ou mais parâmetros. Os parâmetros têm de ter tipo explícito; não há inferência de tipos.

Os valores são devolvidos pelas funções com a palavra-chave return.

Uma função é invocada indicando o nome da função e passando argumentos para cada um dos seus parâmetros.

Repara que o Go suporta dois tipos de comentários. Os comentários de uma linha são precedidos por // e os comentários de várias linhas são inseridos entre /* e */.

package greeting

// Hello is a public function.
func Hello (name string) string {
    return hi(name)
}

// hi is a private function.
func hi (name string) string {
    return "hi " + name
}

Instruções

Neste exercício vais escrever algum código para te ajudar a cozinhar uma lasanha fabulosa a partir do teu livro de receitas preferido.

Tens quatro tarefas, todas relacionadas com o tempo gasto a cozinhar a lasanha.

1. Define o tempo esperado no forno em minutos

Define a constante OvenTime com o número de minutos que a lasanha deve estar no forno. De acordo com o livro de receitas, o tempo esperado no forno em minutos é 40:

OvenTime
// => 40

2. Calcula o tempo restante no forno em minutos

Define a função RemainingOvenTime() que recebe como parâmetro os minutos reais que a lasanha já esteve no forno e devolve quantos minutos a lasanha ainda tem de permanecer no forno, com base no tempo esperado no forno em minutos da tarefa anterior.

func RemainingOvenTime(actual int) int {
    // TODO
}

RemainingOvenTime(30)
// => 10

3. Calcula o tempo de preparação em minutos

Define a função PreparationTime que recebe como parâmetro o número de camadas que adicionaste à lasanha e devolve quantos minutos gastaste a preparar a lasanha, assumindo que cada camada demora 2 minutos a preparar.

func PreparationTime(numberOfLayers int) int {
    // TODO
}

PreparationTime(2)
// => 4

4. Calcula o tempo de trabalho decorrido em minutos

Define a função ElapsedTime que recebe dois parâmetros: o primeiro parâmetro é o número de camadas que adicionaste à lasanha e o segundo parâmetro é o número de minutos que a lasanha já esteve no forno. A função deve devolver quantos minutos, no total, dedicaste a cozinhar a lasanha, ou seja, a soma do tempo de preparação em minutos com o tempo, em minutos, que a lasanha já passou no forno neste momento.

func ElapsedTime(numberOfLayers, actualMinutesInOven int) int {
    // TODO
}

ElapsedTime(3, 20)
// => 26
Editar via GitHub A ligação abre numa nova janela ou separador
Go Exercism

Estás pronto para começar A lasanha maravilhosa do Gopher?

Inscreve-te no Exercism para aprenderes e dominares Go com 35 conceitos167 exercícios, e mentoria humana real, tudo grátis.