Esto suena como una simple solicitud (y claramente es lo suficientemente simple que python lo implementó) pero no es necesariamente tan fácil de usar. De hecho, abre la posibilidad de que se produzcan muchos errores.
En concreto, cada vez que utilice funciones (o propiedades en el caso de C#, Compuestos absorbentes para Java)
Así
public int GetX()
{
return 4;
}
(2 < GetX() < 5);
(2 < GetX() > 5);
(5 < GetX() < 2);
parece que sería muy simple. Pero los problemas ocurren si GetX() tiene efectos secundarios.
private int val = 10;
public int GetCountdown()
{
return val--;
}
(2 < GetCountdown() < 5);
(2 < GetCountdown() > 5);
(5 < GetCountdown() < 2);
En esta situación, ¿"GetCountdown()" disminuye dos o solo una vez? ¿El atajo "encadenado si alguna vez" alguna vez?
Considere las últimas declaraciones, que aproximadamente evalúa (en inglés) "Es 5 menos que algún valor que es menos de 2) que debería ser imposible, pero dependiendo de la implementación y los efectos secundarios, es posible que alguna función (Random.NextInt()) podría pasar ambas pruebas.
Por lo tanto, por ese motivo, se requeriría que cada uno de los elementos solo se evalúe una vez, el guardado en una variable local para la siguiente comparación. entonces usted entra en problemas de acceso directo.
public int GetOne()
{
return 1;
}
public int GetVar()
{
return -1;
}
(GetOne() < GetVar() < GetDBVal() < GetUserInput())
En general, usted querría comprobar primero las constantes y las variables b antes de hacer un hit de base de datos. Pero si dijéramos (como dijimos antes) que todos los valores deben guardarse en variables locales con anticipación, esto significa que podría estar llamando a un hit de la base de datos, y pidiendo información al usuario aunque "GetVar()" sea - 1, y entonces la primera comparación falla)
Como dije antes, claramente Python permite esta sintaxis, por lo que es claramente posible. Pero, independientemente de las implicaciones técnicas que he expuesto (todas ellas son fáciles de diseñar) significa que su código es menos claro porque la siguiente persona que lo lea no sabe si ha considerado todos o no esta. Mientras que, if(x > 2 && x < 5) { }
me parece claro, sé lo que hace, y sé lo que el codificador pretende.
Oooh .... brillante. – outis
Veo que también hay soporte experimental en Vala, mira aquí: http://live.gnome.org/Vala/Tutorial#Chained_Relational_Expressions – Davorin