2010-01-13 9 views
8

¿Hay una sintaxis neither A nor B?Hay un if-else, ¿hay una declaración Ni Nor?

+3

if (! Expression) –

+6

Aunque parece tener sentido en inglés, es difícil decirlo ya que el inglés es un lenguaje tan impreciso. ¿Tiene una definición matemática de la funcionalidad que desea? Si puede definir este "ni" y "no" en términos de verdadero y falso, el resto debería ser trivial. –

+4

Intuitivamente eso se traduciría en 'ni (x) {/ * no ocurre * /} ni (y) {/ * no ocurre * /}' para mí ... Probablemente no sea lo que pretendía. –

Respuesta

48

Si bien hay ISN' Para hacerlo, sugiero que eche un vistazo al list of supported logical operators y luego estudie cuidadosamente De Morgan's laws. El conocimiento suficiente en estos dos campos le permitirá escribir cualquier declaración lógica en if-else if sintaxis.

EDIT: Para responder completamente a su pregunta (aunque esto ya se ha hecho en otras respuestas), se podría escribir un ni-ni declaración como esta:

if (!A && !B) { DoStuff(); } 
+15

+1 para la ley de De Morgan, algo que todo programador debería saber. –

+3

Exactamente, no necesita más que ('&&', '~') O ('||', '~') para representar cualquier conexión lógica. – AraK

+0

Gracias por eso. Conocía las leyes, pero no sabía que llevaran el nombre de alguien :-) –

2

No, no lo hay.

13

para codificar "si ni A ni B":

if (!A && !B) { ... } //if (not A) and (not B) 

o:

if (!(A || B)) { ... } //if not (A or B) 
+6

Ley de AKA De Morgan en la otra respuesta – Potatoswatter

1

no. Se puede lograr el mismo usando if conjuntamente con ! (no), && (y) y || (o)

1
if (x == 1) 
{ // do this } 

else if (x == 2) 
{ // do this } 

else { // do this if it's neither 2 nor 1 } 

el último lo demás es lo mismo que:

if (x != 1 && x != 2) { // do something } 
70

Oh ... que querían que el "¿no es" palabra clave?

VB agrega No es palabra clave

(Newswire 19/08/2004)

Microsoft ha anunciado que Visual Basic se añadir el "no es" palabra clave para el idioma . Según una fuente en el equipo de VB.NET "Con VB, queremos que el lenguaje funcione de la manera que usted piensa. Extensos estudios de usabilidad han demostrado demostrándonos la ventaja de añadiendo No es el idioma".

La adición de la palabra clave permitiría tales sintaxis que

If ThisThing Ain't Nothing Then

Según la fuente "Estamos tratando de mantenerse al día con los avances en el idioma Inglés que, como se sabe, está cambiando casi tan rápido como la tecnología ". El equipo de VB cree que ain't is poised to finally be a fully supported keyword in the English language, y ellos consideran que si no incluyen la palabra clave en esta versión, pueden caer muy por debajo del inglés antes de su próxima posibilidad de actualizar VB. Sin embargo, acaloradamente debatido es lo que "No es" debería equiparar a.En su forma más popular, el por encima de línea de código se traduciría en:

If ThisThing Is Nothing Then

Sin embargo, todo el mundo está segundo grado Inglés maestro ha dejado claro que "No es Nada" en realidad significa "¿Es Algo" , ya que es un doble negativo. es decir, el equivelant correcta sería ser

If ThisThing IsNot Nothing Then

Microsoft no tiene ninguna prisa para correr través de esta decisión, fuentes estatales, "Mira, entre VB.NET Beta 1 y Beta 2 , tuvimos que change the definition of 'true'. No queremos ir al a través de eso otra vez ".

Sin embargo puristas del lenguaje declaran que todo este planteamiento es erróneo, señalando que "no es" es una contracción por "no soy", y diciendo "Si ThisThing No soy nada" es simplemente mala gramática. Mejores alternativas, dicen, incluyen resurecting i'n't, como en "If ThisThing I'n't Nothing". Pero incluso esto puede no ser lo suficientemente lejos estados lingüista Jacques Leblanc, "insisto que la perpetuación de la doble negativo es la causa principal de este problema , pero hasta el momento, nadie está realmente dispuesto a discutir el obvio elefante en la habitación. la verdadera solución sería permitir 'Si ThisItem es algo, entonces.' "

Microsoft también se informó de que experimentar con 'Asif', 'Tal vez', y" Totalmente ". Además, "Catch" probablemente será reemplazado por "Doh!", y "Finally" será reemplazado por "Whatever".

fuente: http://web.archive.org/web/20050308014055/http://ea.3leaf.com/2004/08/vb_adds_aint_ke.html

+6

ROFLMAO, en parte porque es ridículo, y en parte porque hay una ¡pequeña voz diciéndome que podrían hacer esto! "Wordup" es el nuevo "Infierno o Mundo ". –

+5

Cuidado Jeff, eso es peligrosamente cerca de DIVERSIÓN :) –

+0

VB = Vernacular Basic. =) Me recuerda algo: http://en.wikipedia.org/wiki/Shakespeare_(programming_language) –

9

Aquí van:

class neither_t 
{ 
    bool lhv; 
    neither_t(bool lhv): lhv(lhv) {} 
public: 
    bool nor(bool rhv) const 
    { 
     return !lhv && !rhv; 
    } 
    friend neither_t neither(bool lhv); 
}; 

neither_t neither(bool lhv) 
{ 
    return neither_t(lhv); 
} 

#include <cstdio> 

int main() 
{ 
    int x = 3; 
    if (neither(x == 1).nor(x == 2)) { 
     puts("OK"); 
    } 
} 
+1

¡Obtuviste C en mi C++! :PAG – Bill

0

Sí. El & & y || los operadores en C realizan el control de flujo, y todas las expresiones son enunciados, por lo que & & y || formar declaraciones de control de flujo. Los términos de la expresión se evalúan hasta que se conozca su valor, por lo que & & ejecutará una serie de expresiones verdaderas y || ejecutará una serie de expresiones falsas. Como || (O) continúa mientras sus argumentos sean falsos (NO), se puede llamar una declaración ni-ni.

bool a = fun1(), b = fun2(); 
a || b || (cerr << "neither A nor B is true" << endl); 
!a && !b && (cerr << "De Morgan says neither A nor B is true" << endl); 

"Pero," usted dice, "que en realidad no es una sentencia de control de flujo. Sólo afecta control de flujo dentro un comunicado." Feria nuff. El operador throw es en realidad también una expresión con el tipo void. Entonces podemos extender este, erm, estilo para cubrir bloques de varias líneas.

try { 
    a || b || (throw logic_error("neither a nor b is true"), false); 
} catch(logic_error &exc) { 
    cerr << exc.what() << endl; 
    cerr << "now with added madness!" << endl; 
} 

espero que eso es lo que quería ...

0

Rubí tiene algo de este tipo de azúcar sintáctica:

  • menos que es el equivalente de si!
  • collection.empty? se puede utilizar como el equivalente de ! Collection.any?
0

¿Quiere decir unless de perl?

$a = 12; 
unless($a >= 0) { 
    print "a is negative\n"; 
} elsif ($a == 0) { 
    print "a is equal to 0\n"; 
} else { 
    print "a is positive\n"; 
} 
# it prints: a is positive 

Curiosamente no hay else unless, solamente (el equivalente a) else if.

Cuestiones relacionadas