Nomear corretamente as coisas é difícil. Muito difícil. Se você olhar para o outro lado, você também pode entender que as coisas nomeadas corretamente são importantes. (Caso contrário, por que você gastaria o esforço para nomeá-lo?)
Mas, às vezes, os nomes das coisas simplesmente não são importantes. É por isso que temos coisas como funções anônimas ("lambdas"), por exemplo: porque às vezes simplesmente não vale a pena nomear coisas.
Existem muitos exemplos em que nomes de variáveis com uma única letra (ou muito curtos) são apropriados:
i, j, k, lPara os índices de ansa
ke vpara a chave e o valor em um mapa
npara um número (por exemplo, em Math.abs(n))
a, b, cPara objectos arbitrários (por exemplo, em max(a, b))
epara o elemento em um for eachloop genérico
f para a função em uma função de ordem superior
p para a função de predicado em um filtro
T, T1, T2, ... para variáveis do tipo
E para variáveis de tipo que representam o tipo de elemento de uma coleção
R para uma variável de tipo que representa o tipo de resultado de uma função
expara a exceção em uma catchcláusula
op para a operação em um mapa ou dobra
- anexando a letra
spara indicar o plural, ou seja, uma coleção (por exemplo, nspara uma coleção de números xse yspara duas coleções arbitrárias de objetos genéricos)
Eu nunca os vejo sendo usados em outras linguagens de programação!
Eles são muito comuns em praticamente todas as linguagens que conheço (e provavelmente também nas que não conheço.) Haskell, F #, ML, Ruby, Python, Perl, PHP, C #, Java, Scala, Groovy, Boo, Nemerle, D, Go, C ++, C, o nome dele.