함수 대신 서브 루틴으로 시작하십시오 . 그들에게 프로그램은 단지 명령 목록 일 뿐이며 컴퓨터에게 무언가를하는 방법을 알려주는 레시피 라고 말하십시오. 그리고 그것은 명령을 차례대로 실행합니다 (일부 단계를 병렬로 만들 수 있지만 나중에 더 자세히 설명 할 수 있음).
일부 작업은 매우 일반적이고 반복적이므로 항상 반복해서 다시 작성해야하는 경우에는 끔찍할 수 있습니다. 따라서 한 번만 작성하고 "더 작은 프로그램"을 만들어서 서브 루틴 으로 재사용 할 수 있습니다. 프로그램의 다른 부분. 두 번 이상 실행할 수 있도록 프로그램에서 의미있는 이름을 지정 합니다. 우리가, 더 큰 하나의 일환으로 "작은 프로그램"을 실행 할 때 우리는 그 이름을 사용할 수 있습니다 호출 그 이름하여.
서브 루틴을 호출 하는 것은 해당 악마 의 이름 으로 해당 작업을 수행하는 방법을 알고 있는 악마 를 소환하는 것과 같습니다 . 우리가 프로그램에서 특정 작업을하고 싶을 때, "Argoth라는 악마를 불러라"라고 쓰고, 악마가 지시 한대로 악마가 나타나서 우리를 위해 일을 한 다음, 우리는 계속해서 일.
때때로 악마는 수행해야 할 작업이나 실제로 우리가 원하는 것을 결정할 수없는 추가 정보가 필요합니다. 예를 들어, 악마가 성을 짓기로되어 있다면, 어디로 지어 질 것인지, 얼마나 큰지 등 을 알아야 할 수도 있습니다 . 그것들은 악마에게 전달 된 인수입니다. 매개 변수화 됨 .
매개 변수 는 작업을 수행하기 위해 누락되었지만 필요한 정보입니다. 서브 루틴이 수행 할 수있는 작업을 약간 변경합니다. 그것들은 우리가 그것을 실행하기 전에 채워 져야 할 레시피의 빈 슬롯과 같습니다.
반면에 인수 는 이러한 매개 변수에 제공하는 실제 정보 (값)입니다.
병렬 실행에 관해서는, 우리는 이것을 다음과 같이 생각할 수 있습니다 : 프로그램을 실행하는 누군가 (또는 무언가 )가 항상 있습니다 (명령 목록). 그것은 또 다른 인간이거나 ( "컴퓨터"는 한때 계산을 수행 한 사람 의 이름 이었다는 것을 알고 있습니까?) 기계입니다. 프로그램은 명령 목록 일 뿐이며 자체적으로 작동하지 않습니다. 계산 과정을 수행 할 사람이나 무언가가 있어야합니다(목록에서 이러한 조치를 수행하십시오). 때로는 이러한 작업을 병렬로 수행 할 수도 있습니다. 목록의 사본을 여러 사람에게 배포하고 서로 방해하지 않거나 방해하지 않는 한 각 목록에서 다른 작업을 수행하도록 할 수 있습니다. 다른 사람의 작업 결과를 기다릴 필요가 없습니다. 그것은 당신을위한 멀티 스레딩 입니다.)
차이점에 관해서 기능 및 서브 루틴 (또한 절차 ), 통상의 차이는 기능 특정 계산하도록 호출되고 있다는 것이다 값 이지만, 그 실행 결과로서 반환 절차가 재미로 실행되는) AKA "부작용"– 목록에서 수행 된 작업을 위해.
그러나 프로시 저나 함수를 호출 하면 처음에 문제가 발생하면 한 번 인기가 있었던 다른 용어 인 jump 을 사용할 수 있습니다 . 하나는 서브 루틴으로 점프 할 수 있습니다. 즉, 현재 수행중인 작업을 중지하고 해당 작업을 수행하기 위해 목록의 다른 위치 (또는 다른 목록) (서브 루틴)로 "점프"합니다. 그런 다음 완료하면 "뒤로"즉, 중단 된 장소로 돌아와 이전 작업을 계속할 수 있습니다. 소명과 점프의 차이점은 이제 당신 이 악마라는 것입니다.
에 관해서는 방법 사람이 여기에 언급, 또는 일부 언어는 "기능이없는, 유일한 방법"사실 - 방법이 있기 때문에, 매우 정확 아니다 있습니다 기능! – 특별한 종류 : 그것들은 객체 안에 캡슐화 된 일부 정보를 검색하거나 그것들을 조작하는 데 사용되는 함수입니다. 그것들은 "해당 데이터를 조작하는 방법"입니다. 이름은 데이터가 객체로 묶여 있고 "메소드"라는 특수 기능에 의해서만 직접 조작 될 수없는 객체 지향 패러다임에서 유래되었습니다.
방법은 다른 방식으로 특별하다 : 어떤 특정 객체 ( "this"객체)가 작동 / 호출되어야 하는지 알아야 한다. 그렇기 때문에 메소드가 호출 된 객체 ( "this"포인터)에 대한 정보를 저장하는 숨겨진 매개 변수를 추가하여 메소드를 구현하는 것이 일반적입니다. 이것은 함수가 조금 불려지는 방식을 복잡하게하지만 프로그래머가 자신이하는 일을 알고있는 한 크게 신경 쓰지 않아야하는 "구현 세부 사항"입니다.