Parece haver um conflito sobre se é melhor usar espaços em branco ou tokens como colchetes para indicar o escopo. Já vi muitos elogiarem a solução do python para o problema de indentação inconsistente, mas muitos discordam:
Qualquer idioma que tenha espaço em branco como tokens precisa morrer.
postado mais tarde com a mesma resposta:
Eu era uma espécie de anti-espaço em branco como tokens, até que realmente tentei. Provavelmente ajudou o fato de meu layout pessoal de espaço em branco corresponder praticamente ao que todo mundo usa em python-land. Talvez seja que eu seja um pouco minimalista, mas se você vai recuar de qualquer maneira, por que se preocupar com os {} s?
Eu posso ver alguns argumentos claros para cada lado:
usando espaço em branco:
- ajuda a reduzir o recuo inconsistente no código
- limpa a tela substituindo os tokens visíveis por espaços em branco para servir ao mesmo propósito
usando tokens:
- muito mais fácil cortar e colar código em níveis diferentes (você não precisa corrigir o recuo)
- mais consistente. Alguns editores de texto exibem os espaços em branco de maneira diferente.
- mais popular atualmente.
Há alguns pontos que eu perdi? Qual você prefere? Alguma palavra de sabedoria depois de ter trabalhado com um ou outro por um longo tempo?
PS. Eu odeio quando os idiomas não usam o mesmo token para cada estrutura de controle. O VB é realmente irritante com suas declarações End If
e End While
, a maioria dos outros idiomas usa {} 's para tudo. Mas talvez esse seja um tópico para uma pergunta diferente ...
fonte
Respostas:
Acho que muitos de nós, programadores (inclusive eu), temos a tendência de "racionalizar" todas as decisões. Tudo bem, mas nem todas as perguntas têm uma resposta lógica. Por exemplo, duvido que os chefs postem perguntas no chefoverflow (se isso existe) pedindo os prós e contras da torta de maçã versus torta de cereja. É uma questão da qual você gosta mais.
Com isso em mente, acho que a resposta mais simples é dizer "Algumas pessoas gostam de aparelho, outras gostam de espaço em branco" e deixam por isso mesmo.
fonte
Correndo o risco de parecer um fanboy absoluto, acho que todos que afirmam que o espaço em branco "ajuda a reduzir a indentação inconsistente no código" nunca usaram o Visual Studio. Com um único comando (acho que o atalho padrão é Ctrl + K, D), todo o recuo é instantaneamente consistente¹. Além disso, ao colar o código, o recuo é corrigido instantaneamente sem a necessidade de fazer nada, e o mesmo ocorre quando se escreve um novo código ou quebra de algo em um
if
ou outro bloco (a reformatação ocorre conforme a}
digitação). Além disso, pressionar Enter após uma instrução concluída sempre coloca o cursor no nível de recuo correto para a próxima instrução, mesmo que a instrução anterior tenha sido recuada ainda mais por causa de umif
ou similar, tornando muito difícil pensar acidentalmente que uma declaração ainda está sob um estadoif
em que não está.O ponto que estou tentando enfatizar não é que o Visual Studio seja ótimo. O ponto que estou tentando enfatizar é que o IDE pode automatizar a correção de indentação (e outros problemas de formatação), mas apenas se o significado do programa não depender de sua formatação. Isso dá ao programador uma oportunidade maior de se concentrar na tarefa de programação real. Uma sintaxe como a de Python é contraproducente: não é possível escrever um IDE que possa "consertar" a indentação do código Python porque a própria indentação especifica algumas das semânticas.
¹ (Eu sei que há um caso especial em que o VS se recusa a reformatar, ou seja, literais de matriz que abrangem várias linhas, mas isso não vem ao caso.)
fonte
if
linha em qualquer lugar. Você deve proceder para corrigir o recuo manualmente.Pessoalmente, acho que preciso da linha em branco introduzida com um token em sua própria linha para fazer minha mente perceber que o código está em outro escopo.
Eu odeio quando em python as pessoas vão:
enquanto na terra simbólica eu odeio quando as pessoas copiam e colam e não limpam o recuo ,
ou não use uma linha separada para o token .
Eu sei ler todos os três, mas eles não são como eu esperava e tenho que me esforçar para analisá-los. Como Joel diz, quando as coisas não funcionam como você espera, você fica frustrado.
fonte
Pro: Não há guerras santas no mundo Python, tanto quanto eu sei. Tomar essa decisão em nome dos desenvolvedores provavelmente salvou um pouco de dor.
Contras: funções anônimas são limitadas a uma linha. Parece bom, mas frequentemente me vejo escrevendo
lambda
s de várias linhas no esquema (principalmente para alimentar emmap
ouapply
em exatamente um lugar, para que não faça sentido declarar separadamente).fonte
lambda n: a = n \\na.sort() \\na[0:3]
não retornaria um erro de sintaxe? O truque `\` permite espalhar seu lambda de linha única por várias linhas, mas você ainda não recebe mais de uma linha real .{} adiciona redundância. Muita redundância é ruim, muito pouco é ruim. E entrar manualmente é ruim, esp. se é difícil usá-lo.
Portanto, em tempos de IDE ruim / inexistente, o estilo de espaço em branco pode ser um pouco melhor. Mas com o poderoso IDE, os aparelhos são melhores.
fonte
O problema que encontrei com uma linguagem de espaço em branco foi com expressões condicionais de várias páginas. Adicionar uma linha no meio da página dois e sair de um espaço no meio de toda a bagunça pode alterar drasticamente a lógica do seu código. E mesmo que o código de alguém esteja "correto", tentar lê-lo é um péssimo jogo de adivinhação. Para qual "se" é esse 'mais'? Posso contar chaves muito mais fácil do que caracteres em branco invisíveis. E o mecanismo de postagem neste site continua esmagando-os em um único espaço.
fonte
Eu não acho que é realmente um contra .
Os pitonistas geralmente criticam os programadores de aparelhos ortodônticos como se violassem prontamente o recuo porque podem.
Na verdade, eu sempre usei recuo 100% consistente mesmo antes de conhecer o Python e seu escopo de recuo.
O fato é que as linguagens entre chaves também poderiam impor o recuo correto no compilador e teríamos o melhor dos dois mundos. Vejo? não versus nada.
Os pitonistas argumentariam que o aparelho não serve para nada quando a indentação faz parte da sintaxe, mas não é, o aparelho melhora a legibilidade. Eu tentei programar Python e é uma linguagem muito interessante para mim, mas você já tentou ter
if-elif
cadeias com mais de 2 ou 3 níveis de indentação? eles não parecem mais tão legais.PS: Eu escrevi chaves, mas de uma maneira mais geral, quero dizer tokens delimitadores. A chave de abertura pode ser vista como redundante, mas um idioma pode ser assim (na verdade, tenho certeza de que existem idiomas exatamente assim, mas não os conheço bem):
PS2: 2019, 4 anos após esta resposta. Eu aprendi Python e me acostumei totalmente ao seu recuo semântico e não acho difícil ler. Especialmente com o auxílio de IDEs modernos que desenham barras verticais para ajudar na identificação de blocos de recuo.
fonte