Percepções de transicionar do JavaScript para o Python
Nesse artigo, eu vou contar quais foram as minhas percepções ao aprender Python em comparação com JavaScript, com a qual eu já programava.
É claro que toda linguagem tem suas vantagens e desvantagens para determinado cenário, sendo assim, não vou especificar nenhum caso de uso, apenas as funcionalidades nativas da linguagem, que são comumente usadas em tutoriais/cursos.
Para aprender uma linguagem ou framework, eu costumava usar um curso ou tutorial prático e só quando já estava usando a ferramenta buscava material mais conceitual. Com o Python, eu fiz diferente, comecei a aprender primeiro com o livro (Python Programming For Begginers), que me forneceu uma base conceitual da linguagem.
Eu acho que essa abordagem é legal pra quem já tem outras linguagens na bagagem, porque você consegue visualizar o conceito aplicado. Pra quem está começando do zero, acho que nada melhor que pôr a mão na massa (saber fazer antes de saber porquê).
Vamos para o que interessa, quais foram as minhas percepções de Python e porque eu acho que você deveria aprende-la:
1. Teoria dos conjuntos (Sets):
Apesar do JavaScript ter uma classe nativa Set, é claro que a teoria dos conjuntos não foi uma preocupação, como é evidente em Python. As operações entre conjuntos são muito mais fáceis e intuitivas em Python.
Pra quem não está por dentro da utilidade de se utilizar teoria dos conjuntos no desenvolvimento, a classe set (conjunto) é uma coleção não-ordenada de elementos únicos. Exemplo:
foo = [1, 2, 2, 3, 4, 5, 5] # Lista com objetos repetidos
# Para ter um set apenas com elementos únicos fazemos
foo_set = set(foo) # { 1, 2, 3, 4, 5 }
Em JavaScript:
const foo = [1, 2, 2, 3, 4, 5, 5]
const foo_set = new Set(foo) // Set(5) { 1, 2, 3, 4, 5 }
Até aí, beleza, tudo muito parecido.
Mas a teoria dos conjuntos vai além disso. Digamos que eu tenho um conjunto A = { 1, 2, 3, 4 }
e um conjunto B = { 3, 4, 5, 6 }
e queremos chegar em um terceiro conjunto que pode ser a UNIÃO (todos os elementos de A e todos os elementos de B), INTERSECÇÃO (todos os elementos de A que também estão em B) ou DIFERENÇA (todos os elementos de A que não estão em B), em Python isso é tão simples quanto:
A = { 1, 2, 3, 4 }
B = { 3, 4, 5, 6 }
U = A.union(B) # União de A e B: { 1, 2, 3, 4, 5, 6 }
I = A.intersection(B) # Intersecção de A e B: { 3, 4 }
DA = A.difference(B) # Diferença de A em relação a B: { 1, 2 }
DB = B.difference(A) # Diferença de B em relação a A: { 5, 6 }
Incrivelmente fácil e intuitivo. Já em JavaScript, não há método nativo, você teria que implementar os métodos. Nada muito complexo de fazer, mas ponto Python definitivamente.
E se você não lembrou de alguma situação onde conjuntos fariam todo sentido em seu código, guarde bem essa informação, porque vai ser útil um dia, assim como o próximo assunto.
2. Aritmética Modular
Aritmética modular mudou o jogo pra mim. Realmente, eu vi isso em um livro sobre a história da criptografia e me surpreendeu como não ensinam isso da forma correta.
Para entender o que é a aritmética modular basta pensar em relógio de parede. Um relógio de parede tem 12 posições e sempre que chega ao final, volta ao início. Ou seja, um relógio de parede está em módulo 12. Onde o número 12 também é o número 0.
Imagine então que o ponteiro está na posição 0 (12), se andarmos 3 posições estaremos na posição 3. Se andarmos com o ponteiro 15 posições estaremos também na posição 3. Ou seja, 3 e 15 em módulo 12 é equivalente a 3. Isso coincide com o resto da divisão: 3 RESTO 12 = 3
e 15 RESTO 12 = 3
.
Porém, a diferença entre módulo e resto fica clara quando fazemos operações com números negativos. De volta ao ponteiro do relógio, imagine que estamos na posição das 12 horas (posição 0), e agora andamos com o ponteiro 3 posições em sentido anti-horário. Chegaremos a posição 9 do relógio. Ou seja, se andarmos com o relógio -3 (menos três) posições, chegaremos ao 9, isso é dizer que -3 MÓDULO 12 é equivalente a 9
.
E é nessa parte que o JavaScript decepciona, o JavaScript trata a operação de módulo como resto. Podemos ver isso ao fazer uma operação de módulo com números negativos:
3 % 12 // Output: 3
15 % 12 // Output: 3
-3 % 12 // Output: -3
Em Python:
3 % 12 # Output: 3
15 % 12 # Output: 3
-3 % 12 # Output: 9
Você pode chegar ao mesmo resultado em JavaScript com a seguinte operação:
(12 + 3) % 12 // Output: 3
(12 + (-3)) % 12 // Output: 9
Ou seja, mais uma vez, por praticidade, ponto Python.
E se você quer alguns exemplos de onde isso é útil, além de ser a base da criptografia e criptoanálise, pense nas vezes que você precisou converter o estilo de horas (24/12 horas), um carrossel de informações em loop. Pensa no jogo da cobrinha (Snake), que ao chegar ao final da tela a cobra aparece no início do lado oposto.
De verdade, depois que você pega o jeito, começa a ver aritmética modular em todo lugar. Inclusive em grupos de WhatsApp quando mandam aquelas coisas que esse ano tem tal coisa que só acontece uma vez em cada x anos.
3. As pequenas coisas. Não há nada maior, certo? (Vanilla Sky)
Por último, vem a praticidade de não ter que declarar const
, let
ou var
. Não precisar de parênteses para uma condicional ou loop (if
, while
, for
). Controlar o escopo com indentação, ao invés de precisar de chaves.
Todas essas pequenas coisas que não parecem nada, mas faz com que quando você se acostuma com Python, programar em JavaScript fica um pouco desconfortável.
Mais ou menos como quando você está acostumado com um carro onde a marcha passa super suave e depois pega um outro carro que tem que ter as manhas, pisar mais na embreagem, tem sempre aquela marcha que precisa dar um soquinho pra entrar.
Espero me sair bem com essa analogia. Haha.
Bom, essas foram as minhas percepções. E você, o que acha? Deixa aí nos comentários! Não esquece de me seguir no twitter: @arielbarcellos.
Top comments (0)