[language-agnostic] 이상한 언어 기능

당신의 의견으로는, 당신이 경험 한 가장 놀랍고, 이상하고, 이상하거나 정말로 “WTF”언어 기능은 무엇입니까?

답변 당 하나의 기능 만 사용하십시오.



답변

C에서는 배열을 다음과 같이 색인화 할 수 있습니다.

a[10]

이것은 매우 일반적입니다.

그러나 덜 알려진 형태 (실제로 작동합니다!)는 다음과 같습니다.

10[a]

이는 위와 동일 함을 의미합니다.


답변

자바 스크립트에서 :

 '5' + 3 gives '53'

이므로

 '5' - 3 gives 2


답변

JavaScript에서 다음 구성

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

returnsundefined 는 개행 후의 부적절한 암시 적 세미콜론 삽입으로 인한 구문 오류 return입니다. 그래도 다음과 같이 작동합니다.

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

더 나쁜 것은, 이것도 잘 작동합니다 (적어도 Chrome에서는).

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

구문 오류가 발생하지 않고 자동으로 실패하는 동일한 문제의 변형이 있습니다.

return
    2 + 2;


답변

자바 스크립트 진리표 :

''        ==   '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

출처 : Doug Crockford


답변

C와 C ++의 3 가지 그래프.

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

LOL|trigraph가로 ??!변환되어 인쇄 됩니다 |.


답변

자동 권투와 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

설명

Java 소스 코드를 살짝 살펴보면 다음과 같은 결과가 나타납니다.

/**
 * 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);
}

참고 : 속성으로 설정하지 않으면 IntegerCache.high기본값은 127입니다.

자동 복싱에서 발생하는 일은 명시 적으로 작성하지 않는 한 foo와 bar 모두 동일한 정수 객체를 캐시에서 검색하는 것입니다. 예를 들어 foo = new Integer(42), 참조 평등을 비교할 때는 false가 아니라 true입니다. 정수 값을 비교하는 올바른 방법은.equals;


답변

닐 프레이저 인용 (그 페이지의 끝 부분을보십시오)

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

(Java에서는 작동하지만 JavaScript와 Python에서는 동작이 분명히 동일합니다). 결과는 독자에게 연습으로 남습니다.

편집 : 주제에 관한 한 다음 사항도 고려하십시오.

try {
    throw new AssertionError();
} finally {
    return false;
}