[C con Clase] La prioridad del operador ?:

Jubei jubeihendrix en gmail.com
Dom Mayo 30 10:27:51 CEST 2010


Buenas Giancarlo ( y a quien le interese :), ahí mi aportación:

El operador ternario [?] tiene una forma de funcionar sencilla

	[1] condición ? [2] verdad : [3] mentira

Pero creo que te has liado por lo siguiente:  lo normal es que en [2] y [3] pongas un valor
que quieres asignar a una variable en función de la evaluación de [1] y lo asignes de la
siguiente manera:

	variable = condición ? verdad : mentira

	p.e. 
		var = a > b ? 5 : 3;

que es lo mismo que:
                                                           p.e.
	if( condición )                        |          if( a > b)             
		variable = verdad;        |              var = 5;
	else                                         |          else
		variable = mentira;       |             var = 3

Sin embargo lo que has hecho es escribir una sentencia dónde típicamente debería haber un resultado,
según interpreto de tus intenciones.

Lo que hace exáctamente tu código es: 
	
	if( condición )
		No Pasa Nada !!!;
	else
		a = 3;

dicho de otro modo:

	if( ! condición )
		a = 3;

Desglosando tu ejemplo ( dónde a = 1 , b = 2 ):

	if( ! ( a > b ) )  ...  ! ( 1 > 2 ) => No False => True 			|  código...  a > b ? b : a = 3
		a = 3;

  >> a vale 3

	if( ! ( a > b ) ) ... ! ( 3 > 2 ) => No True => False			| código... a > b ? b : a = 5
		a = 5;

  >> a sigue valiendo 3
  >> b nunca modificó su valor que es 2



Lo que has hecho al final es todavía más rebuscado:

	( a > b ? b : a ) = 3;

que quiere decir: asigna 3 a lo que devuelva la expresión, que sería:

	if( 1 > 2 )			( a==1, b == 2 )
		return b;
	else
		return a

	>> asignó 3 a la variable a

y luego

	( a > b ? b : a ) = 5  => asigna 5 a la variable que devuelva esto

	if( 3 > 2 )			(  a == 3, b == 2 )
		return b;
	else
		return a;
	
	>> asignó 5 a la variable b



Al final parece que por poco que uno quiera escribir se extiende más de lo que desearía, pero vamos
como conclusión se usa [ variable = condición ? verdad : mentira ] dónde verdad y mentira son valores
que creo que es lo que andabas buscando.

A pesar de ser éste su uso normal, también se puede [ condición ? verdad : mentira ] 
dónde verdad y mentira sean expresiones (por eso tu ejemplo compila sin pegas )
pero yo personalmente no lo aconsejo, para eso mejor usar los if...else que para eso están.

Espero que te haya servido de ayuda a ti y/o a cualquier otro, un saludo a tod en s (que es la primera vez
que escribo xD ).


------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100530/f4ad0de5/attachment.html>


Más información sobre la lista de distribución Cconclase