Eu entendo perfeitamente que você não gosta do argumento de Joel sobre se esconder. Nem eu. Na verdade, é muito melhor usar '+' para coisas como tipos numéricos internos ou para os seus próprios, como, por exemplo, matriz. Eu admito que isso é puro e elegante para poder multiplicar duas matrizes com o '*' em vez de '.multiply ()'. E depois de tudo nós temos o mesmo tipo de abstração em ambos os casos.
O que dói aqui é a legibilidade do seu código. Em casos da vida real, não no exemplo acadêmico de multiplicação de matrizes. Especialmente se o seu idioma permite definir operadores que inicialmente não estão presentes no núcleo do idioma, por exemplo =:=
. Muitas questões extras surgem neste momento. O que é esse maldito operador? Quero dizer, qual é a precedência disso? Qual é a associatividade? Em que ordem o a =:= b =:= c
é realmente executado?
Isso já é um argumento contra sobrecarga do operador. Ainda não está convencido? Verificar as regras de precedência não levou mais de 10 segundos? Ok, vamos mais longe.
Se você começar a usar um idioma que permita a sobrecarga do operador, por exemplo aquele popular cujo nome começa com 'S', você aprenderá rapidamente que os designers da biblioteca adoram substituir os operadores. É claro que eles são bem instruídos, seguem as melhores práticas (sem cinismo aqui) e todas as suas APIs fazem todo o sentido quando as olhamos separadamente.
Agora imagine que você precisa usar algumas APIs que fazem uso pesado de sobrecarga de operadores em um único código. Ou melhor ainda - você tem que ler algum código legado como esse. É quando a sobrecarga do operador realmente é uma droga. Basicamente, se houver muitos operadores sobrecarregados em um lugar, eles logo começarão a se misturar com os outros caracteres não alfanuméricos no seu código de programa. Eles se misturam com caracteres não-alfanuméricos que não são realmente operadores, mas sim alguns elementos gramaticais de linguagem mais fundamentais que definem coisas como blocos e escopos, formatam instruções de controle de fluxo ou denotam algumas meta-coisas. Você precisará colocar os óculos e mover os olhos 10 cm para mais perto do monitor LCD para entender essa bagunça visual.