2014-11-17 3 views
3

본문에서 그들은 코드 예제의 맨 아래에 main 함수를 넣었습니다. 일반적인 책 독자로서, 저는 1 행부터 읽기 시작합니다. 코딩은 책 (하단에서 상단, 줄당 한 줄)과 다른 제어 흐름을 가지고 있음을 이해하지만, 왜 처음으로 원하는지 이해하지 못합니다 귀하의 프로그램의 진입 점이 아닌 코드 행. 이 특별한 이유가 있습니까?main (String args [])을 코드 하단에 두는 이유는 무엇입니까?

+1

나는 그것이 작가의 코딩 스타일이라고 생각한다. 내 마음에 오는 유일한 점은 스택이 어떻게 작동 하는지를 반영하기 위해이 작업을 수행 할 수 있다는 것입니다. 메인은 첫 번째 요소입니다 (맨 아래에있는 것임). – BackSlash

+1

이전 C 시간으로 거슬러 올라갑니다. 어디에서 먼저 선언했는지 결정적이었습니다. – Fildor

+0

가능한 [Java 클래스 파일의 main() 메소드의 위치] (http : // stackoverflow.com/questions/7911829/preferred-java-class-file-main-method-in-java-class-file) –

답변

4

나는 저자에 대해 말할 수 있지만 몇 가지 이유를 생각할 수 : 저자는 클래스의 실제 방법을 강조하고 싶었을 수도있다

  1. . 실제로 실제로 매우 적은 Java 클래스는 main 메소드 (1 % 미만)를 가지고 있습니다. 클래스에서 중요한 것은 객체가 작동하는 방식입니다. 아마도 main 방법은 거의 후속 고려 사항이나 좋은 것입니다.

  2. 자바는 C 프로그래밍 언어의 영향을받습니다. Java에서 메서드가 선언되는 순서는 중요하지 않지만 C에서는 (적어도 C의 이전 버전에서는) main 위에 선언 된 경우에만 main에서 함수를 호출 할 수있었습니다. 따라서 사람들은 프로토 타입을 사용하거나 하단에 main을 넣었습니다. 이렇게 많은 사람들이 버릇 없게 만들었습니다. 오, 나는 몰라요, 이것은 잠재 의식으로 이것들을 자바로 옮겼다는 생각에 영향을 미쳤습니다.

하지만 진입 점을 먼저 표시해야하고, 기능이 서로 "페이지 아래로"가는 호출해야한다는 감각은 많은 사람들에 의해 공유됩니다. Robert C. Martin (Bob 삼촌)은 이것이 좋은 일이라고 말했습니다.

부칙

내가 페이지를 아래로 읽는 삼촌 밥의 제안, 뭔가 알고에 대한 참조를 찾고 있었다 더 - 또는 - 덜 신문 은유있다. 나는 마틴의 클린 코드 책의 서평에서 this snippet을 발견 :

... 코드를 서식에 관하여 언급 한 신문 유. 이것은 신문 기사처럼 코드를 읽게하는 아이디어를 묘사합니다. 우리는 더 많은 세부 사항을 읽기 전에 클래스 상단에서 어떻게 작동하는지에 대한 일반적인 아이디어를 얻을 수 있어야합니다.

은, 당신도 알다시피, 난 정말 C에서 상속 전통 생각이나 main 종종 자바 하단에 표시하게 상향식 (bottom-up) - 다움에 대한 인식을 강조 (꼭 먼저 그 호출되는 함수를 선언).

+0

어떻게 C에 있어야하는지에 대한 참조는 사람들이 왜 일관성 문제로 Java에서 그것을 할 수 있는지를 쉽게 알 수있게 해줍니다. 감사! – Joop

1

주요 기능은 진입 점입니다. 메인이 하단에 나타나야한다는 어렵고 빠른 규칙은 없습니다. 그것은 개발자의 전적인 권한입니다. 한 가지 논리는 여러 가지 다른 기능과 데이터를 기반으로하는 주요 기능입니다. 종속 함수의 선언은 Java에서 선언되고 정의되어야합니다. 그러면 주 함수가 이들 함수에 액세스 할 수 있습니다 (앞으로 선언을 피하는 방식으로).

+0

"앞으로 선언하지 않으려 고"하는 이유는 무엇입니까? 그냥 궁금해서. –

+0

@RayToal C++과 같은 언어의 경우 함수 내에서 호출되는 함수, 예를 들어 g가있는 경우 f가 g보다 먼저 정의 된 경우 별도의 선언이 필요하지 않습니다. 그렇지 않으면 f를 먼저 선언해야합니다 (전달 참조) 정의하고 나중에 정의 할 필요가있는 두 곳, 선언 및 정의. Java에서는 선언에 선언이 포함되므로 함수 참조가 한 곳에서 필요합니다. 그런 식으로. –

관련 문제