15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

células já passou completamente pela transição e está na geração seguinte.

TICK = object()

def simulate(height, width):

while True:

for y in range(height):

for x in range(width):

yield from step_cell(y, x)

yield TICK

O mais impressionante a respeito de simulate é que a corrotina é completamente

desconectada do ambiente a seu redor. Ainda não definimos como a grade será

representada em termos de objetos do Python, como os valores de Query,

Transition e TICK serão tratados no mundo externo e como o jogo obtém seu

estado inicial. Porém, a lógica é clara. Cada célula passa pela transição ao

executar step_cell. Quando todas as células tiverem determinado qual será seu

estado na próxima geração, o relógio do jogo avançará um passo, ou seja, um tic

(ou tac). O processo continua ininterruptamente enquanto a corrotina simulate

estiver sendo executada passo a passo.

Essa é a beleza das corrotinas! Elas ajudam o programador a se concentrar

apenas na lógica do que está tentando implementar, desacoplando e tornando

independentes as duas partes de seu código: as instruções para o ambiente e a

implementação que realiza o objetivo final do programa. Isso permite que as

corrotinas pareçam estar sendo executadas em paralelo, e também aprimorar a

implementação que rastreia essas instruções ao longo do tempo sem que as

corrotinas precisem ser modificadas.

Passados os testes, obviamente queremos rodar simulate em um ambiente real.

Para isso, precisamos representar o estado de cada célula na grade. No exemplo

de código a seguir, definimos uma classe que contém a grade:

class Grid(object):

def __init__(self, height, width):

self.height = height

self.width = width

self.rows = []

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!