Coding for KidsCoding for Kids
Níveis CriativosDesafiosGuia do Professor
Votar em funcionalidades
Curso Avançado de Desenvolvimento Python
Capítulo
>
Nível

Funções Avançadas
Fechamentos

Objetivo

Regular o abastecimento de água na fazenda configurando e utilizando closures.

Existem quatro tanques de água projetados para irrigar as plantações ao redor, está na hora de alterná-los para garantir que a quantidade correta de água seja distribuída para os locais certos. Para fazer isso, podemos facilitar muito o trabalho utilizando Closures.

Closures são funções aninhadas criadas para encapsular dados, isso reduz a quantidade de variáveis que você precisa usar e esconde os dados dentro da função para que não possam ser manipulados externamente; em outras palavras, fechando a função.

Para regular a água nos tanques, criaremos uma função aninhada que funciona como multiplicador. Essa função funciona da mesma forma que um loop, a função externa chamada multiplier_of() tem um argumento que é multiplicado pelo argumento de sua função interna chamada multiplier().

# Nested Function def multiplier_of(n): def multiplier(number): return number*n return multiplier

Uma vez configurado, precisamos encapsular a função criando closures, o que impede o acesso aos seus valores e solidifica seu uso.

# Set up Closure that multiplies any number by 2 multiply_by_2 = multiplier_of(2) # Uses closure to display a number on screen player.speak( multiply_by_2(4) ) # The number displayed is 8, the formula is [2 x 4 = 8]

O closure acima é chamado multiply_by_2() e utiliza a função aninhada que criamos com um argumento definido, que é 2, que é o número pelo qual o closure está configurado para multiplicar. Como resultado, qualquer número que adicionarmos como argumento será multiplicado por dois (2) e esse atributo não pode ser alterado por estar encapsulado.

Passando para a regulação dos tanques de água, configure três (3) closures: multiply_by_2, multiply_by_3 e multiply_by_5. Configure cada um deles manualmente utilizando o mesmo formato usado no exemplo fornecido anteriormente, assim: multiply_by_2 = multiplier_of(2).

Há uma constante dicionário neste nível chamada tanks, que, como índice, possui seis (6) cores: "red", "blue", "orange", "purple", "yellow" e "green". Cada índice contém um número representando quanta água está fluindo pelo flanco de um tanque; esse número será utilizado para regular o tanque usando os closures "multiply_by" discutidos anteriormente.

Para facilitar isso, uma função será configurada no editor chamada regulate_water(), que recebe dois argumentos: a cor, que representa os índices descritos acima, e o multiplicador, que representa o closure multiplicador a ser utilizado. Um exemplo do uso da função é o seguinte: regulate_water("red" , multiply_by_2).

Caminhe até os X escuros que marcam os tapetes coloridos e encare os tanques, use a função regulate_water() e defina a cor do tapete como o primeiro argumento e o closure multiplicador adequado como o segundo. Os multiplicadores a serem usados em cada tapete colorido são os seguintes:

multiply_by_2 - "red" and "green" multiply_by_3 - "blue" and "purple" multiply_by_5 - "orange" and "yellow"

Regule a água em cada um dos flancos dos tanques para completar o nível.

Livro de Código