📦Indexação de Contêiner: Como Amar o Caos no Python4Delphi (SEM ENLOUQUERCER)






📦Será que isso vai te dar uma nova perspectiva? (ou somente uma mudança no seu código?)


Amar o caos no Python4Delphi (P4D)

    Isso aqui pode ser considerado com um complemento ao meu texto: A tirania do 'EU CONSIGO'

Sabe aquele momento em que você olha e pensa no Delphi, pensa "Porra, no Delphi? vai ser moleza", e resolve então usar o Python em conjunto dentro dele. Pois é. A vida não é só morangos, e cada volta é um Acess Violation.

     Hoje quero falar sobre a indexação de contêiner. Exatamente, aquele conceito aparentemente simples de acessar elementos dentro de listas, dicionários, e outras estruturas mágicas - porém só que agora dentro do delicado ecossistema conhecendo como Python4Delphi, ou como particularmente eu o chamo carinhosamente de: 'A PONTE DA AUTO-SABODAGEM'.


Sonho: "Vou usar o Delphi com Python, unir o melhor dos dois mundos! Com alta performance com um toque de flexibilidade interpretada! Confia, vai dar certo!"

 Realidade: "Você perde um bom tempo tentado acessar meuObjeto['chave'] e recebendo um erro que parece ter saído direto dos quintos dos infernos técnico."



Então o que é a tal da Indexação de Contêiner?

Em linguagem dos meros mortais que somos, indexar um contêiner, nada mais nada menos, significa acessar dados por algum tipo de chave ou posição. Em Python, isso se torna fácil quanto:



O Caos que se ‘Instala’

Vamos lá, você faz tudo certinho como manda o figurino. Cria o componete TpythonEngine, configura o TPythonModule, vai lá coloca um TpythonDelphiphiVar aqui, um TPythonInputOutput ali... assim tudo fica lindo. Até você tentar isso daqui:


Ai vem o compilador com os dois pés no seu peito: "Incompatible types: 'PPyObject' and 'String'"

A forma que consideraria quase a certa de fazer isso:

O que acontece é que o problema está no Delphi, ele não tem ideia do que é essa loucura de [] direto em PyObject. A forma de se abordar as funções de manipulação de objetos de forma segura do PythonEngine seria:





Mas se você estiver fazendo o uso do VarPython, o que honestamente é menos trabalhoso, então tortura é menor:



Isso mesmo, vai funcionar. Sim, parece até o Gandalf se protegendo contra o Balrog. Pode quebrar sem motivo aparente. Seja bem-vindo ao mundo do Python4Delphi.


Dicas pra não perder o pouco cabelo que tem na cabeça (seus pouca telha):

  1. Use VarPython sempre que possível. Ele abstrai parte da dor.
  2. Evite indexar direto sem verificar se o objeto é do tipo esperado.
  3. Prepare-se psicologicamente para o debug.
  4. Tenha sempre um backup do projeto e da sua sanidade.
  5. Reze para Moradin, Odin, C++Builder, qualquer um.

Concluindo

A indexação de contêiner em Python4Delphi ela é possível.

Porém é como montar um Javali de Batalha sendo um Hobbit.

Funciona? Sim. Vai ser fácil? Hahahaha, não.

Se você sobreviveu até aqui, parabéns. Você merece não só um café, mas o pacote dele todo, mas talvez uma medalha por sua incrível Autossabotagem. E, se conseguir fazer isso funcionar em produção, você desbloqueou um novo nível na vida de desenvolvedor: alquimista de runtime cross-language.

Na próxima postagem, talvez eu fale sobre como conectar o Python4Delphi com uma API REST. Ou talvez eu só chore no banho. Veremos.

Comentários