어떤 함수 F(a,b)가 있다치자
근데 리턴 받아야 될 값은 두개야
근데 보통 대부분 함수 리턴값은 1개밖에 안돼잖아?
이제 여기서 문제가 생기는데
깔끔하게 두개를 받아오는 방법이 뭘까?
방법1
전역변수를 쓴다.
int A=0,B=0;
function F(a,b) {
A=a';
B=b';
}
F(1,2);
print("%d %d" ,A,B);
밑에 방법중 상대적으로 빠르겠지만, 제일 별로라 생각해 쓸때없이 메모리쓰고 에초에 변수만드는걸 싫어해서 이건 아닌거 같아
방법2
리턴값을 변경하는 인자 하나를 더 받는다.
function F(a,b,sign) {
if (sign) {return a'}
else {return b'}
}
print("%d %d", F(1,2,true),F(1,2,false));
난 이방법은 괜찮아보이긴 하지만 그래도 일시적이지만 메모리 쓰는게 좀 껄쩍지근해.
방법3
두개를 배열로 만든다음 리턴한다.
function F(a,b) {
return [a',b'];
}
print("%d %d", F(1,2)[0],F(1,2)[1]);
이방법은 변수를 일절 만들지 않고 하긴 하는데 일시적으로 배열을 만들고 여전히 위 방법과 같은 문제로 똑같은짓을 2번 하게 만들어서 첫번째 방법의 2배는 느릴꺼야
이런 방법들을 생각해봤는데 메모리와 속도를 둘다 잡는 그런 마음에 드는 방법이 없네, 다들 어떻데 만들어?
참고로 위에 언어는 어느 언어도 아니고 중립적으로 만들려고 했는데 내가 자바스크립트 하다보니 자바스크립트 경향이 좀 있네
list
return {a: a, b:b}
다들 배열같은걸로 방아오는구나 그런데 그렇게 돼면 문제가 받아온 값을 다른 함수에 값을 집어 넣을려면 중간에 변수에 각각 꺼내서 담던가 방법3 처럼 리턴하자마자 바로 꺼내던가 해야돼는데 전자는 메모리 낭비 후자는 시간 낭비가됌,골치아파
함수형을 pair로
포인터 나두고 뭐하냐?
받아올값을 포인터로 매개변수로 넘겨
C#은 그런용도로 out 키워드였나 아예 문법으로 만듬
언어중립적이라길레 포인터 언급 안했는데 타언어는 포인터 개념 없이도 값수정 가능해지지않나?
Parameter로 넘김
아, 포인터가 있었구나,생각보다 방법이 엄청 많네?
두개로 단정지었으니, Pair로 받으면 되겠지.
Pair<T, T>