Executando verificação de segurança...
10

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.

link da parte 1

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).

Link para a parte 3