Olha, vou te contar como foi parar naquele negócio que a gente acabou chamando de “10 curry”. Não foi planejado, não, foi mais na base da necessidade mesmo, sabe como é?

O Começo da Bagunça
A gente tava lá naquele projeto antigo, lembra? Tinha uma função específica que era o cão chupando manga. Sério. Ela fazia um monte de coisa, o que já era meio ruim, mas o pior é que ela recebia uma pancada de parâmetro. Contando por cima, devia ter uns 10, fácil. Toda vez que alguém precisava usar, era aquele copia e cola gigante, e ai de você se errasse a ordem ou esquecesse algum.
O problema maior era: na maioria das vezes, a gente só mudava os dois ou três últimos parâmetros. Os primeiros eram quase sempre os mesmos, dependendo do módulo onde a gente estava chamando. Era um desperdício de código e uma porta aberta pra erro que dava até agonia.
A Ideia Maluca
Aí um dia, de saco cheio de conferir parâmetro, eu parei pra pensar. Pô, se os primeiros são quase sempre iguais, por que eu tenho que passar tudo toda vez? Não dava pra criar umas “versões” dessa função já com esses primeiros parâmetros fixos?
Foi aí que lembrei daquele tal de currying. Na época, eu mal sabia direito o que era, só tinha visto por alto. A ideia era mais ou menos essa: pegar uma função que recebe vários argumentos e transformar numa sequência de funções que recebem um argumento de cada vez.
Pensei: “Bom, não custa tentar, né? Pior do que tá não fica.”

Mão na Massa
Comecei a mexer no código. Peguei a função original, aquela monstra de 10 parâmetros.
- Primeiro, criei uma função nova que recebia só o primeiro parâmetro original.
- Essa função retornava outra função.
- Essa outra função recebia o segundo parâmetro original.
- E ela retornava mais uma função…
Fui fazendo isso, encadeando uma função dentro da outra. Cada uma recebia um parâmetro e retornava a próxima função da fila, até chegar na última, que finalmente recebia os últimos parâmetros e fazia o trabalho de verdade.
Cara, deu um trabalhinho ajustar tudo. Tive que refatorar bastante coisa onde a função original era chamada. Mas a mágica começou a acontecer quando eu podia fazer algo tipo:
configuracao_basica = funcao_monstra(param1)(param2)(param3)
E depois, em vários lugares diferentes, eu só usava essa configuracao_basica
:

resultado1 = configuracao_basica(param4)(param5)...(param10_a)
resultado2 = configuracao_basica(param4)(param5)...(param10_b)
Ficou muito mais limpo! De tanto quebrar a função original, pareceu que eu tinha criado umas 10 funções menores no processo. Foi daí que veio o apelido tosco de “10 curry”, meio de zoeira, mas pegou.
O Resultado Final
No começo, o pessoal do time olhou meio torto. “Pra que complicar?”, alguns disseram. Mas quando viram na prática como facilitou na hora de usar a função e como reduziu a chance de erro, acabaram curtindo.
Resumindo a ópera: a gente pegou um problemão de uma função gigante e difícil de usar e aplicou essa técnica de currying. Não sei se foram exatamente 10 níveis, mas a ideia de quebrar em várias etapas pegou e o nome ficou.

Foi uma experiência massa. Mostrou que às vezes sair do óbvio e tentar uma abordagem diferente pode salvar muito tempo e dor de cabeça lá na frente. Deu certo naquele caso, pelo menos.