Programação para iniciantes para quem não é iniciante, Parte 2
Atenção, isso não é um tutorial! Pessoas de coração fraco podem passar mal.
Olá meus caros!
Aparentemente o feedback do post anterior foi muito bom, obrigado a todos e fiquei motivado a continuar. Como está no título essa série não é para iniciantes então vamos a um pouco de código. Eu queria fazer tudo em C++ ou Rust mas sei que a maioria começa com Python e javascript então seguirei com Python, se acharem melhor podemos trocar para javascript mas adianto que vai dar tudo na mesma.
Uma leve correção, eu esqueci que as calculadoras precisam apertar o igual antes de aparecer o resultado na tela então a representação aqui vai ser um pouco diferente
Primeiramente vamos representar a calculadora em uma classe (aliás orientação objetos é perfeito para esse tipo de situação):
class PocketCalculator:
def __init__(self):
self.accumulator = 0
self.operation_register = None
self.display = '0'
def KEY_0(self):
self.display += '0'
def KEY_1(self):
self.display += '1'
def KEY_2(self):
self.display += '2'
def KEY_3(self):
self.display += '3'
def KEY_4(self):
self.display += '4'
def KEY_5(self):
self.display += '5'
def KEY_6(self):
self.display += '6'
def KEY_7(self):
self.display += '7'
def KEY_8(self):
self.display += '8'
def KEY_9(self):
self.display += '9'
def KEY_PLUS(self):
self.accumulator += int(self.display)
self.operation_register = '+'
self.display = '0'
def KEY_MINUS(self):
self.accumulator -= int(self.display)
self.operation_register = '-'
self.display = '0'
def KEY_MULTIPLY(self):
self.accumulator *= int(self.display)
self.operation_register = '*'
self.display = '0'
def KEY_EQUALS(self):
if self.operation_register == '+':
self.accumulator += int(self.display)
elif self.operation_register == '-':
self.accumulator -= int(self.display)
elif self.operation_register == '*':
self.accumulator *= int(self.display)
self.display = str(self.accumulator)
self.accumulator = 0
self.operation_register = None
Nossa calculadora tem 14 botões, 10 números, 3 operações matemáticas e 1 botão de igual que pega o resultado da tela calculada de acordo com o último operador e coloca na tela de novo.
Sim, esse código não é nada pythonico, mas aqui o objetivo não é escrever o melhor código possível. Também não vou ficar explicando implementações agora por aqui, o objetivo dessa série é entender como os programas de computador e seus componentes realmente funcionam e não um tutorial de programação. Se você não consegue entender um programa simples como esse em menos de algumas horas talvez ainda não seja hora estar aqui, estude mais e volte mais tarde.
Bom, vamos agora simular algo que fizemos no post anterior: somar 15 com 20 e o resultado deve ser 35. Vamos criar nosso primeiro unit test:
def test_calculation():
calc = PocketCalculator()
calc.KEY_1()
calc.KEY_5()
calc.KEY_PLUS()
calc.KEY_2()
calc.KEY_0()
calc.KEY_EQUALS()
print(calc.display)
assert calc.display == '35'
Deve ter aparecido no seu console o número 35.
Se você não está acostumado com unit test deveria começar a se acostumar caso queira ser um programador que tem o mínimo para se chamar de profissional. Eu não vou explicar o que é, está cheio de conteúdo na internet tanto em inglês quanto em portugues então sem choro.
O que estou tentando representar aqui é a calculadora que é nossa CPU bem simplificada, nossos botões são as instruções da CPU e o programa é essa sequência de instruções calc.KEY_1(); calc.KEY_5() ...
. Você agora finalmente deve ter entendido o que é a tal "conjunto de instruções para o processador executar" dito na parte 1.
Na parte 3 vamos representar o cartão perfurado da nossa calculadora e assim teremos a distinção do que é a parte física (hardware) e virtual (software).