If - 절차적, 기능적, 객체 지향
if
문에 대해 이야기합시다. 많은 사람들이 이것을 프로그래밍의 초석으로 봅니다. 예를 들어 CSS가 프로그래밍 언어인지 아닌지(그것은) 질문에 대해 논의할 때마다 누군가는 "CSS에는 if
문이 없으므로 PL로 간주할 수 없습니다."이 아이디어가 어디서 나오는지 모르겠습니다. if
문은 goto, 점프, 예외, 루프 등과 같은 많은 제어 흐름 구조 중 하나입니다.절차적
if
의 가장 잘 알려진 형식은 "절차적"또는 structured 형식이라고 생각합니다.if (condition) {
thenAction();
} else {
elseAction();
}
"절차적"이란 명령형 프로그래밍 유형을 의미하지만 단순한 Von Neumann 기계보다 더 조직적입니다. (명령형 프로그래밍은 기계에 직접 지시를 내릴 때 1단계, 2단계 등을 수행하는 것입니다.)
정확한 정의 대신 예를 들어 보겠습니다.
기능의
기능적 스타일로 구현
if
하려면 다음과 같이 기능으로만 제한해야 합니다.// Implementation:
const True = (x) => (y) => x;
const False = (x) => (y) => y;
const If = (condition, thenAction, elseAction) => {
const action = condition(thenAction)(elseAction);
return action();
}
// Usage:
If(condition, thenAction, elseAction);
이 아이디어는 람다 미적분에서 Church Encoded
True
, False
를 직접 번역한 것입니다.True = λx.λy.x
False = λx.λy.y
객체 지향
기능적 스타일로 구현
if
하려면 객체로만 제한해야 합니다.// Implementation:
class TrueClass {
Then(callBack) {
callBack.call()
return this
}
Else(callBack) {
return this
}
}
class FalseClass {
Then(callBack){
return this
}
Else(callBack){
callBack.call()
return this
}
}
const True = new TrueClass();
const False = new FalseClass();
// Usage:
// const condition = True or False
condition.Then(thenAction).Else(elseAction)
결론
실제로 많은 OOP와 FP languages은 절차적 스타일
if
을 사용합니다(그것 없이도 벗어날 수 있습니다).내가 이러한 예를 제시한 이유는 "순수한"FP 및 OOP 구현을 보여 주어 비교할 수 있도록 하기 위함입니다. 전체 그림을 보려면 OOP 예제가 SmallTalk 스타일이고 SmallTalk는 Scheme에서 약간의 영감을 얻었으며 이는 차례로 람다 미적분
¯\_(ツ)_/¯
의 아이디어를 사용합니다. 어떤 사람들은 "순수한"OOP의 정의를 SmallTalk로 주장할 것입니다. 다른 기사로 넘어가겠습니다.Photo by Tom Parsons on Unsplash
Reference
이 문제에 관하여(If - 절차적, 기능적, 객체 지향), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/stereobooster/if-procedural-functional-object-oriented-a4d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)