Beleza booleana - cuidados a serem tomados
Há pouco meu caro amigo Miguel escreveu um artigo muito interessante sobre a facilidade que algumas linguagens oferecem ao utilizarmos expressões booleanas. A dica é muito boa, e certamente farei uso dela. No aspecto de legibilidade de código, não vejo problema algum.
No entanto, esta técnica me incomoda no aspecto de parecer anti-natural do ponto de vista da álgebra booleana, onde trabalhamos somente com dois valores (true/false, 0/1). Me parece misturar conversão de tipos de dados, com lógica booleana. Isso somente não me incomodaria, mas me fez pensar: que resultado eu terei de expressões como ( 0 == “”), (”" == null)? Será que ele adota o valor booleano pra comparar? Resolvi testar usando perl, python e javascript, e obtive resultados diferentes:
Perl: > perl -e ‘ $a=0; print( “” == $a); print “\n”; ‘ > 1
> perl -e ‘ $a=0; print( nil == $a); print “\n” ‘ > 1
Python: > python -c ‘_a=0; print ( _a == “” )’ > False
> python -c ‘_a=0; print ( _a == None )’ > False
Javascript: > var a=0; alert( a == “” ); > True
> var a=0; alert( a == null ); > False
Bom, como podemos ver, cada linguagem de programação tem sua forma de tratar este tipo de comparação. Desta forma, fica aqui o toque para se tomar cuidado com esta técnica, levando-se sempre em conta as especificidades da linguagem que você está utilizando.

Se fossemos lidar apenas com o aspecto booleano, nem poderíamos tentar fazer esse tipo de comparação: que sentido haveria em tentar verificar se uma string é “verdadeira” ou “falsa”? Ou comparar um número inteiro com uma string?
O buraco é ainda mais embaixo. Você tem plena razão quando diz que há uma confusão entre a lógica booleana e a lógica aritmética. E isso não é algo exclusivo de linguagens “dinâmicas” ou de “script”.
Isso já vem lá do C, esse ser estranho que é tipado/fracamente tipado. E as linguagens mais modernas acabam carregando essa herança maldita por jamais se preocuparem em alterar esse comportamento.
No fim das contas, eu acho que isso é uma non-issue. Se esse tipo de idioma fosse realmente problemático, os designers das linguagens teriam feito questão de eliminá-lo. Mas a tendência parece ser justamente contrária: as linguagens novas parecem oferecer mais flexibilidade e ainda mais permissividade em relação aos idiomas utilizados.