Plus étrange langage

Quelle est, à votre avis, la caractéristique de langue la plus surprenante, étrange, étrange ou vraiment "WTF" que vous avez rencontrée?

une seule caractéristique par réponse.

975
demandé sur Robert Harvey 0000-00-00 00:00:00
la source

7 ответов

en C, les tableaux peuvent être indexés comme suit:

a[10]

ce qui est très courant.

cependant, la forme moins connue (qui fonctionne vraiment!) est:

10[a]

, qui signifie la même chose que ci-dessus.

1861
répondu Edan Maor 2010-01-03 18:57:32
la source

En JavaScript:

 '5' + 3 gives '53'

attendu que

 '5' - 3 gives 2
1296
répondu Dipstick 2010-09-21 14:21:05
la source

en JavaScript, la construction suivante

return
{
    id : 1234,
    title : 'Tony the Pony'
};

renvoie undefined est une erreur de syntaxe en raison de l'sournois implicite point-virgule insertion sur le retour à la ligne après return . Les travaux suivants comme vous vous y attendriez cependant:

return {
    id : 1234,
    title : 'Tony the Pony'
};

pire encore, celui-ci fonctionne aussi bien (en Chrome, au moins):

return /*
*/{
    id : 1234,
    title : 'Tony the Pony'
};

Voici une variante du même problème qui ne fournit pas une syntaxe erreur, échoue simplement en silence:

return
    2 + 2;
872
répondu DrJokepu 2011-12-07 03:48:17
la source

table de vérité JavaScript:

''        ==   '0'           // false
0         ==   ''            // true
0         ==   '0'           // true
false     ==   'false'       // false
false     ==   '0'           // true
false     ==   undefined     // false
false     ==   null          // false
null      ==   undefined     // true
" \t\r\n" ==   0             // true

Source: Doug Crockford

796
répondu Chandra Patni 2011-12-07 03:49:23
la source

Trigraphs en C et C++.

int main() {
   printf("LOL??!");
}

ce sera imprimé LOL| , parce que le trigraphe ??! est converti en | .

662
répondu Andreas Bonini 2011-12-07 03:49:41
la source

Fun avec des auto de boxe et l'entier de cache en Java:

Integer foo = 1000;
Integer bar = 1000;

foo <= bar; // true
foo >= bar; // true
foo == bar; // false

//However, if the values of foo and bar are between 127 and -128 (inclusive)
//the behaviour changes:

Integer foo = 42;
Integer bar = 42;

foo <= bar; // true
foo >= bar; // true
foo == bar; // true

explication

un coup d'oeil rapide sur le code source Java donnera les résultats suivants:

/**
 * Returns a <tt>Integer</tt> instance representing the specified
 * <tt>int</tt> value.
 * If a new <tt>Integer</tt> instance is not required, this method
 * should generally be used in preference to the constructor
 * {@link #Integer(int)}, as this method is likely to yield
 * significantly better space and time performance by caching
 * frequently requested values.
 *
 * @param  i an <code>int</code> value.
 * @return a <tt>Integer</tt> instance representing <tt>i</tt>.
 * @since  1.5
 */
public static Integer valueOf(int i) {
    if (i >= -128 && i <= IntegerCache.high)
        return IntegerCache.cache[i + 128];
    else
        return new Integer(i);
}

Note: IntegerCache.high par défaut 127 sauf si elle est définie par une propriété.

ce qui se passe avec la boxe automatique est que les deux foo et la barre le même objet entier récupéré à partir du cache à moins qu'il ne soit explicitement créé: par exemple foo = new Integer(42) , donc en comparant l'égalité de référence, ils seront vrais plutôt que faux. La bonne façon de comparer la valeur entière est d'utiliser .equals;

574
répondu yx. 2011-12-07 03:51:12
la source

citant Neil Fraser (regardez à la fin de cette page),

try {
    return true;
} finally {
    return false;
}

(en Java, mais le comportement est apparemment le même en JavaScript et Python). Le résultat est laissé comme exercice au lecteur.

édité: tant que nous sommes sur le sujet considérer aussi ceci:

try {
    throw new AssertionError();
}
373
répondu
la source