2014-03-02 5 views
2

Ars Technica에 대해 설명한 iOS Crypto Flaw에 대한 토론을 마친 후 어떤 사람은 브래킷이없는 if 표현 다음의 줄이 else으로 처리되는 경우가 발생했다고 언급했습니다. else 암시 불필요한 것처럼 조건, 참이라면괄호 안에 if 문이없는 암시 적 else가 있습니까? 언어 알 수 없음

if (<condition>) 
    <expression A>; 
    <expression B>; 
<expression C>; 

그래서, 사람에게있어서, 식 B은 생략 될 것이다.

내가 들었던 것과는 반대로 - 조건이 true이면 내 경험이 있었고 그 다음 세 표현은 모두 실행되었습니다. -하지만 제가 프로 브래킷 옹호자로 생각할 때 내 경험이 제한 될 수 있습니다. , 나는 그 사람을 완전히 불러내는 것을 주저했다. 대신, 나는 약 10 분을 명확히하고 그들이 무슨 말을하는지 정확히 이해했는지 확인했습니다.

그들이 말한 것에 진실이 있습니까? 어떤 언어?

저는 모든 주요 스크립팅 언어가 제 이해력을 따르고 있다고 확신합니다. 나는 그 사람이 Objective-C에 대해 더 많은 배경 지식을 가지고 있다고 생각한다. 그러나 이것이 사실이라면 항상 대괄호를 사용하는 가장 큰 이유가 될 수 있습니다.

+0

이것은 너무 광범위 할 수 있으며 질문을하기에 적합한 포럼이 아닐 수도 있지만 'if/else' 구조에 너무 구체적이므로 SO를 선택했습니다. – vol7ron

답변

1

이것은 매우 비논리적이며 그러한 구문 규칙을 사용하는 언어는 많은 지원을 얻게 될 것입니다. (모든 언어를 사용하기로 선택한 언어는 내가 선호하는 구문이 다르므로 확실히 가능합니다.)

이 방법을 구현하는 데있어 가능한 모든 방법으로 언어의 다른 구문 규칙을 살펴볼 때 겉으로보기에는 일관성없는 동작이 발생하거나 가능 한 내용을 매우 제한적으로 받아 들일 수 있습니다. 가독성 - 동일한 들여 쓰기가있는 경우, 블록에 여러 줄이있는 if 문을 어떻게 갖게 되었습니까? 아니면 허용되지 않습니까? else 부분에 들여 쓰기가 줄어들면 else에 속하는 코드와 if- 문 바로 뒤에 오는 코드를 구분하거나 모든 if 문에 else 부분이 있어야합니까? 그리고 멀티 라인 else도 문제가 될 수 있습니다. 중괄호가 있거나없는 경우를 기반으로하는 경우에는 시작하기가 정말로 혼란 스러울 것입니다.

그런데 실제로는 "anything goes"이라는 모토가있는 esoteric languages도 있습니다.

난해한 프로그래밍 언어 (간혹 esolang으로 단축됨)는 컴퓨터 프로그래밍 언어 디자인의 경계를 개념 증명 또는 농담으로 테스트하도록 설계된 프로그래밍 언어입니다.

그러한 구문 규칙을 가진 난해한 언어가 있다면 놀랄 일도 아니며 특히 의미가 있습니다.

대안은 사람이이 같은 상황을보고되었다 아마도 다음의 경우 문에서 return 문으로,

<type> someFunction() 
{ 
    if (<condition>) 
     return <expression A>; 
    return <expression B>; 
} 

이 두 번째 return 문 앞에 명시 적 else에 동의어가 될 것 조건문이 거짓 일 때만 다음에 오는 return 문을 실행하게합니다.

+1

예를 들어 내가 처음에 그 사람이 말한 것으로 생각했던 것입니다. 모두 공통적이고 실용적입니다. 그들이 '사실'이라면 '표현 B'를 건너 뛸 수 있다고 언급했을 때, 그것은 내 귀가 침범했을 때였습니다. 파이썬이나 구조체 기반의 언어가 들여 쓰기를 사용하여 다음의 들여 쓴 줄을 else 문으로 처리 할 수 ​​있다고 생각했지만 언어가 마음에 들지 않습니다. – vol7ron