나는이 질문을 보지 않을 것이라고 생각하지만, 매우 숙련 된 프로그래머이며 더 개방적 인 독자 중 일부가주의를 기울이기를 바랍니다.
VRP (Value-Returning Procedure)가 결정적이고 순수하기 때문에 객체 지향 프로그래밍 언어에 더 적합하다고 생각합니다.
'VRP'는 표현식의 일부로 호출되는 함수의 현대적인 학업 이름으로, 표현식을 평가하는 동안 호출을 개념적으로 대체하는 반환 값을 갖습니다. 예를 들어 x = 1 + f(y)
함수 와 같은 문장 f
에서 VRP로 사용됩니다.
'결정적'은 함수의 결과가 매개 변수의 값에만 의존한다는 것을 의미합니다. 동일한 매개 변수 값으로 다시 호출하면 동일한 결과를 얻을 수 있습니다.
'순수함'은 부작용이 없음을 의미합니다. 함수를 호출 하면 결과를 계산하는 것 외에는 아무 것도 수행하지 않습니다 . 이는 실제로 중요한 부작용이 없음을 의미하는 것으로 해석 될 수 있으므로 VRP가 호출 될 때마다 디버깅 메시지를 출력하는 경우 (예 : 무시할 수 있음)
따라서 C #에서 함수가 결정적이고 순수하지 않은 경우 void
함수 (즉, VRP 아님)로 만들어야하며 반환 해야하는 값은 out
또는 ref
매개 변수 로 반환해야한다고 말합니다 .
예를 들어, 데이터베이스 테이블에서 일부 행을 삭제하는 기능이 있고 삭제 된 행 수를 리턴하려면 다음과 같이 선언해야합니다.
public void DeleteBasketItems(BasketItemCategory category, out int count);
때때로이 함수를 호출하려고하지만를 얻지 않으려면 count
항상 과부하를 선언 할 수 있습니다.
이 스타일이 객체 지향 프로그래밍에 더 적합한 이유 를 알고 싶을 수도 있습니다 . 일반적으로 '프로 시저 프로그래밍'이라고 불릴 수있는 프로그래밍 스타일에 적합하며 객체 지향 프로그래밍에 더 적합한 절차 적 프로그래밍 스타일입니다.
왜? 객체의 고전적인 모델은 속성 (일명 속성)을 가지고 있으며, 해당 속성을 읽고 업데이트하여 (주로) 객체를 조사하고 조작합니다. 절차 적 프로그래밍 스타일은 속성을 가져오고 설정하는 작업간에 임의의 코드를 실행할 수 있기 때문에이 작업을보다 쉽게 수행하는 경향이 있습니다.
절차 적 프로그래밍의 단점은 모든 곳에서 임의의 코드를 실행할 수 있기 때문에 전역 변수와 부작용을 통해 매우 불분명하고 버그에 취약한 상호 작용을 얻을 수 있다는 것입니다.
따라서 간단히 말하면 코드를 읽는 사람에게 함수가 값을 반환하지 않음으로써 부작용을 일으킬 수 있음 을 알리는 것이 좋습니다 .