A curiosa história de raw_input()
Introdução:
Este artigo foi escrito para a competição de artigos técnicos lançada pela DIO.ME em sua plataforma na data 08/01/2024 com prazo final de submissão no dia 11/01/2024 às 14h. O regulamento especificava que deveríamos escolher apenas
um tópico de uma lista de palavras reservadas ou funções python. Dentre elas estava as funções builtin raw_input() e input(). Contudo como
escrever sobre apenas uma delas sem falar da outra é no mínimo uma curiosidade estranha.
Numa rápida consulta usando algum mecanismo de busca,o leitor irá descobrir que raw_input() virou input() a partir da versão 3.0 do python. Bastaria simplesmente repetir a mesma retórica dos tutorias listados no resultado da busca
pela máquina de busca utilizada ( no caso duckduckgo). Algo sem originalidade que não vale o esforço mesmo citando fontes para evitar o plágio, mesmo que o prêmio seja de R$500,00.
Portanto nesse artigo irá citar a história da função raw_input() e input() nas versões 2.x e 3.x e apontar os registros históricos, o PEP no site oficial da linguagem python.
A Função :
A função raw_input() existe desde a versão 1.4 até a versão 2.7.18 com a funcionalidade de receber uma entrada bruta convertendo-a para string e cortando quebra de linha, sem avaliação, interpretação do conteúdo da entrada.
valor=raw_input('insira expressão numérica e veja que ela não será calculada,estamos no 2.x:\n')
print 'RESULTADO:\n'
print valor
Em execução :
insira expressão numérica e veja que ela não será calculada,estamos no 2.x:
7+8
RESULTADO:
7+8
Veja raw_input() nas referências oficial de python 1.4 :
https://docs.python.org/release/1.4/ref/ref8.html#HDR2
Veja raw_input() nas referências oficial de python 2.7.18 :
https://docs.python.org/2.7/library/functions.html?highlight=raw_input#raw_input
Para que a expressão numérica seja avaliada nas versões 1.x e 2.x se deve usar a função input().
valor=input('insira uma expressão numérica e veja o resultado, estamos em 2.x:\n")
print 'RESULTADO:\n'
print valor
Em execução:
insira uma expressão numérica e veja o resultado, estamos em 2.x:
7+8
RESULTADO:
15
A partir da versão 3.0 a função raw_input() foi renomeada para input() e para obter a interpretação de expressões é preciso compor a função eval() com input(), assim:
valor = eval(input("informe uma expressão:\n"))
print("Resultado:\n")
print(valor)
Em execução:
Informe uma expressão:
4+10
Resultador:
14
A Curiosidade :
Guido Van Rouser seu artigo What is new in Python 3.0 anunciou várias mudanças na linguagem entre elas a PEP3111 (Python Enhanced Proposal).
https://docs.python.org/3/whatsnew/3.0.html
Ao acessar o link da PEP3111 o leitor irá se deparar com a curiosidade
de que a raw_input quase foi renomeada para ask(), ask_user(), get_string(), prompt(),read(),user_input(), get_response() . E que inicialmente simplesmente renomear para input() foi descartado pelo BNDF (Benevolent Dictador for Life) do Python, o Guido Van Rouser.
https://peps.python.org/pep-3111/
Nas referências do PEP3111 vemos a correspondência(email) de André Roberge preocupado com o aspecto educacional do uso de python para ensinar programação para iniciantes. Ele alertava que uma mudança para uma entrada de dados que envolvesse uso de import sys e explicar um sys.stdin.readline() era inadquequado para iniciantes, ele queria que o raw_imput() fosse ask_user()
ou user_input().
https://mail.python.org/pipermail/edu-sig/2006-September/006967.html
Sete dias(12/09/2006) depois vemos o Guido Van Rouser respondendo sobre o aspecto educacional e afirmando definitivamente que a input() interpretadora de expressões devia sumir e raw_input() devia ser renomeada e não achava interessante renomear para a input().
https://mail.python.org/pipermail/python-3000/2006-September/003589.html
No dia 22/12/2006 Guido descarta renomear a raw_imput() para readline(), por causa de já existir uma readline() que não faz strinp do "\n" , também descarta adotar ask() para não ter que renomear print pra say(). E termina avaliando que
usar a composição da função eval() com raw_input() renomeada para input() não terá impacto sobre o velho uso de input() em ambiente python 2.x.
https://mail.python.org/pipermail/python-3000/2006-September/003589.html
No dia seguinte ele bate o martelo decidindo que raw_imput() deve ser a função input() no python 3 que viria a ser lançado em 3 de dezembro de 2008
https://mail.python.org/pipermail/python-3000/2006-December/005257.html
Para consultar:
https://gvanrossum.github.io//
https://github.com/aroberge
https://www.python.org/doc/versions/
https://docs.python.org/release/1.4/ref/ref8.html#HDR2
https://docs.python.org/2.7/library/functions.html?highlight=raw_input#raw_input
https://docs.python.org/3/search.html?q=Raw_input
https://docs.python.org/3/whatsnew/3.0.html
https://docs.python.org/3/whatsnew/3.0.html?highlight=raw_input
https://docs.python.org/release/3.0/library/functions.html
https://docs.python.org/release/3.0/library/functions.html#input
https://peps.python.org/pep-3111/
https://mail.python.org/pipermail/python-3000/2006-December/005257.html