Eu li o artigo da Wikipedia sobre estilos de recuo , mas ainda não entendo. Qual é a diferença entre K&R e 1TBS?
coding-style
indentation
GavinR
fonte
fonte
Respostas:
A maior diferença entre K & R eo One True Brace Style (1TBS) é que no 1TBS, todos
if
,else
,while
, efor
declarações têm abertura e fechamento de chaves, mesmo que eles não são necessários. O objetivo é facilitar a inserção de novas instruções e saber exatamente como elas serão agrupadas.Como um exemplo:
K&R:
1TBS:
fonte
K&R é assim:
Ou seja: chaves usadas apenas quando necessário, abrindo a chave na mesma linha que a instrução de controle, fechando a chave em sua própria linha.
O "estilo de colchete verdadeiro" (1TBS ou OTBS) transforma uma única instrução controlada em uma instrução composta, colocando-a entre colchetes:
O estilo Allman vai um pouco além de 1 TB e força o espaçamento vertical ao colocar a chave de abertura em uma linha também:
Editar:
Ainda estou tentando descobrir exatamente como isso se qualifica como "arrogante" em dizer "Dennis Ritchie era um cara extremamente inteligente que não apenas inventou uma boa linguagem, mas também criou um estilo de cinta muito bom".
Para aqueles que insistem que está sendo arrogante de qualquer maneira, aqui está um pequeno desafio: vá para Sourceforge, Github (etc.) e escolha projetos usando o estilo K&R. Analise seus registros de bugs e confirmações e tente encontrar um único bug causado pelo estilo de chave que eles usavam.
Se você não quer fazer tanto trabalho, tente fazer uma análise estatística simples. Compare projetos usando diferentes estilos de chaves e veja se é possível mostrar "bimodalidade" - uma diferença estatisticamente significativa nas contagens de bugs (gravidade, etc.) que se correlaciona com o estilo de chaves.
Eu fiz as duas coisas há alguns anos atrás e não consegui encontrar um único bug que pudesse atribuir a estilos estimulantes, nem encontrei nada que se aproximasse de uma correlação estatisticamente significativa entre os dois. Em média, aqueles que utilizam K & R órtese tinha ligeiramente menos bugs, mas a diferença foi muito pequena demais para se qualificar como estatisticamente significativo.
Desde que foi apresentado, vou comentar sobre a situação com macros de múltiplas instruções. Uma macro que inclui várias instruções, mas não as envolve com chaves, possui um bug. Meu trabalho não é escrever código que cubra esse bug. Muito pelo contrário, meu trabalho é encontrar e erradicar esse bug o mais rápido possível.
Escrever código na esperança de encobrir os bugs para que eles não sejam diagnosticados e não consertados é absolutamente ruim. Chame isso de arrogante, se quiser, mas não vejo isso nem perto de negociável. Os erros devem ser encontrados e corrigidos, não encobertos. Quanto mais tempo existir, maior será a probabilidade de que eles se tornem muito mais difíceis e caros de consertar.
fonte
if
instrução com instruções recuadas depois, parecendo que ambas são executadas condicionalmente. Mas não há aparelho! A segunda declaração está realmente além doif
e sempre será executada, portanto, o bug.O problema, em geral com o estilo de chave KR, está na refatoração de código. Ao mover o código, é fácil esquecer que não há chaves em torno de algo, mova-o incorretamente (ou mova algo sob ele, pensando que é executado condicionalmente) e depois coça a cabeça quando algo não funcionar mais ou seja infeliz e esteja uma área de código pouco testada e o bug passa despercebido até que um chapéu preto encontre uma maneira de explorá-lo. Uma rápida visita ao depurador encontra facilmente o problema se você perceber, mas se não ...
fonte